Ir para o conteúdo

Fluxo: ingestão de métricas

O agent consulta o runtime a cada intervalo, normaliza pontos genéricos e envia em lote ao hub.

Sequência — coleta e persistência

sequenceDiagram
  participant Agent
  participant Spool
  participant Hub
  participant Store

  loop tick interval
    Agent->>Agent: batch_id
    Agent->>Hub: POST /api/v1/metrics/batch
    Note over Agent,Hub: Bearer e X-Argus-Batch-Id
    alt 2xx e id novo
      Hub->>Store: metric_points e ingest_batches
      Hub-->>Agent: 202
    else batch_id já gravado
      Hub-->>Agent: 202 sem linhas novas
    else 429, 5xx ou rede
      Agent->>Agent: até cinco tentativas
      Agent->>Spool: guarda batch_id e corpo
    else 401, 403 ou outro 4xx
      Hub-->>Agent: falha, sem spool
    end
  end

No tick seguinte o agent reenvia o spool, do mais antigo para o mais novo, antes do lote novo. Cada replay tem o próprio timeout. Registro e heartbeat não entram no spool.

Formato de ponto

{
  "metric_name": "cpu.usage",
  "ts": "2026-09-03T13:00:00Z",
  "value": 42.5,
  "entity_uid": "docker:host-01:api",
  "labels": {
    "host": "host-01",
    "runtime": "docker",
    "container": "api"
  }
}

O hub grava os pontos como chegam e deriva memory.usage_pct quando o lote traz uso e limite. Não há rollup.

Consulta

sequenceDiagram
  participant Client
  participant Hub
  participant Store

  Client->>Hub: GET /api/v1/metrics/series?metric=cpu.usage&since=1h
  Note over Client,Hub: Bearer quando ARGUS_AGENT_TOKEN está definido
  Hub->>Store: QueryMetricSeries
  Store-->>Hub: series por container
  Hub-->>Client: metric_name, series

GET /api/v1/query?metric=cpu.usage&since=1h devolve a série achatada (metric_name, points). Não há filtro host.

Métricas do agent

metric_name Descrição
cpu.usage % de CPU do container
memory.usage bytes
memory.limit bytes do cgroup
memory.usage_pct derivada no hub
network.rx / network.tx bytes/s
block.read / block.write bytes/s