ConnXL Docs

Crear

Despliega y ejecuta el agent

El agent es un único binario que ejecutas en tu propia infraestructura. Sirve el complemento de Excel, ejecuta tus funciones contra tus fuentes de datos e informa a ConnXL únicamente por conexiones salientes. Esta página es la referencia del operador — instálalo como servicio, actualízalo, monitorízalo y retíralo.

12 min de lectura

El agent es un único ejecutable autocontenido. No tiene instalador, ni dependencias de ejecución, ni base de datos propia, y lee toda su configuración de las variables de entorno más la instantánea de configuración que extrae de ConnXL. Todo lo que sigue asume que ya creaste un complemento y un entorno en el panel — la pestaña Despliegue de la página del Agente es donde descargas un binario que ya viene grabado con su identidad.

Un agent por entorno

Cada entorno ejecuta su propio agent, y el certificado para el que el agent se inscribe es lo que lo vincula a ese entorno. Puedes ejecutar muchas réplicas del agent de un mismo entorno detrás de un balanceador de carga — todas comparten un único token de inscripción y cada una obtiene su propio certificado.

Descarga y verifica el binario

Despliegue → Descargar agent configurado te da un binario con su URL del backend, el ID del complemento, el ID del entorno y un token de inscripción nuevo ya incrustados, así que se ejecuta con cero variables de entorno. Plataformas: Windows x64, Linux x64, Linux arm64.

Cada descarga se publica junto a un archivo SHA256SUMS. Verifícalo antes de ejecutarlo:

verificar la descargash
# Linux / macOS
sha256sum -c SHA256SUMS --ignore-missing

# Windows PowerShell
(Get-FileHash .\connxl-agent.exe -Algorithm SHA256).Hash -eq (Get-Content .\SHA256SUMS | Select-String 'connxl-agent.exe').ToString().Split()[0]

Confirma en cualquier momento lo que tienes:

shellsh
connxl-agent --version     # imprime la versión de compilación
connxl-agent --licenses    # imprime los avisos de terceros

Un binario grabado lleva una credencial

El token de inscripción incrustado es una credencial real para ese único entorno. Trata una descarga configurada como un secreto: no la subas a un repositorio ni la compartas entre entornos. Si una se filtra, Regenerar en la pestaña Despliegue revoca de una vez todos los tokens emitidos para ese entorno.

Ejecútalo como un servicio

El agent se ejecuta en primer plano y escribe sus logs en stdout, así que sirve cualquier gestor de servicios. Dale un usuario dedicado y un directorio de trabajo estable — ahí escribe la identidad que inscribe.

Linux (systemd)

/etc/systemd/system/connxl-agent.serviceini
[Unit]
Description=ConnXL Agent
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=connxl
WorkingDirectory=/opt/connxl
ExecStart=/opt/connxl/connxl-agent
Restart=always
RestartSec=5
Environment=CONNXL_DATA_DIR=/var/lib/connxl
# TimeoutStopSec debe superar el drenaje de 10 s de peticiones en vuelo del agent.
TimeoutStopSec=30

[Install]
WantedBy=multi-user.target
shellsh
sudo systemctl daemon-reload
sudo systemctl enable --now connxl-agent
sudo systemctl status connxl-agent

Windows (servicio)

El binario es una aplicación de consola normal, así que regístralo con sc.exe o con un envoltorio de servicios como NSSM:

PowerShell (admin)powershell
# Usando NSSM (gestiona la redirección de stdout y los reinicios)
nssm install ConnXLAgent "C:\Program Files\ConnXL\connxl-agent.exe"
nssm set ConnXLAgent AppDirectory "C:\Program Files\ConnXL"
nssm set ConnXLAgent AppEnvironmentExtra "CONNXL_DATA_DIR=C:\ProgramData\ConnXL"
nssm set ConnXLAgent AppStdout "C:\ProgramData\ConnXL\logs\stdout.log"
nssm start ConnXLAgent

Ejecútalo en un contenedor

No hay imagen publicada — construye una mínima alrededor del binario de Linux. El agent necesita certificados de CA para el TLS saliente y un volumen persistente para su identidad, o se volverá a inscribir en cada reinicio.

Dockerfiledocker
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \
&& rm -rf /var/lib/apt/lists/*
COPY connxl-agent /usr/local/bin/connxl-agent
ENV CONNXL_DATA_DIR=/var/lib/connxl
VOLUME /var/lib/connxl
EXPOSE 3000
ENTRYPOINT ["/usr/local/bin/connxl-agent"]

Kubernetes. Ejecútalo como un Deployment detrás de un Service, con el token de inscripción en un Secret. Usa solo una sonda de liveness — consulta el aviso sobre el endpoint de salud en la sección 6.

deployment.yaml (extracto)yaml
spec:
containers:
  - name: connxl-agent
    image: your-registry/connxl-agent:0.1.0
    ports:
      - containerPort: 3000
    env:
      - name: CONNXL_BACKEND_URL
        value: https://api.connxl.com
      - name: CONNXL_ADDIN_ID
        value: "<add-in id>"
      - name: CONNXL_ENV_ID
        value: "<environment id>"
      - name: CONNXL_ENROLL_TOKEN
        valueFrom:
          secretKeyRef: { name: connxl-agent, key: enrollToken }
    livenessProbe:
      httpGet: { path: /healthz, port: 3000 }
      initialDelaySeconds: 10
      periodSeconds: 30
    terminationGracePeriodSeconds: 30

El token de inscripción es reutilizable

Cada réplica puede usar el mismo token — cada intercambio produce su propio certificado. Eso es lo que hace que un Deployment escalado funcione a partir de un único Secret.

Variables de entorno

Un binario grabado no necesita ninguna de estas; aun así, cada variable anula su valor grabado. Solo el grupo de identidad es obligatorio en un binario sin configurar.

Identidad y backend

VariableQué hacePor defecto
CONNXL_BACKEND_URLURL base de la API de ConnXL. Obligatoria (o grabada) — el agent se niega a arrancar sin ella
CONNXL_ENROLL_TOKENCredencial de inscripción de un solo uso por agent; reutilizable entre réplicas
CONNXL_ENROLL_ATTESTATIONaws | gcp | azure — inscríbete con la identidad en la nube del host en lugar de un token
CONNXL_ADDIN_IDComplemento al que sirve este agentvalor grabado
CONNXL_ENV_IDEntorno al que sirve este agentvalor grabado
CONNXL_BOOTSTRAP_URLURL separada para la inscripción sin certificadoCONNXL_BACKEND_URL
CONNXL_REPLICA_IDEtiqueta que distingue las réplicas en el panelhostname
CONNXL_ZONE, CONNXL_REGIONEtiquetas de ubicación reportadas con la saludvacío
CONNXL_HEARTBEAT_SECONDSIntervalo del heartbeat, limitado a 6030

Listener y TLS

VariableQué hacePor defecto
CONNXL_LISTEN_ADDRDirección de escucha de la superficie del complemento:3000
CONNXL_TLS_TERMINATIONedge (HTTP plano detrás de un balanceador de carga que termina el TLS) o agent (el agent sirve HTTPS desde cert.pem/key.pem junto al binario)edge
CONNXL_TRUSTED_PROXYConfía en las cabeceras reenviadas (X-Forwarded-For/-Proto/-Host) del proxy frontal: necesario para las reglas de acceso de red Y para construir el callback de inicio de sesión OAuth como https:// cuando el TLS termina en un balanceador; sin esto, el inicio de sesión de los usuarios falla por discrepancia en la URI de redirección. Actívalo solo detrás de un proxy que controlesdesactivado

Almacenamiento y archivos de identidad

VariableQué hacePor defecto
CONNXL_DATA_DIRDirectorio base de identity/ y logs/connxl-agent/ junto al binario
CONNXL_MTLS_CERTDónde se guarda el certificado de cliente inscrito<data dir>/identity/cert.pem
CONNXL_MTLS_KEYDónde se guarda la clave privada inscrita<data dir>/identity/key.pem
CONNXL_STATE_DIRCaché de la licencia de derechos (entitlement lease)el directorio de identidad

Logging

VariableQué hacePor defecto
CONNXL_LOG_LEVELdebug | info | warn | error. error oculta también los fallos reintentables (un heartbeat fallido, una reinscripción fallida) — usa warn para bajar el ruidoinfo
CONNXL_LOG_FORMATjson para un objeto JSON por líneatext
CONNXL_LOG_MAX_MBTamaño al que rota el archivo de registro100
CONNXL_LOG_MAX_FILESArchivos rotados que se conservan; la huella en disco es aproximadamente MAX_MB × MAX_FILES5

Secretos

VariableQué hacePor defecto
CONNXL_SECRETS_KEYFrase de paso para el almacén de secretos en archivo cifrado
CONNXL_SECRETS_TTL_SECONDSTTL de caché de las referencias secret:// resueltas; 0 lo desactiva300
CONNXL_SECRETS_AWS_REGIONRegión para las referencias de AWS Secrets Manager
CONNXL_SECRETS_AWS_ENDPOINTEndpoint propio de Secrets Manager / Parameter Store — un VPC endpoint, un endpoint FIPS o un emulador
CONNXL_SECRETS_GCP_ENDPOINTEndpoint propio de GCP Secret Manager. Si se define, se omiten las Application Default Credentials
CONNXL_SECRETS_AZURE_ENDPOINTEndpoint propio de Azure Key Vault. Si se define, se omite DefaultAzureCredential

Los endpoints personalizados deben ser https

Las tres variables _ENDPOINT se ignoran salvo que la URL sea https o apunte a una dirección de loopback, y el agent registra un aviso cuando rechaza una. Definir un endpoint propio omite además la cadena de credenciales de esa nube, así que un endpoint en texto plano enviaría los nombres de los secretos y recibiría sus valores en claro, sin autenticar y sin ningún error de autenticación que delate el fallo.

Ajuste del pool de base de datos

Cada conector SQL lee sus propios parámetros de pool, prefijados por motor — POSTGRES_MAX_OPEN_CONNS, MYSQL_MAX_IDLE_CONNS, SQLSERVER_CONN_MAX_LIFETIME, y así (MAX_OPEN_CONNS es 20 por defecto, MAX_IDLE_CONNS 5). Déjalos como están salvo que estés topando con un límite de conexiones del lado del servidor.

Requisitos de red

Cada conexión con ConnXL la inicia el agent hacia fuera. Nada necesita alcanzar al agent desde internet, y no hace falta ninguna regla de firewall de entrada para el propio ConnXL.

Salida — permite hacia el host de tu API de ConnXL por TCP 443:

RutaProtocoloCuándo
POST /v1/agent/enrollHTTPSsolo en el primer arranque
GET /v1/agent/certificates/trust-bundleHTTPSsolo en el primer arranque
POST /v1/agent/certificates/renewHTTPSrenovación automática
GET /v1/agent/config/snapshotHTTPSal arrancar y tras cada cambio
POST /v1/agent/heartbeatHTTPScada 30 s
GET /v1/agent/config/streamHTTPS/SSEpersistente
GET /v1/agent/controlWSSpersistente
POST /v1/agent/telemetry/ingestHTTPSperiódico

Dos de estas — el stream SSE de configuración y el canal de control por WebSocket — son conexiones de larga duración. Los middleboxes que cortan las conexiones inactivas provocarán reconexiones repetidas; el agent se recupera, pero el panel parpadeará.

Entrada: tus usuarios de Excel (y tu balanceador de carga) deben alcanzar al agent en CONNXL_LISTEN_ADDR, puerto 3000 por defecto.

Permite también: tus propias fuentes de datos y — solo si usas inscripción con identidad en la nube — el endpoint de metadatos de la instancia (169.254.169.254).

Detrás de un proxy HTTP

HTTPS_PROXY, HTTP_PROXY y NO_PROXY se respetan en todas las conexiones que el agent hace hacia ConnXL, incluidos los canales SSE y WebSocket de larga duración — así que un host sin salida directa funciona. La autenticación por certificado de cliente no se ve afectada: el proxy abre un túnel CONNECT y el handshake TLS sigue siendo extremo a extremo.

Si tu proxy inspecciona el TLS en vez de tunelizarlo, su CA raíz debe ser de confianza para el sistema operativo donde corre el agent — el agent usa el almacén de confianza del sistema. Las llamadas salientes a tus propias fuentes de datos REST siguen las mismas variables, salvo que esa conexión use una CA personalizada o un certificado de cliente.

Comprobaciones de salud y monitorización

El agent sirve GET /healthz en su dirección de escucha. Devuelve 200 ok siempre que el proceso esté en marcha.

/healthz es una comprobación de liveness, no de readiness

No comprueba nada — ni la conectividad con el backend, ni la inscripción, ni si alguna vez llegó una instantánea de configuración. Un agent que ha perdido su conexión con ConnXL y está sirviendo un conjunto de funciones obsoleto sigue respondiendo 200. Úsalo para detectar un proceso muerto o un host inalcanzable; no lo uses como sonda de readiness de Kubernetes ni lo tomes como prueba de que el agent funciona.

Para salud real, usa el panel: la página del Agente del entorno muestra la CPU, la memoria y el disco de cada réplica con una línea temporal de 24 horas, el último heartbeat y la versión de configuración realmente aplicada. El backend marca un agent como desconectado tras unos 90 segundos sin heartbeat, y las alertas pueden avisarte — consulta Alertas.

Actualiza a una versión nueva

El agent nunca se actualiza solo. Cuando una réplica reporta una versión más antigua que la última publicada, el panel la señala y puede levantar una notificación de Actualización disponible, pero no se descarga ni se reemplaza nada sin ti. Una actualización consiste en: colocar el binario nuevo y reiniciar.

Como no hay un protocolo de baja con tu balanceador de carga, saca tú mismo la instancia de rotación primero — /healthz seguirá devolviendo 200 incluso durante un apagado, así que no puede señalar el drenaje por ti.

  1. Quita la réplica del balanceador de carga.
  2. Envía drain desde la página del Agente. Esto desmonta los suscriptores de streaming para que se reconecten en otro sitio; no detiene el listener ni termina el proceso.
  3. Detén el servicio (SIGTERM, o systemctl stop). Las peticiones en vuelo disponen de hasta 10 segundos para terminar, así que deja al menos 30 segundos de timeout de parada.
  4. Reemplaza el binario y arranca el servicio de nuevo.
  5. Confirma la nueva versión en la página del Agente, y devuelve la réplica a rotación.

Con más de una réplica, hazlo de una en una y el entorno se mantiene en marcha durante todo el proceso.

Volver atrás

Volver atrás es el mismo procedimiento con el binario anterior — el agent no guarda en disco ningún estado específico de versión, y su certificado inscrito sigue siendo válido. Conserva el binario anterior hasta que hayas confirmado que el nuevo está sirviendo.

Qué guarda el agent en disco

UbicaciónContenido
<data dir>/identity/El certificado mTLS inscrito y la clave privada (modo de directorio 0700)
<data dir>/logs/Un archivo de log fechado por día, purgado a los 7 días
<state dir>/lease.jsonLicencia de derechos cacheada
~/.connxl/El índice del llavero del SO y el almacén de secretos en archivo cifrado, si se usan

Los resultados de función cacheados se guardan en memoria, o en Valkey/Redis cuando el entorno configura una caché externa — nunca en disco.

No necesitas hacer copia de seguridad de nada de esto. Si se pierde el directorio de datos, el agent se vuelve a inscribir automáticamente en el siguiente arranque y continúa, siempre que su token de inscripción (o la atestación en la nube, o la identidad grabada) siga en su entorno. El único coste es un certificado nuevo y un historial de logs desde cero. Solo necesitas un token nuevo si un administrador ha pulsado Regenerar desde entonces.

La clave privada sí hay que protegerla

Nada necesita copia de seguridad, pero el directorio de identidad contiene una credencial viva. Mantenlo en disco local con sus permisos restrictivos intactos en vez de en un volumen compartido, y nunca lo integres en una imagen de máquina que luego se clone.

Dimensionamiento y escalado

El agent es un proxy ligero: no retiene ningún conjunto de datos, y su trabajo está dominado por la espera a tus fuentes de datos. Una instancia pequeña — 1 vCPU y 512 MB de memoria — ejecuta con holgura un entorno típico, y el uso de disco se limita a una semana de logs.

Escala horizontalmente, no verticalmente. Añade réplicas detrás de un balanceador de carga cuando necesites rendimiento o redundancia:

  • Todas las réplicas de un entorno comparten un único token de inscripción y aparecen individualmente en la página del Agente.
  • No hace falta afinidad de sesión — el agent no guarda estado por usuario entre peticiones.
  • Dimensiona primero para la concurrencia en tus fuentes de datos; los valores por defecto del pool SQL (20 conexiones abiertas por motor, por réplica) se multiplican por el número de réplicas.

Retira un agent

Para dar de baja un host de forma limpia:

  1. Sácalo de rotación y confirma que el tráfico se ha movido a otra réplica.
  2. Detén el servicio y desactiva su arranque automático.
  3. Expulsa la réplica desde la página del Agente del entorno. Esto la pone en lista de bloqueo para que no pueda reconectarse aunque el proceso vuelva — la forma fiable de cortar un host que ya no controlas.
  4. Borra el directorio de datos para destruir la clave privada en disco.
  5. Si estás retirando todos los agents de ese entorno, pulsa Regenerar en la pestaña Despliegue para que los tokens de inscripción antiguos dejen de funcionar.

Detener el proceso no es revocarlo

Un agent detenido sigue teniendo un certificado válido. Hasta que lo expulses, reiniciar el binario lo devuelve al entorno. Expulsa primero, borra después.

En esta página