Docker Swarm-agent
Status200s Docker Swarm-agent övervakar ett Docker Swarm-kluster: dess noder, tjänster, uppgifter, stackar, overlay-nätverk, secrets, configs och volymer, plus varje containers mätvärden och loggar. Du kör den med Docker Compose på en managernod i swarmen, och klustret visas i Status200 med allt detta. Docker Swarm-övervakare larmar utifrån det som kommer in.
Så fungerar det
Agenten är tre containrar, alla definierade i en enda docker-compose.yml:
- Collector: en OpenTelemetry Collector som läser
docker_statsför varje containers mätvärden, följer containrarnas loggfiler och följer filen med inventarieögonblicksbilden. Den stämplar allt med ditt klusters namn (docker.swarm.cluster.name) och skickar det till Status200 över OTLP. - Inventariepoller: en liten sidecar med
curlochjqsom var 5:e minut går igenom swarm-managerns API (/nodes,/services,/tasks,/networks,/secrets,/configs,/volumes) och härleder stackarna från tjänsteetikettencom.docker.stack.namespace. Den skriver en JSON-rad per objekt som collectorn vidarebefordrar. - AI-agent:
status200-docker-swarm-ai-agent, som kör dedocker-kommandon som Status200 AI ber om medan den undersöker en incident eller ett larm på det här klustret. Den är skrivskyddad om du inte tillåter åtgärder (se AI-agent).
Tre containrar på en managernod
Klustret registrerar sig med sina första data, under det klusternamn som du konfigurerar.
Innan du börjar
- En managernod i swarmen att köra agenten på: inventariepollern och AI-agenten anropar API-slutpunkter som bara managers svarar på.
- Docker Engine 20.10 eller senare med pluginet Docker Compose v2.
- En intagningsnyckel. Skapa en under Projektinställningar → Telemetri och APM → Intagningsnycklar och kopiera värdet.
- Utgående HTTPS från noden till din Status200-URL.
Var du kör agenten
Kör den på en managernod. Collectorn rapporterar containrarna på den nod den körs på, så för alla noders containermätvärden kör du collectorn på varje nod, alla med samma DOCKER_SWARM_CLUSTER_NAME; inventariepollern och AI-agenten behöver bara köras på en manager. install.sh utelämnar AI-agenten på en nod som inte är manager (och tar bort en som den tidigare installerade där). En AI-agent som ändå startas på en worker registrerar sig aldrig för klustret: den väntar tills dess nod är en manager, så den kan inte tränga undan managerns AI-agent. Distribuerar du agenten som en swarm-stack i stället för med Compose? Håll inventariepollern och AI-agenten på managers med villkoret node.role == manager.
Installera agenten
Installera och starta agenten
install.sh
Ladda ned installationsskriptet och kör det på en managernod:
curl -sSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/install.sh -o install.sh sh install.shSkriptet frågar efter din Status200-URL, intagningsnyckeln och ett namn på klustret. Det installerar till
/opt/status200-docker-swarm-agent, skriver en.env-fil som bara dess ägare kan läsa och startar alla tre containrarna. Lägg till--no-ai-agentför att utelämna AI-agenten.Docker Compose
Ladda ned
docker-compose.yml,otel-collector-config.yamlochinventory-snapshot.shfrån [DockerSwarmAgent-katalogen](<YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent) till en ny mapp på en managernod: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.shSkapa en
.env-fil bredvid dem. Den innehåller intagningsnyckeln, så håll den privat medchmod 600 .env:STATUS200_URL=https://status200.ru STATUS200_SERVICE_TOKEN=your-telemetry-ingestion-key DOCKER_SWARM_CLUSTER_NAME=my-swarmStarta agenten:
docker compose up -dKontrollera att agenten körs
docker compose ps docker compose logs --tail 50 status200-docker-swarm-agent status200-docker-swarm-inventorydocker compose pslistar tre containrar: collectorn (status200-docker-swarm-agent), inventariepollern (status200-docker-swarm-inventory) och AI-agenten (status200-docker-swarm-ai-agent).Hitta klustret i Status200
Öppna Produkter → Infrastruktur → Docker Swarm → Alla kluster. Klustret visas inom några minuter, och dess sidor Noder, Tjänster, Uppgifter, Stacks, Nätverk, Hemligheter, Configs och Volymer fylls i efter den första inventarieögonblicksbilden, inom 5 minuter. Klustrets sida Topologi ritar dess stackar, tjänster, uppgifter och noder på en karta: se Topologi.
Miljövariabler
Installationsskriptet skriver de tre första till /opt/status200-docker-swarm-agent/.env; en Docker Compose-installation läser dem från .env bredvid docker-compose.yml. Lägg till eller ändra vilken som helst av dem där och kör sedan docker compose up -d i den mappen.
| Variabel | Obligatorisk | Beskrivning |
|---|---|---|
STATUS200_URL | Ja | Din Status200-URL, till exempel https://status200.ru eller din självhostade instans. Använd http:// och dess port om instansen bara använder HTTP. |
STATUS200_SERVICE_TOKEN | Ja | Intagningsnyckeln från Projektinställningar → Telemetri och APM → Intagningsnycklar. |
DOCKER_SWARM_CLUSTER_NAME | Nej | Klustrets namn i Status200 och nyckeln som varje nods data sammanförs på: stämplat på allt som resursattributet docker.swarm.cluster.name. Håll det stabilt: att ändra det senare registrerar ett andra kluster. Standard är docker-swarm. |
DOCKER_INVENTORY_INTERVAL_SECONDS | Nej | Hur ofta inventariepollern tar en ögonblicksbild, i sekunder. Standard är 300. |
DOCKER_API_VERSION | Nej | Den Docker Engine-API-version som collectorn och inventariepollern talar. Standard är 1.44; tom förhandlar den med daemonen (se Felsökning). AI-agenten förhandlar den om du inte anger en. |
AI-agentens egna inställningar finns under AI-agent.
Vad agenten samlar in
| Signal | Källa | Var den visas |
|---|---|---|
| Noderna, tjänsterna, uppgifterna, stackarna, nätverken, secrets, configs och volymerna | Inventariepollern, från swarm-managerns API | Klustrets listor och detaljsidor |
| Klusterräknare (redo noder, körande uppgifter, tjänster, stackar, …) | Samma ögonblicksbild | Översiktens kort och sidomenyns brickor |
| Containerns CPU, minne, antal processer och drifttid | Mottagaren docker_stats | Sidan Mätvärden |
| Containerns stdout- och stderr-loggar | Mottagaren filelog | Sidan Loggar |
Så skiljer den sig från Docker-agenten
Docker-agenten modellerar en värd och stämplar host.name och container.runtime=docker. Docker Swarm-agenten stämplar med avsikt bara docker.swarm.cluster.name: Status200 arkiverar då data under swarm-klustret i stället för att registrera varje nod som en egen värd.
Tagga klustret med projektetiketter
Ett resursattribut som börjar med status200.label. blir en projektetikett på klustret: status200.label.<dimension>=<value> är etiketten <dimension>:<value>. Lägg till attributen i processorn resource i otel-collector-config.yaml, bredvid docker.swarm.cluster.name:
processors:
resource:
attributes:
# ...existing attributes...
- key: status200.label.team
value: platform
action: upsert
- key: status200.label.env
value: production
action: upsertCollectorn läser sin konfiguration bara när den startar: Kör docker compose restart status200-docker-swarm-agent. Klustret visar då etiketterna team:platform och env:production. Etiketter jämförs utan hänsyn till skiftläge, så en befintlig etikett Production återanvänds i stället för att dupliceras, och agenten tar aldrig bort en etikett som någon har lagt till i Status200.
Kör som en systemd-tjänst
För att starta agenten med noden och starta om den när den misslyckas installerar du dess systemd-enhet. Den förutsätter att agenten ligger i /opt/status200-docker-swarm-agent, där installationsskriptet placerar den:
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-agentUppgradera agenten
Agenten rapporterar den collectorversion den kör. När den är äldre än den version som den här Status200-versionen låser, visas ett varningstecken bredvid agentens version på klustrets sida Översikt. Välj det för att se de här kommandona.
Kör installationsskriptet igen på managernoden och besvara dess frågor med samma URL, nyckel och klusternamn. Det laddar ned de senaste filerna, hämtar imagesen och startar om agenten:
curl -sSL <YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/install.sh -o install.sh
sh install.shSkriptet skriver .env på nytt utifrån dina svar. Det behåller bara AI-agentens mållistor och vad AI får göra (STATUS200_AI_INVESTIGATION, STATUS200_AI_FIXES): Lägg tillbaka alla variabler som du själv har satt, till exempel DOCKER_API_VERSION. Har du slagit på AI-åtgärder? Kör det som STATUS200_AI_ALLOW_WRITES=true sh install.sh för att behålla dem påslagna. Utelämnade du AI-agenten? Skicka --no-ai-agent igen.
Med Docker Compose laddar du ned de tre filerna igen i agentens mapp (och gör sedan om eventuella ändringar du gjort i docker-compose.yml), och hämtar och startar om:
docker compose pull
docker compose up -d --force-recreateCollectorversionen är låst i filerna, så att bara hämta images för inte agenten framåt.
Avinstallera agenten
cd /opt/status200-docker-swarm-agent
docker compose downAI-agent
Swarmens docker-compose.yml (och install.sh) kör också Docker Swarm-AI-agenten: en tredje container, status200-docker-swarm-ai-agent (image status200/resource-ai-agent:release), som kör de skrivskyddade docker-kommandon som Status200 AI ber om medan den undersöker en incident eller ett larm på det här klustret — docker node ls, docker service ps web --no-trunc, docker service logs --tail 200 web — och, bara om du tillåter det, tillämpar åtgärder som en rullande omstart av en namngiven tjänst. Den läser samma STATUS200_URL, STATUS200_SERVICE_TOKEN och DOCKER_SWARM_CLUSTER_NAME som collectorn, så den betjänar just det här klustret, och den visas på klustrets sida AI → AI-agent i Status200.
- AI-undersökningar är på som standard. När agenten väl ansluter undersöker Status200 AI incidenter och larm på det här klustret med den, och klustrets Översikt visar agentens status. För att stoppa sätter du
STATUS200_AI_INVESTIGATION=falsedär agenten körs (Ändra under Vad AI får göra på AI-agentsidan visar hur), eller utelämnar agenten. - Precis som inventariepollern måste den köras på en managernod: Kommandon för noder, tjänster och uppgifter finns bara på managers. På en worker kör den ingenting och registrerar sig inte för klustret förrän noden är en manager (dess
/statussäger varför). Kör en per kluster. - Den är skrivskyddad om du inte sätter
STATUS200_AI_ALLOW_WRITES=truei.envoch kördocker compose up -d(eller körinstall.shmed den; installationsprogrammet skriverSTATUS200_AI_ALLOW_WRITES,STATUS200_AI_INVESTIGATION,STATUS200_AI_FIXES,STATUS200_AI_WRITE_TARGETSochSTATUS200_AI_PROTECTED_TARGETSfrån sin miljö till.env, och en ny körning behåller det som.envredan har för de fyra sista om du inte skickar den variabeln, även tom);STATUS200_AI_WRITE_TARGETS(globmönster för tjänst- och nodnamn, till exempelweb_*,api_*) begränsar vad en åtgärd får röra.STATUS200_AI_FIXESi samma.envanger hur åtgärder körs —ask-for-approval(en person godkänner varje),automaticellerbypass-approval— och AI-agentsidan visar det skrivskyddat (Vad AI får göra, fastställt av agenten). Att tömma en nod kräver alltid en persons godkännande, oavsett läge. - Den körs som root med Docker-socketen monterad, eftersom socketen ägs av root — och på en manager kontrollerar den som kan använda socketen hela swarmen,
:roeller inte. Agentens kommandopolicy är gränsen: Den skapar eller tar aldrig bort tjänster eller stackar, rör aldrig secrets eller configs och ändrar aldrig sig själv, collectorn, inventariepollern eller något iSTATUS200_AI_PROTECTED_TARGETS(globmönster för tjänst- och nodnamn). install.sh --no-ai-agentutelämnar den; du kan också ta bort tjänstenstatus200-docker-swarm-ai-agenturdocker-compose.yml.
Vad den får köra, hur åtgärder fungerar och hur du felsöker den: Infrastructure AI Agents.
Felsökning
Kör diagnosskriptet först
Agenten levereras med ett skript, [troubleshoot.sh](<YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerSwarmAgent/troubleshoot.sh), som kontrollerar hela kedjan: containrarna, att inventariepollern körs på en manager (docker node ls), ögonblicksbildsfilen, det klusternamn som stämplas på allt, tokenens format, collectorns egna mätvärden, och om Status200 godtar intagningsnyckeln. Den sista kontrollen är viktigast. Status200 nekar en felaktig nyckel med 401 (422 för en inaktiverad nyckel eller en webbläsarnyckel), och collectorn loggar det som en Exporting failed-rad per batch, som är lätt att missa. Skriptet frågar GET <url>/otlp/v1/validate för ett direkt 200 (giltig) eller 401 (ogiltig). Kör det på managernoden:
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-agentKlustret visas aldrig
Kör diagnosskriptet först. Läs annars collectorns loggar (docker compose logs status200-docker-swarm-agent), kontrollera att STATUS200_SERVICE_TOKEN och STATUS200_URL i .env stämmer och att noden når din Status200-URL.
Inget inventarium visas
Kontrollera att inventariepollern körs på en manager: docker node ls måste lyckas där. Leta sedan efter rader med failed to emit ... i dess loggar: docker compose logs status200-docker-swarm-inventory.
Klustret växlar till frånkopplat
Ett kluster blir frånkopplat när Status200 inte har tagit emot något från det på 15 minuter; Status200 kontrollerar var 5:e minut, och tid då Status200 själv inte tog emot data räknas inte. Se till att collector-containern förblir igång: docker compose ps visar den.
Collectorn avslutas med "client version is too new"
Collectorns loggar visar:
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.41Daemonens högsta API-version ligger under standardvärdet 1.44 (Docker Engine 20.10 stannar vid 1.41), så mottagaren docker_stats kan inte starta och containern startar om i en loop. Ta reda på daemonens högsta version:
docker version --format '{{ .Server.APIVersion }}'Sätt DOCKER_API_VERSION till det värdet i .env och kör docker compose up -d på varje nod som agenten körs på. Nyare daemoner hanterar fortfarande äldre API-versioner, så inställningen fortsätter att fungera efter att du har uppgraderat Docker. Eller sätt DOCKER_API_VERSION= (tom) så att collectorn förhandlar versionen med daemonen i stället för att låsa en.
Klustret visas under fel namn
Klustrets namn kommer från DOCKER_SWARM_CLUSTER_NAME. Ändra det i .env och kör docker compose up -d: Ett nytt namn registrerar ett nytt kluster i stället för att byta namn på det gamla.
Uppgifternas CPU är en platt linje
En äldre otel-collector-config.yaml skickar mottagaren docker_stats egen CPU-siffra. Sedan collector 0.150.0 räknar mottagaren ut den från en enda statistikmätning: all CPU som en container har använt sedan den startade, delat med all CPU som noden har använt sedan den senast startades. Linjen rör sig knappt och följer inte belastningen, medan container.cpu.usage.total gör det. Collectorversionen har inte ändrats, så ingen varningssymbol visas: ladda ned agentens filer igen så som Uppgradera agenten visar. Från sin andra mätning skickar collectorn sedan den CPU som varje container använde under varje intervall på 30 sekunder. Mätningar som redan har sparats förblir som de var.