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:
# 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:
connxl-agent --version # imprime la versión de compilación
connxl-agent --licenses # imprime los avisos de tercerosUn 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)
[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.targetsudo systemctl daemon-reload
sudo systemctl enable --now connxl-agent
sudo systemctl status connxl-agentWindows (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:
# 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 ConnXLAgentEjecú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.
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.
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: 30El 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
| Variable | Qué hace | Por defecto |
|---|---|---|
CONNXL_BACKEND_URL | URL base de la API de ConnXL. Obligatoria (o grabada) — el agent se niega a arrancar sin ella | — |
CONNXL_ENROLL_TOKEN | Credencial de inscripción de un solo uso por agent; reutilizable entre réplicas | — |
CONNXL_ENROLL_ATTESTATION | aws | gcp | azure — inscríbete con la identidad en la nube del host en lugar de un token | — |
CONNXL_ADDIN_ID | Complemento al que sirve este agent | valor grabado |
CONNXL_ENV_ID | Entorno al que sirve este agent | valor grabado |
CONNXL_BOOTSTRAP_URL | URL separada para la inscripción sin certificado | CONNXL_BACKEND_URL |
CONNXL_REPLICA_ID | Etiqueta que distingue las réplicas en el panel | hostname |
CONNXL_ZONE, CONNXL_REGION | Etiquetas de ubicación reportadas con la salud | vacío |
CONNXL_HEARTBEAT_SECONDS | Intervalo del heartbeat, limitado a 60 | 30 |
Listener y TLS
| Variable | Qué hace | Por defecto |
|---|---|---|
CONNXL_LISTEN_ADDR | Dirección de escucha de la superficie del complemento | :3000 |
CONNXL_TLS_TERMINATION | edge (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_PROXY | Confí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 controles | desactivado |
Almacenamiento y archivos de identidad
| Variable | Qué hace | Por defecto |
|---|---|---|
CONNXL_DATA_DIR | Directorio base de identity/ y logs/ | connxl-agent/ junto al binario |
CONNXL_MTLS_CERT | Dónde se guarda el certificado de cliente inscrito | <data dir>/identity/cert.pem |
CONNXL_MTLS_KEY | Dónde se guarda la clave privada inscrita | <data dir>/identity/key.pem |
CONNXL_STATE_DIR | Caché de la licencia de derechos (entitlement lease) | el directorio de identidad |
Logging
| Variable | Qué hace | Por defecto |
|---|---|---|
CONNXL_LOG_LEVEL | debug | info | warn | error. error oculta también los fallos reintentables (un heartbeat fallido, una reinscripción fallida) — usa warn para bajar el ruido | info |
CONNXL_LOG_FORMAT | json para un objeto JSON por línea | text |
CONNXL_LOG_MAX_MB | Tamaño al que rota el archivo de registro | 100 |
CONNXL_LOG_MAX_FILES | Archivos rotados que se conservan; la huella en disco es aproximadamente MAX_MB × MAX_FILES | 5 |
Secretos
| Variable | Qué hace | Por defecto |
|---|---|---|
CONNXL_SECRETS_KEY | Frase de paso para el almacén de secretos en archivo cifrado | — |
CONNXL_SECRETS_TTL_SECONDS | TTL de caché de las referencias secret:// resueltas; 0 lo desactiva | 300 |
CONNXL_SECRETS_AWS_REGION | Región para las referencias de AWS Secrets Manager | — |
CONNXL_SECRETS_AWS_ENDPOINT | Endpoint propio de Secrets Manager / Parameter Store — un VPC endpoint, un endpoint FIPS o un emulador | — |
CONNXL_SECRETS_GCP_ENDPOINT | Endpoint propio de GCP Secret Manager. Si se define, se omiten las Application Default Credentials | — |
CONNXL_SECRETS_AZURE_ENDPOINT | Endpoint 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:
| Ruta | Protocolo | Cuándo |
|---|---|---|
POST /v1/agent/enroll | HTTPS | solo en el primer arranque |
GET /v1/agent/certificates/trust-bundle | HTTPS | solo en el primer arranque |
POST /v1/agent/certificates/renew | HTTPS | renovación automática |
GET /v1/agent/config/snapshot | HTTPS | al arrancar y tras cada cambio |
POST /v1/agent/heartbeat | HTTPS | cada 30 s |
GET /v1/agent/config/stream | HTTPS/SSE | persistente |
GET /v1/agent/control | WSS | persistente |
POST /v1/agent/telemetry/ingest | HTTPS | perió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.
- Quita la réplica del balanceador de carga.
- Envía
draindesde 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. - Detén el servicio (
SIGTERM, osystemctl stop). Las peticiones en vuelo disponen de hasta 10 segundos para terminar, así que deja al menos 30 segundos de timeout de parada. - Reemplaza el binario y arranca el servicio de nuevo.
- 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ón | Contenido |
|---|---|
<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.json | Licencia 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:
- Sácalo de rotación y confirma que el tráfico se ha movido a otra réplica.
- Detén el servicio y desactiva su arranque automático.
- 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.
- Borra el directorio de datos para destruir la clave privada en disco.
- 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.
Glosario
Todos los términos de ConnXL en un solo sitio, con la distinción que más se confunde: un complemento es lo que creas, un agent es lo que lo ejecuta.
Instalar el complemento
Instalar ConnXL significa dos cosas: ejecutar el agent en un host que tus usuarios de Excel puedan alcanzar, y llevar el manifiesto generado a Excel. El agent sirve el complemento; el manifiesto solo le dice a Excel dónde vive el agent.