Metriken der Polycrate API¶
Die Polycrate API stellt Metriken in drei Schichten bereit, die über ein gemeinsames Contract-Pattern (MetricsMixin) vereinheitlicht sind und alle gegen VictoriaMetrics abgefragt werden.
| Schicht | Endpunkt | Format | Konsument |
|---|---|---|---|
| Prometheus-Export | GET /api/v1/metrics | text/plain | VMAgent → VictoriaMetrics |
| System-Metriken | GET /api/v1/system/metrics/ | JSON | Dashboard-Widget (System-Übersicht) |
| Objekt-Metriken | GET /api/v1/{model}/{id}/metrics/ | JSON | Metric-Tabs auf jeder Detail-Seite |
System- und Objekt-Metriken nutzen denselben {data, meta, chart_spec}-Response-Shape und werden vom einheitlichen metricChart Alpine.js-Komponent in der UI gerendert.
Prometheus-Export¶
Übersicht¶
Unter GET /api/v1/metrics liefert die Polycrate API Prometheus-kompatible Metriken — ohne Authentifizierung, damit VMAgent/Prometheus ohne Token scrapen kann.
- Endpoint:
/api/v1/metrics - Caching: Alle Metriken werden alle 60 Sekunden per Celery-Task vorberechnet und mit TTL 120 s in Redis gecacht. Scrapes unter Last antworten in < 100 ms aus dem Cache; ein Cache-Miss generiert live nach.
- Basis-Labels: Jede Serie trägt
polycrate_io_metrics_source="api"undpolycrate_io_system_name="<instance>", so dass sich API-Metriken in VictoriaMetrics eindeutig von Agent-, Operator- oder Kubernetes-Metriken trennen lassen.
Label-Prefix
Metriknamen beginnen mit polycrate_io_api_. Das Label-Schema polycrate_* (ohne io) gilt für Metriken aus externen Quellen (Agent, Operator, kube-state-metrics, blackbox-exporter). Siehe Labels & Konventionen.
SLO/SLA¶
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_breaches_active_count | Aktive SLO/SLA-Breaches nach Typ |
polycrate_io_api_overall_availability_percent | Gewichtete Verfügbarkeit (SLO/SLA) |
polycrate_io_api_error_budget_consumed_avg_percent | Ø verbrauchtes Error-Budget |
Endpoint-Status¶
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_endpoints_by_state | Endpoints nach State (OK, WARNING, CRITICAL) |
Betrieb (Downtimes, Wartung, Actions)¶
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_action_runs_count | Action Runs nach Status |
polycrate_io_api_downtimes_active_count | Aggregierte Anzahl aktiver Downtimes pro Organisation |
polycrate_io_api_downtime_is_active | Binärer Wert 1 pro aktiver Downtime — erzeugt Zeitreihen, aus denen die Downtime-Timeline gebaut wird. Absenz bedeutet „vorbei". |
polycrate_io_api_downtime_affected_objects | Anzahl aktuell betroffener Objekte pro Downtime (Time-Series via VMAgent) |
polycrate_io_api_maintenances_active_count | Aggregierte Anzahl laufender Wartungen pro Org/Workspace |
polycrate_io_api_maintenance_is_active | Binärer Wert 1 pro laufender Wartung |
→ Downtime & Timeline · Wartungen · Wartungsfenster
Ressourcen (Zählwerte)¶
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_resource_count | Ressourcen je Typ (K8sCluster, K8sApp, LoadbalancerInstance, S3Bucket, DNSZone, Domain) pro Organisation/Workspace |
polycrate_io_api_workspaces_total | Gesamtzahl Workspaces |
polycrate_io_api_organizations_total | Gesamtzahl Organisationen |
polycrate_io_api_workspaces_count | Workspaces pro Organisation |
Ressourcen-Details (Org-Level, persistiert)¶
Werte aus Modell-Feldern, die alle ~5 Minuten von Reconciliation-Tasks aktualisiert werden — billig abfragbar, ohne dass der Prometheus-Export selbst S3/LB-Backends aufrufen muss.
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_s3_bucket_count | Anzahl S3-Buckets pro Organisation |
polycrate_io_api_s3_object_count | Summe der S3-Objekte pro Organisation |
polycrate_io_api_s3_storage_bytes | Belegter S3-Speicher pro Organisation (Bytes) |
polycrate_io_api_loadbalancer_instance_count | Anzahl LoadbalancerInstances pro Organisation |
polycrate_io_api_loadbalancer_traffic_bytes_per_second | Summe der 1h-Mittelwerte der Bandbreite pro Organisation |
polycrate_io_api_registry_storage_bytes | Belegter Artifact-Registry-Speicher pro Organisation |
S3-Cluster-Backend¶
Pro S3Cluster werden Backend-Kennzahlen aus der Reconciliation gegen Rook-Ceph oder MinIO gespiegelt (Details siehe S3 Buckets & Object Storage).
| Metrik | Backend | Beschreibung |
|---|---|---|
polycrate_io_api_s3cluster_ceph_osd_total_bytes | rook-ceph | OSD-Gesamtkapazität |
polycrate_io_api_s3cluster_radosgw_logical_used_bytes | rook-ceph | Logisch belegter Speicher (radosgw) |
polycrate_io_api_s3cluster_minio_capacity_usable_bytes | minio | Nutzbare Kapazität |
polycrate_io_api_s3cluster_minio_usage_bytes | minio | Belegter Speicher |
polycrate_io_api_s3cluster_managed_buckets_usage_bytes | beide | Summe über Polycrate-verwaltete Buckets |
polycrate_io_api_s3cluster_managed_buckets_object_count | beide | Summe der Objekte in Polycrate-verwalteten Buckets |
Projects & Notes¶
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_todos_count | Todo-Notes nach Status (open, resolved) pro Org/Workspace |
Endpoint-Monitoring (Agents & Coverage)¶
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_agent_capacity | Max. Endpoint-Kapazität pro Agent |
polycrate_io_api_agent_assigned_endpoints | Zugeordnete Endpoints pro Agent |
polycrate_io_api_agent_utilization_percent | Agent-Auslastung |
polycrate_io_api_agent_checks_per_minute | Checks pro Minute pro Agent |
polycrate_io_api_endpoint_coverage_total | Endpoints nach Coverage (uncovered, single, multi) |
polycrate_io_api_endpoint_coverage_rate_percent | Anteil Endpoints mit ≥ 1 Agent |
polycrate_io_api_endpoint_multi_coverage_rate_percent | Anteil Endpoints mit ≥ 2 Agenten |
polycrate_io_api_endpoint_check_latency_avg_ms | Ø Check-Latenz |
polycrate_io_api_endpoint_checks_total | Check-Zähler nach Status |
polycrate_io_api_endpoint_check_success_rate_percent | Success-Rate der Checks |
polycrate_io_api_endpoint_monitoring_summary | Zusammenfassung (für Alerting & Dashboards) |
PoP-zu-PoP-Latenz¶
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_pop_latency_avg_ms | Ø Latenz zwischen PoP-Paaren |
polycrate_io_api_pop_latency_min_ms | Minimum |
polycrate_io_api_pop_latency_max_ms | Maximum |
polycrate_io_api_pop_check_count | Anzahl Checks zwischen PoP-Paaren |
polycrate_io_api_pop_assignment_count | Anzahl aktiver Zuweisungen pro PoP-Paar |
Activity-Metriken (neu ab 0.15.0)¶
Zeitreihen über Plattform-Events — Grundlage für die System-Charts auf dem Haupt-Dashboard. Alle Werte als 5-Minuten-Fenster; für Trends eignet sich increase(...[5m]).
| Metrik | Beschreibung |
|---|---|
polycrate_io_api_recent_activities_count | Alle Activity-Events (Audit-Trail, Lifecycle, Deployments…) |
polycrate_io_api_recent_state_changes_count | Nur kind="state_changed" |
polycrate_io_api_recent_deployments_count | ReplicaSet/StatefulSet-Deployments (aus K8s-Discovery) |
polycrate_io_api_recent_block_action_runs_count | Block-Action-Runs (Polycrate CLI → API) |
polycrate_io_api_recent_ssh_sessions_count | Neue SSH-Sessions über Bastions |
System-Metriken (Dashboard-Übersicht)¶
Unter GET /api/v1/system/metrics/ liefert die API plattformweite Zeitreihen im JSON-Format. Genutzt wird dieser Endpoint von den Widgets im Haupt-Dashboard (Tab „System-Übersicht"), die z. B. „Activities in den letzten 7 Tagen" darstellen.
Jede System-Metrik ist eine PromQL-Range-Query gegen die entsprechende Gauge aus dem Prometheus-Export:
| System-Metrik | Quell-Gauge | Beschreibung |
|---|---|---|
activities | polycrate_io_api_recent_activities_count | Alle Activity-Events |
state_changes | polycrate_io_api_recent_state_changes_count | State-Änderungen |
deployments | polycrate_io_api_recent_deployments_count | Deployments |
block_action_runs | polycrate_io_api_recent_block_action_runs_count | Block-Action-Runs |
ssh_sessions | polycrate_io_api_recent_ssh_sessions_count | SSH-Sessions |
Der Endpoint akzeptiert dieselben Parameter wie Objekt-Metriken:
metric=<name>— ohne Parameter: Liste verfügbarer Metriken (Discovery)time_from=<rfc3339>,time_to=<rfc3339>— Zeitfenster
Objekt-Metriken (Metric-Functions)¶
Auf der Detailseite jedes ManagedObjects stellt Polycrate Metric-Tabs bereit, die ohne Grafana-Setup direkt in der UI Time-Series-Charts rendern. Die Daten kommen aus VictoriaMetrics; abgefragt werden sie über den generischen Endpoint:
Was ist eine Metric-Function?¶
Eine Metric-Function ist eine am Objekt-Typ deklarierte Abfrage, die:
- das Objekt über seine Standard-Labels (
polycrate_cluster,polycrate_customer,polycrate_workspace, ggf.polycrate_namespace) in VictoriaMetrics identifiziert, - PromQL gegen Metriken aus Agents/kube-state-metrics/kubelet/blackbox-exporter fährt,
- das Ergebnis als Chart (line, area, bar) mit Einheit (bytes, bytes/s, %, cores, count) rendert.
Verfügbare Functions pro Objekttyp¶
| Objekttyp | Function(s) | Beschreibung |
|---|---|---|
| Host | cpu_usage, memory_usage | CPU-Last & Memory-Belegung aus node-exporter |
| K8sCluster | cpu_usage, memory_usage | Aggregierte Cluster-Ressourcen (kube-state-metrics) |
| K8sApp | pod_count, cpu_usage, memory_usage | Metriken pro App-Workload |
| K8sVolume | volume_usage | Belegter vs. Gesamt-Speicher des PVC (kubelet) |
| S3Cluster | backend_total_capacity, backend_logical_used | Backend-Kapazität & logische Belegung (Ceph/MinIO) |
| S3Bucket | bucket_usage, object_count | Storage-Füllstand & Objektanzahl pro Bucket |
| LoadbalancerInstance | bandwidth | Ein-/Ausgehender Traffic pro LB-Instanz |
| Endpoint | status_blocks, latency, uptime | Blackbox-Check-Werte (Heatmap, Latenz-Kurve, Uptime-Prozent) |
| Agent | checks_per_minute, utilization | Arbeitslast eines Monitoring-Agents |
Erweiterbar
Neue Functions werden zentral am Objekt-Modell deklariert (metric_functions-Dict mit display_name, description, method, chart_spec). Dadurch nutzt jedes Objekt dieselbe Tab-UI, denselben Zeitraum-Picker und dieselbe Auto-Step-Logik.
Zeitraum-Steuerung¶
Jedes Widget hat:
- Zeitraum-Dropdown (1h, 6h, 24h, 7d, 30d, Custom)
- „Reset to Initial Range" (bringt den Graph auf den Default-Zeitraum zurück)
- Custom Range aus Downtime-Events — auf der Downtime-Timeline führt „Show in Metric" direkt mit passendem Zeitfenster in das Dashboard-Widget
- Auto-Step: automatische Sample-Auflösung abhängig vom Zeitraum (1 h → 15 s, 7 d → 5 min, 30 d → 30 min)
Nutzung & Integration¶
Scraping-Konfiguration¶
# VictoriaMetrics / Prometheus scrape_config
scrape_configs:
- job_name: 'polycrate-api'
static_configs:
- targets: ['api.polycrate.io']
metrics_path: '/api/v1/metrics'
Da die API selbst alle Werte cached, ist ein Scrape-Intervall von 30 – 60 s empfohlen.
Typische Use-Cases¶
- Kapazitätsplanung — Ressourcen-Zahlen, S3-Storage und Workspace-Wachstum überwachen
- SLO-Dashboards — Availability und Error-Budget in Grafana visualisieren, gemeinsam mit Agent-Metriken (gleiches
polycrate_*-Label-Schema) - Agent-Überwachung — Coverage, Auslastung und Checks/min der Monitoring-Agents prüfen
- Incident-Response — von der Downtime-Timeline direkt ins passende Metric-Tab springen
- Kunden-Reporting — Screenshots aus der UI zeigen Ressourcen-Trends ohne Grafana-Zugriff
Zusammenspiel mit Grafana¶
Metric-Functions und System-Widgets decken den operativen Quick-Look ab. Für tiefergehende Dashboards (Multi-Objekt-Overlays, komplexe Aggregationen, Alerting mit VMAlert) bleibt Grafana das Werkzeug der Wahl — die gemeinsamen polycrate_*-Labels sorgen dafür, dass dieselben Queries in UI und Grafana funktionieren.
Siehe auch¶
- Labels & Konventionen — welche Labels API, Operator und Agents verwenden
- Downtime & Timeline — nutzt die
downtime_*-Metriken - Endpoint-Monitoring — Agent- und Coverage-Metriken
- S3 Buckets & Object Storage — S3-Cluster-Backend-Metriken
- Kubernetes Volumes —
volume_usageMetric-Function - Operator-Deployment — ergänzt Activity-Metriken um Deployment-Infos