Hoppa till innehåll
Podman-agent

Podman-agent

Visa som Markdown

Status200 Podman-agenten är en container som du kör på en Podman-värd. Den läser statistiken och loggfilerna för varje container på värden och skickar dem till Status200, där värden visas med sina containrar, mätvärden och loggar. En andra container, Podman-AI-agenten, låter Status200 AI undersöka värden. Podman-monitorer larmar på det som agenten skickar.

Så fungerar det

Agenten är en OpenTelemetry Collector med Status200s konfiguration inbyggd. Via Podmans Docker-kompatibla API-socket läser den varje containers statistik var 30:e sekund och listar varje container, image, nätverk och volym var 5:e minut. Den följer containrarnas loggfiler och skickar allt till din Status200-URL över OTLP, med den intagningsnyckel du ger den.

flowchart TB containers["Dina containrar"] -->|"statistik, loggfiler,<br/>inventarie"| agent["Podman-agent"] agent -->|"OTLP över HTTPS"| oneuptime["Status200"] oneuptime -->|"undersöker en incident<br/>eller ett larm"| ai["Podman-AI-agent"] ai -->|"skrivskyddade<br/>docker-kommandon"| containers

Två containrar på din Podman-värd

Värden registrerar sig med sina första data, under det namn du ger den i PODMAN_HOST_NAME. AI-agenten är valfri: utelämna den så fungerar collectorn likadant.

Innan du börjar

  • Podman 4.0 eller senare, och root-åtkomst på värden.
  • Podmans API-socket på /run/podman/podman.sock. Slå på den med sudo systemctl enable --now podman.socket.
  • En intagningsnyckel. Skapa en under Projektinställningar → Telemetri och APM → Intagningsnycklar och kopiera värdet.
  • Utgående HTTPS från värden till din Status200-URL.
  • För containerloggar: containrar som använder loggdrivrutinen k8s-file. Rootful Podman loggar till journald som standard, vilket agenten inte kan läsa. Se Containerloggar behöver loggdrivrutinen k8s-file.

Installera agenten

  1. Starta agenten

    Ersätt YOUR_STATUS200_URL med din Status200-URL, YOUR_TELEMETRY_INGESTION_TOKEN med intagningsnyckeln och my-podman-host med ett namn på den här värden, till exempel prod-podman-01. Namnet är hur värden visas i Status200, så håll det stabilt: ett nytt namn registrerar en ny värd.

    Podman CLI

    Bash
    podman run -d \
      --name status200-podman-agent \
      --user 0:0 \
      --restart unless-stopped \
      -v /run/podman/podman.sock:/run/podman/podman.sock:ro \
      -v /var/lib/containers/storage:/var/lib/containers/storage:ro \
      -e STATUS200_URL="YOUR_STATUS200_URL" \
      -e STATUS200_SERVICE_TOKEN="YOUR_TELEMETRY_INGESTION_TOKEN" \
      -e PODMAN_HOST_NAME="my-podman-host" \
      status200/podman-agent:release

    Starta sedan AI-agenten bredvid, med samma värden. AI-undersökningar är på som standard: medan Status200 AI undersöker en incident eller ett larm på den här värden kör den skrivskyddade docker-kommandon genom AI-agenten, mot Podmans Docker-kompatibla API, och ändrar ingenting om du inte tillåter åtgärder. För att installera utan AI-undersökningar hoppar du över det här kommandot.

    Bash
    podman run -d \
      --name status200-podman-ai-agent \
      --user 0:0 \
      --restart unless-stopped \
      --read-only --tmpfs /tmp \
      -v /run/podman/podman.sock:/run/podman/podman.sock:ro \
      -e STATUS200_URL="YOUR_STATUS200_URL" \
      -e STATUS200_SERVICE_TOKEN="YOUR_TELEMETRY_INGESTION_TOKEN" \
      -e STATUS200_AI_AGENT_RESOURCE_TYPE=podman \
      -e PODMAN_HOST_NAME="my-podman-host" \
      status200/resource-ai-agent:release

    Podman Compose

    Spara detta som docker-compose.yml i en mapp på värden. Den andra tjänsten är AI-agenten: utelämna den för att köra collectorn utan AI-undersökningar.

    docker-compose.ymlYAML
    services:
      status200-podman-agent:
        image: status200/podman-agent:release
        container_name: status200-podman-agent
        user: "0:0"
        restart: unless-stopped
        volumes:
          - /run/podman/podman.sock:/run/podman/podman.sock:ro
          - /var/lib/containers/storage:/var/lib/containers/storage:ro
        environment:
          - STATUS200_URL=YOUR_STATUS200_URL
          - STATUS200_SERVICE_TOKEN=YOUR_TELEMETRY_INGESTION_TOKEN
          - PODMAN_HOST_NAME=my-podman-host
        logging:
          driver: json-file
          options:
            max-size: "10m"
            max-file: "3"
      status200-podman-ai-agent:
        image: status200/resource-ai-agent:release
        container_name: status200-podman-ai-agent
        user: "0:0"
        restart: unless-stopped
        read_only: true
        tmpfs:
          - /tmp
        volumes:
          - /run/podman/podman.sock:/run/podman/podman.sock:ro
        environment:
          - STATUS200_URL=YOUR_STATUS200_URL
          - STATUS200_SERVICE_TOKEN=YOUR_TELEMETRY_INGESTION_TOKEN
          - STATUS200_AI_AGENT_RESOURCE_TYPE=podman
          - PODMAN_HOST_NAME=my-podman-host

    Starta den i den mappen:

    Bash
    podman compose up -d
  2. Kontrollera att agenten körs

    Bash
    podman ps --filter name=status200-podman-agent
    podman logs -f status200-podman-agent

    Loggarna ska visa den här raden när collectorn har startat:

    Everything is ready. Begin running and processing data.
  3. Hitta värden i Status200

    Öppna Produkter → Infrastruktur → Podman → Alla värdar. Värden visas under sitt PODMAN_HOST_NAME inom en minut eller så, med sina containrar, mätvärden och loggar. AI-agenten visas som ansluten på värdens sida AI-agent, och längst ned på dess Översikt. Värdens sida Topologi ritar dess Compose-projekt, containrar, avbildningar, nätverk och volymer på en karta: se Topologi.

Miljövariabler

VariabelObligatoriskBeskrivning
STATUS200_URLJaDin 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_TOKENJaIntagningsnyckeln från Projektinställningar → Telemetri och APM → Intagningsnycklar.
PODMAN_HOST_NAMENejVärdens namn i Status200. Standard är podman-host, så ge varje värd ett eget.
DOCKER_API_VERSIONNejDen Docker API-version som agenten talar med Podman-socketen. Standard är 1.44. Sänk den om socketen rapporterar ett äldre maximum, eller sätt ett tomt värde för att förhandla fram den (se Felsökning).

För att ändra ett värde tar du bort agenten och kör dess kommando igen (Podman CLI), eller redigerar docker-compose.yml och kör podman compose up -d (Podman Compose).

Vad agenten samlar in

DataVad det är
ContainermätvärdenCPU (användning, procent, strypning), minne (användning, gräns, procent), nätverks- och block-I/O, drifttid, omstarter och antal processer, per container, var 30:e sekund.
ContainerloggarStdout och stderr från varje container, från filen ctr.log som loggdrivrutinen k8s-file skriver.
InventeringVarje container i alla tillstånd, och varje image, nätverk och volym, var 5:e minut.

Varje containers mätvärden och loggar arkiveras under en tjänst som är uppkallad efter containern. Varje loggrad får en allvarlighetsgrad från den nivå den anger, som [ERROR], level=warn eller {"level":"info"}; en rad som inte anger någon får sin ströms: stderr är ERROR, stdout är INFO. Rader som börjar med blanksteg eller en avslutande hakparentes slås ihop med raden före, så en stackspårning kommer in som en enda post. Agentens egna loggar utelämnas.

Podman-övervakning listar varje mätvärde och vad det betyder.

Containerloggar behöver loggdrivrutinen k8s-file

Agenten följer /var/lib/containers/storage/overlay-containers/*/userdata/ctr.log, de filer som Podmans loggdrivrutin k8s-file skriver (json-file är samma drivrutin i Podman). Standarddrivrutinen för rootful Podman är journald, som inte lämnar någon fil att läsa, och det gör inte heller en fjärrdrivrutin som syslog. En sådan containers mätvärden kommer fortfarande in; dess loggar gör det inte.

Kontrollera en containers loggdrivrutin och Podmans standard:

Bash
podman inspect <container> --format '{{.HostConfig.LogConfig.Type}}'
podman info --format '{{.Host.LogDriver}}'

Kör en container med k8s-file, eller byt en Compose-tjänst till den:

Bash
podman run --log-driver k8s-file --log-opt max-size=100m ... <image>
YAML
services:
  my-app:
    image: my-app:latest
    logging:
      driver: "k8s-file"
      options:
        max-size: "100m"

Eller gör den till standard för varje container som skapas efteråt, i containers.conf (/etc/containers/containers.conf rootful, ~/.config/containers/containers.conf rootless):

containers.confTOML
[containers]
log_driver = "k8s-file"
log_size_max = 104857600

Återskapa sedan containrarna. En container behåller den loggdrivrutin den skapades med, så det räcker inte att starta om den.

Uppgradera agenten

När agenten är äldre än din Status200 visas en varningssymbol bredvid Agentversion på värdens Översikt. Välj den för att se de här kommandona.

Podman CLI

Bash
podman pull status200/podman-agent:release
podman pull status200/resource-ai-agent:release
podman rm -f status200-podman-agent status200-podman-ai-agent

Kör sedan båda podman run-kommandona från Starta agenten igen.

Podman Compose

Bash
podman compose pull
podman compose up -d

Taggen release pekar alltid på den senaste utgåvan. För att låsa en version använder du status200/podman-agent:<version>, till exempel status200/podman-agent:10.0.31. Samma image finns i GitHub Container Registry som ghcr.io/status200/podman-agent:release.

Avinstallera agenten

Podman CLI

Bash
podman rm -f status200-podman-agent
podman rm -f status200-podman-ai-agent

Podman Compose

Bash
podman compose down

Värden finns kvar i Status200 med de data den skickade. Om du inte längre behöver den tar du bort den med Ta bort värd i dess meny.

AI-agent

Kommandona och Compose-filen ovan, Podman-agentens install.sh och docker-compose.yml i dess [PodmanAgent-katalog](<YOUR_STATUS200_URL>/docs/static/scripts/agents/PodmanAgent) kör alla Podman-AI-agenten: en andra container, status200-podman-ai-agent (imagen status200/resource-ai-agent:release), som kör de skrivskyddade kommandon som Status200 AI ber om medan den undersöker en incident eller ett larm på den här värden — via Podmans Docker-kompatibla API, med docker-CLI:t: docker ps -a, docker logs --tail 200 web, docker container inspect web — och, bara om du tillåter det, genomför åtgärder som att starta om en namngiven container. Den läser samma STATUS200_URL, STATUS200_SERVICE_TOKEN och PODMAN_HOST_NAME som collectorn, så den betjänar exakt den här värden, och den visas på värdens sida 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å den här värden med den, och värdens Översikt visar agentens status. För att stoppa sätter du STATUS200_AI_INVESTIGATION=false där agenten körs (Ändra under Vad AI får göra på AI-agentsidan visar hur), eller utelämnar agenten.
  • Den är skrivskyddad om du inte startar den med STATUS200_AI_ALLOW_WRITES=true; STATUS200_AI_WRITE_TARGETS (till exempel web-*,api-*) begränsar vilka containrar en åtgärd får röra. Starta den också med STATUS200_AI_FIXES för att ange hur åtgärder körs — ask-for-approval (en person godkänner varje åtgärd), automatic eller bypass-approval — och AI-agentsidan visar det skrivskyddat (Vad AI får göra, inställt av agenten).
  • Den behöver samma socket som collectorn och körs som root med den monterad, eftersom socketen ägs av root — och för rootful Podman är den som kan använda socketen root på den här värden, :ro eller inte. Agentens kommandopolicy är gränsen: den kör aldrig exec, run, rm eller prune, och ändrar aldrig sig själv, collectorn eller något i STATUS200_AI_PROTECTED_TARGETS (globmönster för containernamn).
  • install.sh --no-ai-agent utelämnar den; podman rm -f status200-podman-ai-agent tar bort den. Uppgradera den som collectorn: podman pull status200/resource-ai-agent:release, ta bort den och starta den igen.

Vad den får köra, hur åtgärder fungerar och hur du felsöker den: Infrastructure AI Agents.

Felsökning

Agenten startar om med "client version is too new"

Agentens 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.41

En Docker-API-server som tillämpar en högsta klientversion nekar en nyare, så receivern startar aldrig och collectorn avslutas med den. Kontrollera vilken API-version Podman-socketen rapporterar:

Bash
curl -s -o /dev/null -D - --unix-socket /run/podman/podman.sock http://localhost/_ping | grep -i '^api-version'

Lägg sedan till -e DOCKER_API_VERSION=1.41 (eller värdet du fick) i podman run, eller sätt DOCKER_API_VERSION i Compose. Nyare servrar hanterar fortfarande äldre API-versioner, så inställningen förblir giltig efter en uppgradering.

Vill du hellre slippa slå upp numret? Sätt DOCKER_API_VERSION till den tomma strängen. Agenten förhandlar då fram versionen med socketen (en HEAD /_ping, sedan det maximum som socketen rapporterar) i stället för att låsa en:

Bash
podman run -d ... -e DOCKER_API_VERSION= ...
Åtkomst nekad till Podman-socketen, eller ingen socket

Agenten måste köras som root för att läsa /run/podman/podman.sock. Kontrollera att --user 0:0 finns i ditt podman run-kommando, eller user: "0:0" i Compose, och att socketen är på: sudo systemctl enable --now podman.socket. Rootless Podman har i stället sin socket på /run/user/<uid>/podman/podman.sock (systemctl --user enable --now podman.socket): montera den sökvägen i stället för /run/podman/podman.sock.

Värden visas som frånkopplad
  1. Kontrollera att agenten körs: podman ps --filter name=status200-podman-agent
  2. Leta efter fel i dess loggar: podman logs status200-podman-agent 2>&1 | grep -i error
  3. Kontrollera STATUS200_URL och STATUS200_SERVICE_TOKEN: nyckeln måste vara en giltig intagningsnyckel som inte har inaktiverats.
  4. Kontrollera att värden kan nå din Status200-URL över nätverket.
Inga mätvärden visas
  1. Kontrollera att Podman-socketen är monterad i agenten. Dess image har inget skal, så titta från en tillfällig container som delar dess monteringar: podman run --rm --volumes-from status200-podman-agent alpine:3.19 ls -la /run/podman/podman.sock
  2. Leta efter exportfel i dess loggar: podman logs status200-podman-agent 2>&1 | tail -100
  3. Kontrollera att intagningsnyckeln är giltig och inte har gått ut.
Containerns CPU är en platt linje

En äldre agent skickar mottagaren docker_stats egen CPU-siffra, som behöver statistikmätningen före den aktuella, och Podmans Docker-kompatibla API skickar den aldrig: mottagaren delar all CPU som en container har använt sedan den startade med all CPU som värden 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. Uppgradera agenten: från sin andra mätning skickar den den CPU som varje container använde under varje intervall på 30 sekunder. Mätningar som redan har sparats förblir som de var.

Mätvärden kommer in men inga containerloggar

Dina containrar använder troligen journald, Podmans standarddrivrutin för loggar. Kontrollera vilka filer agenten bevakar, och vilken drivrutin en container använder:

Bash
podman logs status200-podman-agent 2>&1 | grep -E "Started watching file|no files match"
podman inspect <container> --format '{{.HostConfig.LogConfig.Type}}'

Om agenten rapporterar no files match the configured criteria byter du containrarna till k8s-file och återskapar dem, som Containerloggar behöver loggdrivrutinen k8s-file visar.

Loggarna hamnar på en annan värd, eller värden heter podman-host

Värdens namn kommer från PODMAN_HOST_NAME. En agent som startats utan det rapporterar podman-host, så varje värd som konfigurerats på det sättet ser ut som samma värd; ändrar du namnet senare registrerar Status200 en andra värd, som då innehåller de nya data. Sätt PODMAN_HOST_NAME till ett eget namn på varje värd och återskapa agenten. För att kontrollera vilket namn agenten rapporterar:

Bash
podman inspect status200-podman-agent --format '{{range .Config.Env}}{{println .}}{{end}}' | grep PODMAN_HOST_NAME

Nästa steg