ConnXL Docs

Construire

Déployer et exécuter l'agent

L'agent est un binaire unique que vous exécutez sur votre propre infrastructure. Il sert le complément Excel, exécute vos fonctions sur vos sources de données et rend compte à ConnXL uniquement via des connexions sortantes. Cette page est la référence de l'exploitant — l'installer comme service, le mettre à jour, le surveiller et le retirer.

12 min de lecture

L'agent est un exécutable unique et autonome. Il n'a ni installeur, ni dépendance d'exécution, ni base de données propre, et il lit toute sa configuration dans les variables d'environnement plus l'instantané de configuration qu'il récupère depuis ConnXL. Tout ce qui suit suppose que vous avez déjà créé un complément et un environnement dans le tableau de bord — l'onglet Déploiement de la page Agent est l'endroit où vous téléchargez un binaire déjà gravé avec son identité.

Un agent par environnement

Chaque environnement exécute son propre agent, et le certificat pour lequel l'agent s'enrôle est ce qui le lie à cet environnement. Vous pouvez exécuter plusieurs répliques de l'agent d'un même environnement derrière un répartiteur de charge — elles partagent toutes un seul jeton d'enrôlement et chacune obtient son propre certificat.

Télécharger et vérifier le binaire

Déploiement → Télécharger l'agent configuré vous donne un binaire avec son URL de backend, son ID de complément, son ID d'environnement et un jeton d'enrôlement neuf déjà intégrés, de sorte qu'il s'exécute avec zéro variable d'environnement. Plateformes : Windows x64, Linux x64, Linux arm64.

Chaque téléchargement est publié avec un fichier SHA256SUMS. Vérifiez-le avant de l'exécuter :

vérifier le téléchargementsh
# 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]

Confirmez à tout moment ce dont vous disposez :

shellsh
connxl-agent --version     # affiche la version de build
connxl-agent --licenses    # affiche les mentions tierces

Un binaire gravé porte un identifiant

Le jeton d'enrôlement intégré est un véritable identifiant pour ce seul environnement. Traitez un téléchargement configuré comme un secret : ne le commitez pas dans un dépôt et ne le partagez pas entre environnements. Si l'un d'eux fuit, Régénérer dans l'onglet Déploiement révoque d'un coup tous les jetons émis pour cet environnement.

L'exécuter comme un service

L'agent s'exécute au premier plan et écrit ses logs sur stdout, n'importe quel gestionnaire de services convient donc. Donnez-lui un utilisateur dédié et un répertoire de travail stable — c'est là qu'il écrit l'identité qu'il enrôle.

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 doit dépasser le drainage de 10 s des requêtes en vol de l'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 (service)

Le binaire est une simple application console, enregistrez-le donc avec sc.exe ou un wrapper de service tel que NSSM :

PowerShell (admin)powershell
# Avec NSSM (gère la redirection de stdout et les redémarrages)
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

L'exécuter dans un conteneur

Il n'y a pas d'image publiée — construisez-en une minimale autour du binaire Linux. L'agent a besoin des certificats CA pour le TLS sortant et d'un volume persistant pour son identité, sans quoi il se réenrôle à chaque redémarrage.

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. Exécutez-le comme un Deployment derrière un Service, avec le jeton d'enrôlement issu d'un Secret. Utilisez uniquement une sonde de liveness — voir l'avertissement sur l'endpoint de santé à la section 6.

deployment.yaml (extrait)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

Le jeton d'enrôlement est réutilisable

Chaque réplique peut utiliser le même jeton — chaque échange produit son propre certificat. C'est ce qui permet à un Deployment mis à l'échelle de fonctionner à partir d'un seul Secret.

Variables d'environnement

Un binaire gravé n'a besoin d'aucune de ces variables ; chacune remplace tout de même sa valeur gravée. Seul le groupe identité est requis sur un binaire non configuré.

Identité et backend

VariableCe qu'elle faitPar défaut
CONNXL_BACKEND_URLURL de base de l'API ConnXL. Requise (ou gravée) — l'agent refuse de démarrer sans elle
CONNXL_ENROLL_TOKENIdentifiant d'enrôlement à usage unique par agent ; réutilisable entre répliques
CONNXL_ENROLL_ATTESTATIONaws | gcp | azure — s'enrôler avec l'identité cloud de l'hôte au lieu d'un jeton
CONNXL_ADDIN_IDComplément que cet agent sertvaleur gravée
CONNXL_ENV_IDEnvironnement que cet agent sertvaleur gravée
CONNXL_BOOTSTRAP_URLURL distincte pour l'enrôlement sans certificatCONNXL_BACKEND_URL
CONNXL_REPLICA_IDÉtiquette distinguant les répliques dans le tableau de bordhostname
CONNXL_ZONE, CONNXL_REGIONÉtiquettes de placement rapportées avec la santévide
CONNXL_HEARTBEAT_SECONDSIntervalle du heartbeat, plafonné à 6030

Listener et TLS

VariableCe qu'elle faitPar défaut
CONNXL_LISTEN_ADDRAdresse d'écoute de la surface du complément:3000
CONNXL_TLS_TERMINATIONedge (HTTP simple derrière un répartiteur de charge terminant le TLS) ou agent (l'agent sert en HTTPS depuis cert.pem/key.pem à côté du binaire)edge
CONNXL_TRUSTED_PROXYFaire confiance aux en-têtes transférés (X-Forwarded-For/-Proto/-Host) du proxy frontal : nécessaire pour les règles d'accès réseau ET pour construire le callback de connexion OAuth en https:// lorsque le TLS se termine sur un équilibreur de charge ; sans cela, la connexion des utilisateurs échoue pour non-concordance de l'URI de redirection. À activer uniquement derrière un proxy que vous contrôlezdésactivé

Stockage et fichiers d'identité

VariableCe qu'elle faitPar défaut
CONNXL_DATA_DIRRépertoire de base pour identity/ et logs/connxl-agent/ à côté du binaire
CONNXL_MTLS_CERTOù est stocké le certificat client enrôlé<data dir>/identity/cert.pem
CONNXL_MTLS_KEYOù est stockée la clé privée enrôlée<data dir>/identity/key.pem
CONNXL_STATE_DIRCache du bail de droits (entitlement lease)le répertoire d'identité

Logging

VariableCe qu'elle faitPar défaut
CONNXL_LOG_LEVELdebug | info | warn | error. error masque aussi les échecs réessayables (un heartbeat échoué, un ré-enrôlement échoué) — préférez warn pour réduire le bruitinfo
CONNXL_LOG_FORMATjson pour un objet JSON par lignetext
CONNXL_LOG_MAX_MBTaille à laquelle le fichier de log tourne100
CONNXL_LOG_MAX_FILESFichiers tournés conservés ; l'empreinte disque vaut environ MAX_MB × MAX_FILES5

Secrets

VariableCe qu'elle faitPar défaut
CONNXL_SECRETS_KEYPhrase secrète du magasin de secrets en fichier chiffré
CONNXL_SECRETS_TTL_SECONDSTTL de cache des références secret:// résolues ; 0 désactive300
CONNXL_SECRETS_AWS_REGIONRégion pour les références AWS Secrets Manager
CONNXL_SECRETS_AWS_ENDPOINTEndpoint personnalisé Secrets Manager / Parameter Store — un endpoint VPC, un endpoint FIPS ou un émulateur
CONNXL_SECRETS_GCP_ENDPOINTEndpoint personnalisé GCP Secret Manager. Lorsqu'il est défini, les Application Default Credentials sont ignorées
CONNXL_SECRETS_AZURE_ENDPOINTEndpoint personnalisé Azure Key Vault. Lorsqu'il est défini, DefaultAzureCredential est ignoré

Les endpoints personnalisés doivent être en https

Les trois variables _ENDPOINT sont ignorées sauf si l'URL est en https ou pointe vers une adresse de bouclage, et l'agent journalise un avertissement lorsqu'il en rejette une. Définir un endpoint personnalisé contourne aussi la chaîne d'identifiants de ce cloud : un endpoint en clair enverrait donc les noms des secrets et recevrait leurs valeurs en clair, sans authentification et sans erreur d'authentification pour signaler l'erreur.

Réglage du pool de base de données

Chaque connecteur SQL lit ses propres réglages de pool, préfixés par moteur — POSTGRES_MAX_OPEN_CONNS, MYSQL_MAX_IDLE_CONNS, SQLSERVER_CONN_MAX_LIFETIME, et ainsi de suite (MAX_OPEN_CONNS vaut 20 par défaut, MAX_IDLE_CONNS 5). Laissez-les tels quels sauf si vous atteignez une limite de connexions côté serveur.

Prérequis réseau

Chaque connexion vers ConnXL est initiée par l'agent en sortant. Rien n'a besoin d'atteindre l'agent depuis internet, et aucune règle de pare-feu entrante n'est requise pour ConnXL lui-même.

Sortant — autorisez vers l'hôte de votre API ConnXL sur TCP 443 :

CheminProtocoleQuand
POST /v1/agent/enrollHTTPSpremier démarrage uniquement
GET /v1/agent/certificates/trust-bundleHTTPSpremier démarrage uniquement
POST /v1/agent/certificates/renewHTTPSrenouvellement automatique
GET /v1/agent/config/snapshotHTTPSau démarrage et après chaque changement
POST /v1/agent/heartbeatHTTPStoutes les 30 s
GET /v1/agent/config/streamHTTPS/SSEpersistant
GET /v1/agent/controlWSSpersistant
POST /v1/agent/telemetry/ingestHTTPSpériodique

Deux d'entre elles — le flux SSE de configuration et le canal de contrôle WebSocket — sont des connexions de longue durée. Les middleboxes qui tuent les connexions inactives provoqueront des reconnexions répétées ; l'agent s'en remet, mais le tableau de bord clignotera.

Entrant : vos utilisateurs Excel (et votre répartiteur de charge) doivent atteindre l'agent sur CONNXL_LISTEN_ADDR, port 3000 par défaut.

Autorisez aussi : vos propres sources de données et — uniquement si vous utilisez l'enrôlement par identité cloud — l'endpoint de métadonnées d'instance (169.254.169.254).

Derrière un proxy HTTP

HTTPS_PROXY, HTTP_PROXY et NO_PROXY sont respectés sur toutes les connexions que l'agent établit vers ConnXL, y compris les canaux SSE et WebSocket de longue durée — un hôte sans sortie directe fonctionne donc. L'authentification par certificat client n'est pas affectée : le proxy ouvre un tunnel CONNECT et la poignée de main TLS reste de bout en bout.

Si votre proxy inspecte le TLS au lieu de le tunneliser, sa CA racine doit être approuvée par le système d'exploitation sur lequel tourne l'agent — l'agent utilise le magasin de confiance du système. Les appels sortants vers vos propres sources de données REST suivent les mêmes variables, sauf si cette connexion utilise une CA personnalisée ou un certificat client.

Contrôles de santé et surveillance

L'agent sert GET /healthz sur son adresse d'écoute. Il renvoie 200 ok dès lors que le processus tourne.

/healthz est un contrôle de liveness, pas de readiness

Il ne vérifie rien — ni la connectivité au backend, ni l'enrôlement, ni le fait qu'un instantané de configuration soit jamais arrivé. Un agent qui a perdu sa connexion à ConnXL et qui sert un jeu de fonctions périmé répond toujours 200. Utilisez-le pour détecter un processus mort ou un hôte injoignable ; ne l'utilisez pas comme sonde de readiness Kubernetes et n'y voyez pas la preuve que l'agent fonctionne.

Pour une véritable santé, utilisez le tableau de bord : la page Agent de l'environnement affiche le CPU, la mémoire et le disque de chaque réplique avec une chronologie sur 24 heures, le dernier heartbeat et la version de configuration réellement appliquée. Le backend signale un agent hors ligne après environ 90 secondes sans heartbeat, et les alertes peuvent vous prévenir — voir Alertes.

Mettre à jour vers une nouvelle version

L'agent ne se met jamais à jour tout seul. Lorsqu'une réplique rapporte une version plus ancienne que la dernière publiée, le tableau de bord la signale et peut lever une notification Mise à jour disponible, mais rien n'est téléchargé ni remplacé sans vous. Une mise à jour consiste à : mettre le nouveau binaire en place et redémarrer.

Comme il n'y a pas de poignée de main de désenregistrement avec votre répartiteur de charge, sortez vous-même l'instance de la rotation en premier — /healthz continuera de renvoyer 200 jusque pendant un arrêt, il ne peut donc pas signaler le drainage à votre place.

  1. Retirez la réplique du répartiteur de charge.
  2. Envoyez drain depuis la page Agent. Cela démonte les abonnés en streaming afin qu'ils se reconnectent ailleurs ; cela n'arrête ni le listener ni le processus.
  3. Arrêtez le service (SIGTERM, ou systemctl stop). Les requêtes en vol disposent de 10 secondes maximum pour finir, prévoyez donc au moins 30 secondes de timeout d'arrêt.
  4. Remplacez le binaire et redémarrez le service.
  5. Confirmez la nouvelle version sur la page Agent, puis remettez la réplique en rotation.

Avec plus d'une réplique, faites-le une à la fois et l'environnement reste disponible du début à la fin.

Revenir en arrière

Le retour arrière est la même procédure avec l'ancien binaire — l'agent ne conserve aucun état spécifique à une version sur le disque, et son certificat enrôlé reste valide. Gardez le binaire précédent jusqu'à ce que vous ayez confirmé que le nouveau sert bien.

Ce que l'agent stocke sur le disque

EmplacementContenu
<data dir>/identity/Le certificat mTLS enrôlé et la clé privée (mode de répertoire 0700)
<data dir>/logs/Un fichier de log daté par jour, purgé après 7 jours
<state dir>/lease.jsonBail de droits mis en cache
~/.connxl/L'index du trousseau de l'OS et le magasin de secrets en fichier chiffré, le cas échéant

Les résultats de fonctions mis en cache sont conservés en mémoire, ou dans Valkey/Redis lorsque l'environnement configure un cache externe — jamais sur le disque.

Vous n'avez besoin de sauvegarder rien de tout cela. Si le répertoire de données est perdu, l'agent se réenrôle automatiquement au démarrage suivant et poursuit, tant que son jeton d'enrôlement (ou son attestation cloud, ou son identité gravée) est toujours dans son environnement. Le seul coût est un nouveau certificat et un historique de logs remis à zéro. Vous n'avez besoin d'un nouveau jeton que si un administrateur a cliqué sur Régénérer entre-temps.

Protégez tout de même la clé privée

Rien n'a besoin d'être sauvegardé, mais le répertoire d'identité contient un identifiant actif. Gardez-le sur un disque local avec ses permissions restrictives intactes plutôt que sur un volume partagé, et ne l'intégrez jamais dans une image machine destinée à être clonée.

Dimensionnement et mise à l'échelle

L'agent est un proxy léger : il ne détient aucun jeu de données, et son travail est dominé par l'attente de vos sources de données. Une petite instance — 1 vCPU et 512 Mo de mémoire — fait tourner confortablement un environnement typique, et l'usage disque se limite à une semaine de logs.

Mettez à l'échelle horizontalement, pas verticalement. Ajoutez des répliques derrière un répartiteur de charge quand vous avez besoin de débit ou de redondance :

  • Toutes les répliques d'un environnement partagent un seul jeton d'enrôlement et apparaissent individuellement sur la page Agent.
  • Aucune affinité de session n'est requise — l'agent ne conserve aucun état par utilisateur entre les requêtes.
  • Dimensionnez d'abord pour la concurrence au niveau de vos sources de données ; les valeurs par défaut du pool SQL (20 connexions ouvertes par moteur, par réplique) se multiplient par le nombre de répliques.

Retirer un agent

Pour mettre un hôte hors service proprement :

  1. Sortez-le de la rotation et confirmez que le trafic est passé sur une autre réplique.
  2. Arrêtez le service et désactivez son démarrage automatique.
  3. Évincez la réplique depuis la page Agent de l'environnement. Cela la met en liste de blocage afin qu'elle ne puisse pas se reconnecter même si le processus revient — le moyen fiable de couper un hôte que vous ne contrôlez plus.
  4. Supprimez le répertoire de données pour détruire la clé privée sur le disque.
  5. Si vous retirez tous les agents de cet environnement, cliquez sur Régénérer dans l'onglet Déploiement pour que les anciens jetons d'enrôlement cessent de fonctionner.

Arrêter le processus n'est pas une révocation

Un agent arrêté détient toujours un certificat valide. Tant que vous ne l'évincez pas, redémarrer le binaire le fait rejoindre l'environnement. Évincez d'abord, supprimez ensuite.

Sur cette page