add swarm-metrics, an agent CLI for the metrics store
swarm-metrics reads the swarm's VictoriaMetrics from inside an agent
container: query, query-range, series, labels and label-values, each one
GET against the store's Prometheus read API through the gateway, printing
the store's JSON. It authenticates the way swarm-logs does, with the
agent's own queue secret read from bao under the agent's leaf, sent as
a swarm-agent bearer.
On the metrics store's host the read API's auth map gains an agent arm
ahead of the Grafana one. It routes to swarm-metrics-agent-auth, a
swarm-logs-auth instance logged in under the existing swarm-metrics-auth
leaf, whose bao grant now includes swarm/agents/+/queue read. The check is
rate-limited per address like the log store's
(deploy.victoriametrics.agentAuth{Rate,Burst,VerdictTtl}).
nix/agent-modules/metrics.nix installs the wrapped binary when the hive
forwards HIVE_AGENT_METRICS_URL (from swarm.victoriametrics.domain) and a
store address, the same gate as swarm-logs. Adds the base:swarm-metrics
skill and the CLI reference with its freshness check.
Fixes #5395
This commit is contained in:
parent
1e8c398132
commit
e92f118bda
30 changed files with 1417 additions and 88 deletions
|
|
@ -1,14 +1,16 @@
|
|||
//! The log store gateway's `auth_request` responder for agents.
|
||||
//! The log and metrics stores' gateway `auth_request` responder for agents.
|
||||
//!
|
||||
//! nginx sends it every `/select/logsql/` request whose `Authorization` is
|
||||
//! `Bearer swarm-agent.<agent>.<secret>` (`swarm-victorialogs.nix`). It answers
|
||||
//! 200 when the secret is the one stored at `swarm/agents/<agent>/queue`, and
|
||||
//! 401 otherwise, store failures included: `auth_request` turns any other
|
||||
//! status into a 500 for the caller.
|
||||
//! nginx sends it every `/select/logsql/` request (`swarm-victorialogs.nix`),
|
||||
//! and every metrics read API request (`swarm-victoriametrics.nix`, as
|
||||
//! `swarm-metrics-agent-auth`), whose `Authorization` is
|
||||
//! `Bearer swarm-agent.<agent>.<secret>`. It answers 200 when the secret is
|
||||
//! the one stored at `swarm/agents/<agent>/queue`, and 401 otherwise, store
|
||||
//! failures included: `auth_request` turns any other status into a 500 for
|
||||
//! the caller.
|
||||
//!
|
||||
//! It reads the store under its own certificate, whose policy reaches every
|
||||
//! agent's `queue` secret and nothing else. It serves a unix socket whose
|
||||
//! directory only the gateway's nginx may enter.
|
||||
//! It logs in to the store as the cert-auth role `--store-cert-role` names,
|
||||
//! whose policy reaches every agent's `queue` secret. It serves a unix socket
|
||||
//! whose directory only the gateway's nginx may enter.
|
||||
//!
|
||||
//! A grant is remembered for `--verdict-ttl` seconds ([`verdicts`]), so an
|
||||
//! agent's queries within that window cost no store lookup, and a secret that
|
||||
|
|
|
|||
Loading…
Reference in a new issue