Dokumentation/Architektur

Request-Flows

Ingest (agent → API → TSDB)

  1. Der Agent öffnet eine mTLS-Conn zu :8443
  2. Die Server-TLS-Config verifiziert das Peer-Cert gegen die ausgestellte CA
  3. agentIDFromCert(r) → identity (NIE aus body/header)
  4. SELECT organization_id, status, region_id FROM agents
  5. Sample[]: organization_id + agent_id + host werden an jede Metrik geheftet
  6. router.VMForRegion(region_id) → der TSDB-Client der Region
  7. vm.Write(samples)
  8. UPDATE agents SET last_seen_at = now()

Cabinet-Query

  1. Browser → /api/v1/orgs/:slug/query/range?metric=X&host=Y
  2. Session-Middleware (cookie) → userCtx
  3. orgMiddleware → orgContext{OrgID, UserID, Role}
  4. composeQuery("X", {organization_id: OrgID, host: Y})
  5. vm.Range(promQuery, start, end, step)

Embed-Query

  1. Partner-Backend: POST /api/v1/embed/tokens mit mk_xxx
  2. Die API verifiziert die Key-Origin gegen die Allowlist
  3. Ein JWT wird ausgestellt: claims enthalten {org_id, filters}
  4. Der Partner legt das JWT in ein iframe oder postMessage
  5. SDK → /api/v1/embed/query/range mit einem Bearer JWT
  6. embed.Required: parst das JWT, extrahiert filters aus claims
  7. composeQuery mit claim.filters