Docker-agent
Status200 Docker-agenten er én container du kjører på en Docker-vert. Den leser statistikken og loggfilene til hver container på verten og sender dem til Status200, der verten vises med containerne, metrikkene og loggene sine. En andre container, Docker-AI-agenten, lar Status200 AI undersøke verten. Docker-monitorer varsler på det agenten sender.
docker run eller Docker Compose.Hva agenten samler innMetrikker, logger og et inventar over hver container.Containerlogger trenger json-fileSjekk og bytt loggdriveren til en container.FeilsøkingOmstartsløkker, manglende metrikker, manglende logger.Slik fungerer det
Agenten er en OpenTelemetry Collector med Status200s konfigurasjon innebygd. Gjennom Docker-socketen leser den statistikken til hver container hvert 30. sekund og lister hver container, hvert image, hvert nettverk og hvert volum hvert 5. minutt. Den følger containernes loggfiler og sender alt til Status200-URL-en din over OTLP, med inntaksnøkkelen du gir den.
To containere på Docker-verten din
Verten registrerer seg med de første dataene sine, under navnet du gir den i DOCKER_HOST_NAME. AI-agenten er valgfri: utelat den, og collectoren fungerer på samme måte.
Før du begynner
- Docker Engine 20.10 eller nyere, og root-tilgang på verten: agenten leser
/var/run/docker.sock. - Docker Compose v2 (kommandoen
docker compose), hvis du installerer med Docker Compose. - En inntaksnøkkel. Opprett en under Prosjektinnstillinger → Telemetri og APM → Inntaksnøkler og kopier verdien.
- Utgående HTTPS fra verten til Status200-URL-en din.
- For containerlogger: containere som bruker loggdriveren
json-filei Docker, som er standarden i Docker. Se Containerlogger trenger loggdriveren json-file.
Installer agenten
Start agenten
Erstatt
YOUR_STATUS200_URLmed Status200-URL-en din,YOUR_TELEMETRY_INGESTION_TOKENmed inntaksnøkkelen ogmy-docker-hostmed et navn på denne verten, for eksempelprod-docker-01. Navnet er slik verten vises i Status200, så hold det stabilt: et nytt navn registrerer en ny vert.Docker CLI
docker run -d \ --name status200-docker-agent \ --user 0:0 \ --restart unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -v /var/lib/docker/containers:/var/lib/docker/containers:ro \ -e STATUS200_URL="YOUR_STATUS200_URL" \ -e STATUS200_SERVICE_TOKEN="YOUR_TELEMETRY_INGESTION_TOKEN" \ -e DOCKER_HOST_NAME="my-docker-host" \ status200/docker-agent:releaseStart deretter AI-agenten ved siden av, med de samme verdiene. AI-undersøkelser er på som standard: mens Status200 AI undersøker en hendelse eller et varsel på denne verten, kjører den skrivebeskyttede
docker-kommandoer gjennom AI-agenten, og endrer ingenting med mindre du tillater rettelser. For å installere uten AI-undersøkelser, hopp over denne kommandoen.docker run -d \ --name status200-docker-ai-agent \ --user 0:0 \ --restart unless-stopped \ --read-only --tmpfs /tmp \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -e STATUS200_URL="YOUR_STATUS200_URL" \ -e STATUS200_SERVICE_TOKEN="YOUR_TELEMETRY_INGESTION_TOKEN" \ -e STATUS200_AI_AGENT_RESOURCE_TYPE=docker \ -e DOCKER_HOST_NAME="my-docker-host" \ status200/resource-ai-agent:releaseDocker Compose
Lagre dette som
docker-compose.ymli en mappe på verten. Den andre tjenesten er AI-agenten: utelat den for å kjøre collectoren uten AI-undersøkelser.services: status200-docker-agent: image: status200/docker-agent:release container_name: status200-docker-agent user: "0:0" restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - /var/lib/docker/containers:/var/lib/docker/containers:ro environment: - STATUS200_URL=YOUR_STATUS200_URL - STATUS200_SERVICE_TOKEN=YOUR_TELEMETRY_INGESTION_TOKEN - DOCKER_HOST_NAME=my-docker-host logging: driver: json-file options: max-size: "10m" max-file: "3" status200-docker-ai-agent: image: status200/resource-ai-agent:release container_name: status200-docker-ai-agent user: "0:0" restart: unless-stopped read_only: true tmpfs: - /tmp volumes: - /var/run/docker.sock:/var/run/docker.sock:ro environment: - STATUS200_URL=YOUR_STATUS200_URL - STATUS200_SERVICE_TOKEN=YOUR_TELEMETRY_INGESTION_TOKEN - STATUS200_AI_AGENT_RESOURCE_TYPE=docker - DOCKER_HOST_NAME=my-docker-hostStart den i den mappen:
docker compose up -dSjekk at agenten kjører
docker ps --filter name=status200-docker-agent docker logs -f status200-docker-agentLoggene skal vise denne linjen når collectoren har startet:
Everything is ready. Begin running and processing data.Finn verten i Status200
Åpne Produkter → Infrastruktur → Docker → Alle verter. Verten vises under sitt
DOCKER_HOST_NAMEinnen et minutt eller så, med containerne, metrikkene og loggene sine. AI-agenten vises som tilkoblet på vertens side AI-agent, og nederst på Oversikt. Vertens side Topologi tegner Compose-prosjektene, containerne, imagene, nettverkene og volumene på ett kart: se Topologi.
Miljøvariabler
| Variabel | Påkrevd | Beskrivelse |
|---|---|---|
STATUS200_URL | Ja | Status200-URL-en din, for eksempel https://status200.ru eller den selvhostede instansen din. Bruk http:// og porten hvis instansen bare bruker HTTP. |
STATUS200_SERVICE_TOKEN | Ja | Inntaksnøkkelen fra Prosjektinnstillinger → Telemetri og APM → Inntaksnøkler. |
DOCKER_HOST_NAME | Nei | Vertens navn i Status200. Standard er docker-host, så gi hver vert sitt eget. |
DOCKER_API_VERSION | Nei | Versjonen av Docker Engine API som agenten snakker. Standard er 1.44. Senk den på en eldre daemon, eller sett en tom verdi for å forhandle den med daemonen (se Feilsøking). |
For å endre en verdi, fjern agenten og kjør kommandoen på nytt (Docker CLI), eller rediger docker-compose.yml og kjør docker compose up -d (Docker Compose).
Hva agenten samler inn
| Data | Hva det er |
|---|---|
| Containermetrikker | CPU (bruk, prosentandel, struping), minne (bruk, grense, prosentandel), nettverks- og blokk-I/O, oppetid, omstarter og antall prosesser, per container, hvert 30. sekund. |
| Containerlogger | Stdout og stderr fra hver container, fra containerens json-file-loggfil. |
| Inventar | Hver container i hver tilstand, og hvert image, nettverk og volum, hvert 5. minutt. |
Metrikkene og loggene til hver container lagres under en tjeneste oppkalt etter containeren. Hver logglinje får en alvorlighetsgrad fra nivået den nevner, som [ERROR], level=warn eller {"level":"info"}; en linje som ikke nevner noe, får strømmens: stderr er ERROR, stdout er INFO. Linjer som begynner med mellomrom eller en lukkende parentes, slås sammen med linjen før, så en stakksporing kommer inn som én post. Agentens egne logger utelates.
Docker-overvåking lister hver metrikk og hva den betyr.
Containerlogger trenger loggdriveren json-file
Agenten følger /var/lib/docker/containers/*/*-json.log, filene loggdriveren json-file i Docker skriver. En container som bruker en annen driver, etterlater ingen fil å lese: local skriver binærfiler, og journald, syslog, fluentd og gelf sender loggene et annet sted. Metrikkene kommer fortsatt inn; loggene gjør det ikke.
Sjekk loggdriveren til en container, og daemonens standard:
docker inspect <container> --format '{{.HostConfig.LogConfig.Type}}'
docker info --format '{{.LoggingDriver}}'Bytt en Compose-tjeneste til json-file, med rotasjon:
services:
my-app:
image: my-app:latest
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "5"Eller gjør den til standard for hver container som opprettes etterpå, i /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}Start deretter Docker på nytt og opprett containerne på nytt. En container beholder loggdriveren den ble opprettet med, så det er ikke nok å starte den på nytt.
Oppgradere agenten
Når agenten er eldre enn Status200-en din, vises et varseltegn ved siden av Agentversjon på vertens Oversikt. Velg det for å se disse kommandoene.
Docker CLI
docker pull status200/docker-agent:release
docker pull status200/resource-ai-agent:release
docker rm -f status200-docker-agent status200-docker-ai-agentKjør deretter begge docker run-kommandoene fra Start agenten på nytt.
Docker Compose
docker compose pull
docker compose up -dTaggen release peker alltid på den nyeste utgivelsen. For å feste en versjon, bruk status200/docker-agent:<version>, for eksempel status200/docker-agent:10.0.31. Det samme imaget finnes i GitHub Container Registry som ghcr.io/status200/docker-agent:release.
Avinstallere agenten
Docker CLI
docker rm -f status200-docker-agent
docker rm -f status200-docker-ai-agentDocker Compose
docker compose downVerten blir værende i Status200 med dataene den sendte. Hvis du ikke lenger trenger den, slett den med Slett vert i menyen.
AI-agent
Kommandoene og Compose-filen over, Docker-agentens install.sh og docker-compose.yml i [DockerAgent-mappen](<YOUR_STATUS200_URL>/docs/static/scripts/agents/DockerAgent) kjører alle Docker-AI-agenten: en andre container, status200-docker-ai-agent (image status200/resource-ai-agent:release), som kjører de skrivebeskyttede docker-kommandoene Status200 AI ber om mens den undersøker en hendelse eller et varsel på denne verten — docker ps -a, docker logs --tail 200 web, docker container inspect web, docker stats --no-stream — og, bare hvis du tillater det, utfører rettelser som å starte en navngitt container på nytt. Den leser de samme STATUS200_URL, STATUS200_SERVICE_TOKEN og DOCKER_HOST_NAME som collectoren, så den betjener nøyaktig denne verten, og den vises på vertens side AI-agent i Status200.
- AI-undersøkelser er på som standard. Så snart agenten kobler seg til, undersøker Status200 AI hendelser og varsler på denne verten med den, og vertens Oversikt viser agentens status. For å stoppe, sett
STATUS200_AI_INVESTIGATION=falseder agenten kjører (Endre under Hva AI kan gjøre på AI-agentsiden viser hvordan), eller utelat agenten. - Den er skrivebeskyttet med mindre du starter den med
STATUS200_AI_ALLOW_WRITES=true;STATUS200_AI_WRITE_TARGETS(for eksempelweb-*,api-*) begrenser hvilke containere en rettelse kan røre. Start den også medSTATUS200_AI_FIXESfor å si hvordan rettelser kjører —ask-for-approval(en person godkjenner hver av dem),automaticellerbypass-approval— og AI-agentsiden viser det skrivebeskyttet (Hva AI kan gjøre, satt av agenten). - Den kjører som root med Docker-socketen montert, fordi socketen eies av root — og den som kan bruke socketen, er root på denne verten,
:roeller ikke. Agentens kommandopolicy er grensen: den kjører aldriexec,run,rmellerprune, og endrer aldri seg selv, collectoren eller noe iSTATUS200_AI_PROTECTED_TARGETS(glob-mønstre for containernavn). Miljøverdier i utdata fradocker inspectmaskeres før noe forlater verten. install.sh --no-ai-agentutelater den;docker rm -f status200-docker-ai-agentfjerner den. Oppgrader den som collectoren:docker pull status200/resource-ai-agent:release, fjern den og start den igjen.
Hva den kan kjøre, hvordan rettelser fungerer og hvordan du feilsøker den: Infrastructure AI Agents.
Feilsøking
Agenten starter på nytt med "client version is too new"
Agentens logger 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.41En daemon avviser en klient som er nyere enn sitt eget maksimum, så receiveren starter aldri og collectoren avslutter sammen med den. Finn daemonens maksimum:
docker version --format '{{ .Server.APIVersion }}'Legg deretter til -e DOCKER_API_VERSION=1.41 (eller verdien du fikk) i docker run, eller sett DOCKER_API_VERSION i Compose. Nyere daemoner betjener fortsatt eldre API-versjoner, så innstillingen forblir gyldig etter en oppgradering.
Vil du heller ikke slå opp tallet? Sett DOCKER_API_VERSION til den tomme strengen. Agenten forhandler da versjonen med daemonen (én HEAD /_ping, deretter daemonens eget maksimum), noe som fungerer mot både gamle og nye daemoner:
docker run -d ... -e DOCKER_API_VERSION= ...Tilgang nektet til Docker-socketen
Agenten må kjøre som root for å lese /var/run/docker.sock. Sjekk at --user 0:0 står i docker run-kommandoen din, eller user: "0:0" i Compose.
Verten vises som frakoblet
- Sjekk at agenten kjører:
docker ps --filter name=status200-docker-agent - Se etter feil i loggene:
docker logs status200-docker-agent 2>&1 | grep -i error - Sjekk
STATUS200_URLogSTATUS200_SERVICE_TOKEN: nøkkelen må være en gyldig inntaksnøkkel som ikke er deaktivert. - Sjekk at verten kan nå Status200-URL-en din over nettverket.
Ingen metrikker vises
- Sjekk at Docker-socketen er montert i agenten. Imaget har ikke noe skall, så se fra en engangscontainer som deler monteringene:
docker run --rm --volumes-from status200-docker-agent alpine:3.19 ls -la /var/run/docker.sock - Se etter eksportfeil i loggene:
docker logs status200-docker-agent 2>&1 | tail -100 - Sjekk at inntaksnøkkelen er gyldig og ikke har utløpt.
Container-CPU er en flat linje
En eldre agent sender mottakeren docker_stats sitt eget CPU-tall. Siden collector 0.150.0 regner mottakeren det ut fra én enkelt statistikkmåling: all CPU en container har brukt siden den startet, delt på all CPU verten har brukt siden den startet opp. Linjen beveger seg knapt og følger ikke belastningen, mens container.cpu.usage.total gjør det. Oppgrader agenten: fra sin andre måling sender den CPU-en hver container brukte i hvert intervall på 30 sekunder. Målinger som allerede er lagret, forblir som de var.
Metrikker kommer inn, men ingen containerlogger
Containerne dine bruker mest sannsynlig en annen loggdriver enn json-file. Sjekk hvilke filer agenten overvåker, og hvilken driver en container bruker:
docker logs status200-docker-agent 2>&1 | grep -E "Started watching file|no files match"
docker inspect <container> --format '{{.HostConfig.LogConfig.Type}}'Hvis agenten rapporterer no files match the configured criteria, bytt containerne til json-file og opprett dem på nytt, slik Containerlogger trenger loggdriveren json-file viser.
Loggene havner på en annen vert, eller verten heter docker-host
Vertens navn kommer fra DOCKER_HOST_NAME. En agent som startes uten den, rapporterer docker-host, så hver vert som er satt opp slik, ser ut som den samme; endre navnet senere, og Status200 registrerer en ny vert, som da har de nye dataene. Sett DOCKER_HOST_NAME til et eget navn på hver vert, og opprett agenten på nytt. For å sjekke navnet agenten rapporterer:
docker inspect status200-docker-agent --format '{{range .Config.Env}}{{println .}}{{end}}' | grep DOCKER_HOST_NAME