Gå til indhold
Docker Swarm-agent

Docker Swarm-agent

Vis som Markdown

Status200s Docker Swarm-agent overvåger en Docker Swarm-klynge: dens noder, services, opgaver, stacks, overlay-netværk, secrets, configs og volumes samt hver containers metrikker og logs. Du kører den med Docker Compose på en manager-node i swarmen, og klyngen vises i Status200 med det hele. Docker Swarm-monitorer advarer ud fra det, der ankommer.

Sådan virker det

Agenten består af tre containere, alle defineret i én docker-compose.yml:

  1. Collector: en OpenTelemetry Collector, der læser docker_stats for hver containers metrikker, følger containernes logfiler og følger filen med inventar-snapshottet. Den stempler alt med din klynges navn (docker.swarm.cluster.name) og sender det til Status200 over OTLP.
  2. Inventar-poller: en lille sidecar med curl og jq, der hvert 5. minut gennemgår swarm-managerens API (/nodes, /services, /tasks, /networks, /secrets, /configs, /volumes) og udleder stackene fra service-labelet com.docker.stack.namespace. Den skriver én JSON-linje pr. objekt, som collectoren videresender.
  3. AI-agent: status200-docker-swarm-ai-agent, der kører de docker-kommandoer, som Status200 AI beder om, mens den undersøger en hændelse eller advarsel på denne klynge. Den er skrivebeskyttet, medmindre du tillader rettelser (se AI-agent).
flowchart TB api["Docker Engine-API<br/>på manageren"] files["Containerstatistik<br/>og logfiler"] poller["Inventar-poller"] -->|"hvert 5. minut"| api poller -->|"JSON-linjer på<br/>et delt volume"| collector["Collector"] files --> collector collector -->|"OTLP"| oneuptime["Status200"] oneuptime -->|"undersøger en hændelse<br/>eller advarsel"| ai["Docker Swarm-AI-agent"] ai -->|"docker-kommandoer"| api

Tre containere på en manager-node

Klyngen registrerer sig med sine første data under det klyngenavn, du konfigurerer.

Før du begynder

  • En swarm-manager-node at køre agenten på: inventar-polleren og AI-agenten kalder API-endpoints, som kun managere svarer på.
  • Docker Engine 20.10 eller nyere med Docker Compose v2-pluginet.
  • En indtagelsesnøgle. Opret en under Projektindstillinger → Telemetri og APM → Indtagelsesnøgler, og kopiér dens værdi.
  • Udgående HTTPS fra noden til din Status200-URL.

Hvor agenten skal køre

Kør den på en manager-node. Collectoren rapporterer containerne på den node, den kører på, så for alle noders containermetrikker skal du køre collectoren på hver node, alle med det samme DOCKER_SWARM_CLUSTER_NAME; inventar-polleren og AI-agenten behøver kun at køre på én manager. install.sh udelader AI-agenten på en node, der ikke er manager (og fjerner en, den tidligere har installeret der). En AI-agent, der alligevel startes på en worker, registrerer sig aldrig for klyngen: den venter, til dens node er manager, så den kan ikke fortrænge managerens AI-agent. Udruller du agenten som en swarm-stack i stedet for med Compose? Hold inventar-polleren og AI-agenten på managere med begrænsningen node.role == manager.

Installer agenten

  1. Installer og start agenten

    install.sh

    Hent installationsscriptet, og kør det på en manager-node:

    Bash
    curl -sSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/install.sh -o install.sh
    sh install.sh

    Scriptet spørger efter din Status200-URL, indtagelsesnøglen og et navn til klyngen. Det installerer i /opt/status200-docker-swarm-agent, skriver en .env-fil, som kun dens ejer kan læse, og starter alle tre containere. Tilføj --no-ai-agent for at udelade AI-agenten.

    Docker Compose

    Hent docker-compose.yml, otel-collector-config.yaml og inventory-snapshot.sh fra [DockerSwarmAgent-mappen](<YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent) ind i en ny mappe på en manager-node:

    Bash
    curl -fsSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/docker-compose.yml -o docker-compose.yml
    curl -fsSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/otel-collector-config.yaml -o otel-collector-config.yaml
    curl -fsSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/inventory-snapshot.sh -o inventory-snapshot.sh
    chmod +x inventory-snapshot.sh

    Opret en .env-fil ved siden af dem. Den indeholder indtagelsesnøglen, så hold den privat med chmod 600 .env:

    .envBash
    STATUS200_URL=https://status200.ru
    STATUS200_SERVICE_TOKEN=your-telemetry-ingestion-key
    DOCKER_SWARM_CLUSTER_NAME=my-swarm

    Start agenten:

    Bash
    docker compose up -d
  2. Kontrollér, at agenten kører

    Bash
    docker compose ps
    docker compose logs --tail 50 status200-docker-swarm-agent status200-docker-swarm-inventory

    docker compose ps viser tre containere: collectoren (status200-docker-swarm-agent), inventar-polleren (status200-docker-swarm-inventory) og AI-agenten (status200-docker-swarm-ai-agent).

  3. Find klyngen i Status200

    Åbn Produkter → Infrastruktur → Docker Swarm → Alle klynger. Klyngen vises inden for få minutter, og dens sider Noder, Tjenester, Opgaver, Stacks, Netværk, Hemmeligheder, Configs og Diskenheder fyldes ud efter det første inventar-snapshot, inden for 5 minutter. Klyngens side Topologi tegner dens stacks, tjenester, opgaver og noder på ét kort: se Topologi.

Miljøvariabler

Installationsscriptet skriver de første tre til /opt/status200-docker-swarm-agent/.env; en Docker Compose-installation læser dem fra .env ved siden af docker-compose.yml. Tilføj eller ændr en hvilken som helst af dem der, og kør derefter docker compose up -d i den mappe.

VariabelPåkrævetBeskrivelse
STATUS200_URLJaDin Status200-URL, såsom https://status200.ru eller din selvhostede instans. Brug http:// og dens port, hvis instansen kun bruger HTTP.
STATUS200_SERVICE_TOKENJaIndtagelsesnøglen fra Projektindstillinger → Telemetri og APM → Indtagelsesnøgler.
DOCKER_SWARM_CLUSTER_NAMENejKlyngens navn i Status200 og den nøgle, som hver nodes data samles under: stemplet på alt som ressourceattributten docker.swarm.cluster.name. Hold det stabilt: at ændre det senere registrerer en anden klynge. Standard er docker-swarm.
DOCKER_INVENTORY_INTERVAL_SECONDSNejHvor ofte inventar-polleren tager et snapshot, i sekunder. Standard er 300.
DOCKER_API_VERSIONNejDen Docker Engine-API-version, som collectoren og inventar-polleren taler. Standard er 1.44; tom forhandler den med daemonen (se Fejlfinding). AI-agenten forhandler den, medmindre du angiver en.

AI-agentens egne indstillinger findes under AI-agent.

Hvad agenten indsamler

SignalKildeHvor det vises
Noder, services, opgaver, stacks, netværk, secrets, configs og volumesInventar-polleren, fra swarm-managerens APIKlyngens lister og detaljesider
Klyngetællinger (klare noder, kørende opgaver, services, stacks, …)Det samme snapshotOversigtens kort og sidemenuens badges
Containerens CPU, hukommelse, antal processer og oppetidReceiveren docker_statsSiden Metrikker
Containerens stdout- og stderr-logsReceiveren filelogSiden Protokoller

Sådan adskiller den sig fra Docker-agenten

Docker-agenten modellerer én vært og stempler host.name og container.runtime=docker. Docker Swarm-agenten stempler med vilje kun docker.swarm.cluster.name: Status200 arkiverer så dataene under swarm-klyngen i stedet for at registrere hver node som sin egen vært.

Mærk klyngen med projektetiketter

En ressourceattribut, der starter med status200.label., bliver en projektetiket på klyngen: status200.label.<dimension>=<value> er etiketten <dimension>:<value>. Tilføj attributterne til processoren resource i otel-collector-config.yaml, ved siden af docker.swarm.cluster.name:

YAML
processors:
  resource:
    attributes:
      # ...existing attributes...
      - key: status200.label.team
        value: platform
        action: upsert
      - key: status200.label.env
        value: production
        action: upsert

Collectoren læser kun sin konfiguration, når den starter: Kør docker compose restart status200-docker-swarm-agent. Klyngen viser derefter etiketterne team:platform og env:production. Etiketter sammenlignes uden hensyn til store og små bogstaver, så en eksisterende etiket Production genbruges i stedet for at blive dubleret, og agenten fjerner aldrig en etiket, som nogen har tilføjet i Status200.

Kør som en systemd-tjeneste

For at starte agenten sammen med noden og genstarte den, når den fejler, skal du installere dens systemd-enhed. Den antager, at agenten bor i /opt/status200-docker-swarm-agent, hvor installationsscriptet lægger den:

Bash
sudo curl -fsSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/systemd/status200-docker-swarm-agent.service -o /etc/systemd/system/status200-docker-swarm-agent.service
sudo systemctl daemon-reload
sudo systemctl enable --now status200-docker-swarm-agent

Opgradering af agenten

Agenten rapporterer den collector-version, den kører. Når den er ældre end den version, denne Status200-udgivelse fastlåser, vises et advarselstegn ved siden af agentens version på klyngens side Oversigt. Vælg det for at se disse kommandoer.

Kør installationsscriptet igen på manager-noden, og besvar dets spørgsmål med samme URL, nøgle og klyngenavn. Det henter de nyeste filer, henter imagene og genstarter agenten:

Bash
curl -sSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/install.sh -o install.sh
sh install.sh

Scriptet skriver .env igen ud fra dine svar. Det bevarer kun AI-agentens mållister og det, AI må gøre (STATUS200_AI_INVESTIGATION, STATUS200_AI_FIXES): Tilføj igen enhver variabel, du selv har sat, fx DOCKER_API_VERSION. Har du slået AI-rettelser til? Kør det som STATUS200_AI_ALLOW_WRITES=true sh install.sh for at beholde dem slået til. Har du udeladt AI-agenten? Angiv --no-ai-agent igen.

Med Docker Compose skal du hente de tre filer igen i agentens mappe (og derefter foretage igen eventuelle ændringer, du lavede i docker-compose.yml), og så hente og genstarte:

Bash
docker compose pull
docker compose up -d --force-recreate

Collector-versionen er fastlåst i filerne, så et pull alene flytter ikke agenten frem.

Afinstallation af agenten

Bash
cd /opt/status200-docker-swarm-agent
docker compose down

AI-agent

Swarmens docker-compose.yml (og install.sh) kører også Docker Swarm-AI-agenten: en tredje container, status200-docker-swarm-ai-agent (image status200/resource-ai-agent:release), der kører de skrivebeskyttede docker-kommandoer, som Status200 AI beder om, mens den undersøger en hændelse eller advarsel på denne klynge — docker node ls, docker service ps web --no-trunc, docker service logs --tail 200 web — og, kun hvis du tillader det, anvender rettelser som en rullende genstart af en navngiven service. Den læser de samme STATUS200_URL, STATUS200_SERVICE_TOKEN og DOCKER_SWARM_CLUSTER_NAME som collectoren, så den betjener netop denne klynge, og den vises på klyngens side AI → AI-agent i Status200.

  • AI-undersøgelser er slået til som standard. Så snart agenten forbinder, undersøger Status200 AI hændelser og advarsler på denne klynge med den, og klyngens Oversigt viser agentens status. For at stoppe skal du sætte STATUS200_AI_INVESTIGATION=false, hvor agenten kører (Skift under Hvad AI må gøre på AI-agentens side viser hvordan), eller udelade agenten.
  • Ligesom inventar-polleren skal den køre på en manager-node: Kommandoer for noder, services og opgaver findes kun på managere. På en worker kører den intet og registrerer sig ikke for klyngen, før noden er manager (dens /status siger hvorfor). Kør én pr. klynge.
  • Den er skrivebeskyttet, medmindre du sætter STATUS200_AI_ALLOW_WRITES=true i .env og kører docker compose up -d (eller kører install.sh med den; installationsprogrammet skriver STATUS200_AI_ALLOW_WRITES, STATUS200_AI_INVESTIGATION, STATUS200_AI_FIXES, STATUS200_AI_WRITE_TARGETS og STATUS200_AI_PROTECTED_TARGETS fra sit miljø til .env, og en ny kørsel bevarer, hvad .env allerede har for de sidste fire, medmindre du angiver den variabel, selv tom); STATUS200_AI_WRITE_TARGETS (globs for service- og nodenavne, for eksempel web_*,api_*) begrænser, hvad en rettelse må røre. STATUS200_AI_FIXES i samme .env angiver, hvordan rettelser kører — ask-for-approval (en person godkender hver enkelt), automatic eller bypass-approval — og AI-agentens side viser det skrivebeskyttet (Hvad AI må gøre, fastsat af agenten). At dræne en node kræver altid en persons godkendelse, uanset tilstand.
  • Den kører som root med Docker-socketen monteret, fordi socketen ejes af root — og på en manager kontrollerer den, der kan bruge socketen, hele swarmen, :ro eller ej. Agentens kommandopolitik er grænsen: Den opretter eller fjerner aldrig services eller stacks, rører aldrig secrets eller configs og ændrer aldrig sig selv, collectoren, inventar-polleren eller noget i STATUS200_AI_PROTECTED_TARGETS (globs for service- og nodenavne).
  • install.sh --no-ai-agent udelader den; du kan også slette tjenesten status200-docker-swarm-ai-agent fra docker-compose.yml.

Hvad den må køre, hvordan rettelser virker, og hvordan du fejlsøger den: Infrastructure AI Agents.

Fejlfinding

Kør diagnosescriptet først

Agenten leveres med et script, [troubleshoot.sh](<YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/troubleshoot.sh), der kontrollerer hele kæden: containerne, at inventar-polleren kører på en manager (docker node ls), snapshot-filen, klyngenavnet stemplet på alt, tokenets form, collectorens egne metrikker, og om Status200 accepterer indtagelsesnøglen. Den sidste kontrol betyder mest. Status200 afviser en forkert nøgle med 401 (422 for en deaktiveret nøgle eller en browsernøgle), og collectoren logger det som én Exporting failed-linje pr. batch, som er let at overse. Scriptet spørger GET <url>/otlp/v1/validate efter et direkte 200 (gyldig) eller 401 (ugyldig). Kør det på manager-noden:

Bash
curl -sSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/troubleshoot.sh -o troubleshoot.sh
bash troubleshoot.sh    # add -d <dir> if you installed outside /opt/status200-docker-swarm-agent
Klyngen vises aldrig

Kør diagnosescriptet først. Ellers skal du læse collectorens logs (docker compose logs status200-docker-swarm-agent), kontrollere, at STATUS200_SERVICE_TOKEN og STATUS200_URL i .env er korrekte, og at noden kan nå din Status200-URL.

Der vises intet inventar

Kontrollér, at inventar-polleren kører på en manager: docker node ls skal lykkes der. Kig derefter efter linjer med failed to emit ... i dens logs: docker compose logs status200-docker-swarm-inventory.

Klyngen skifter til afbrudt

En klynge bliver afbrudt, når Status200 ikke har modtaget noget fra den i 15 minutter; Status200 tjekker hvert 5. minut, og tid, hvor Status200 selv ikke modtog data, tæller ikke med. Sørg for, at collector-containeren bliver ved med at køre: docker compose ps viser den.

Collectoren afslutter med "client version is too new"

Collectorens logs viser:

Error: cannot start pipelines: failed to start "docker_stats" receiver:
Error response from daemon: client version 1.44 is too new.
Maximum supported API version is 1.41

Daemonens højeste API-version ligger under standarden 1.44 (Docker Engine 20.10 stopper ved 1.41), så receiveren docker_stats kan ikke starte, og containeren genstarter i en løkke. Find daemonens højeste version:

Bash
docker version --format '{{ .Server.APIVersion }}'

Sæt DOCKER_API_VERSION til den værdi i .env, og kør docker compose up -d på hver node, agenten kører på. Nyere daemons understøtter stadig ældre API-versioner, så indstillingen bliver ved med at virke, efter du har opgraderet Docker. Eller sæt DOCKER_API_VERSION= (tom), så collectoren forhandler versionen med daemonen i stedet for at fastlåse en.

Klyngen vises under det forkerte navn

Klyngens navn kommer fra DOCKER_SWARM_CLUSTER_NAME. Ændr det i .env, og kør docker compose up -d: Et nyt navn registrerer en ny klynge i stedet for at omdøbe den gamle.

Opgavernes CPU er en flad linje

En ældre otel-collector-config.yaml sender receiveren docker_stats' eget CPU-tal. Siden collector 0.150.0 beregner receiveren det ud fra en enkelt statistikmåling: al den CPU, en container har brugt, siden den startede, divideret med al den CPU, noden har brugt, siden den bootede. Linjen bevæger sig knap og følger ikke belastningen, mens container.cpu.usage.total gør. Collector-versionen har ikke ændret sig, så der vises intet advarselstegn: Download agentens filer igen, som Opgradering af agenten viser. Fra sin anden måling sender collectoren derefter den CPU, hver container brugte i hvert interval på 30 sekunder. Målinger, der allerede er gemt, forbliver som de var.

Næste trin