Endpoint-Monitoring¶
Das Endpoint-Monitoring der Polycrate API prüft kontinuierlich, ob externe und interne Dienste erreichbar sind. Es ist das Herzstück der Zustandserfassung für ManagedObjects: aus einer Sammlung regelmäßiger Probes gegen einen Endpoint ergibt sich der aggregierte state eines Objekts (OK / WARNING / CRITICAL) — und daraus wiederum Downtimes und Notifications.
Polycrate trennt dabei was geprüft wird (Endpoint) von wer prüft (Agent).
Modellübersicht¶
┌──────────────────┐ prüft ┌────────────┐
│ Agent │────────────────────────▶│ Endpoint │
│ (CLI / Operator)│ via Assignment │ │
└──────────────────┘ └─────┬──────┘
│ generic FK
▼
┌──────────────────┐
│ ManagedObject │
│ (Host, LB, PoP…) │
└──────────────────┘
Endpoint — was geprüft wird¶
Ein Endpoint beschreibt einen einzelnen Probe. Kernfelder:
| Feld | Zweck |
|---|---|
name / display_name | Anzeige |
kind | icmp, http, tcp, udp |
remote_address / remote_port | Ziel — Host/IP + Port |
interval | Sekunden zwischen Checks |
timeout | Max. Wartezeit pro Check |
spec | JSON-Detail-Konfiguration (Method, Pfad, Expected-Status, TLS-Optionen, …) |
agents | M2M zu Agent über EndpointAgentAssignment |
content_object | Generic FK auf das ManagedObject, das dieser Endpoint prüft |
Kinds im Überblick:
icmp— klassischer Ping. Gut für Host-Reachability, brauchtCAP_NET_RAWbeim ausführenden Agent.http— HTTP(S)-Check mit konfigurierbarem Pfad, Methode, erwarteten Statuscodes und TLS-Optionen (inkl. "self-signed akzeptieren" und TLS-Expiry-Alerts).tcp— TCP-Connect-Check auf einen Port. Nützlich für Datenbanken, Message-Broker etc.udp— UDP-Connect/Probe. Seltener; eingesetzt z. B. für DNS oder VPN-Gateways.
Keine weiteren Kinds
Polycrate unterstützt ausschließlich diese vier Kinds. Anwendungs-spezifische Tiefenchecks (z. B. "Redis PING"-Kommando) werden bewusst nicht im Endpoint-Monitoring abgebildet — dafür gibt es die Metrik-Pipeline und die Block-eigene Health-Check-Action.
Agent — wer prüft¶
Ein Agent ist der ausführende Akteur, der Endpoints tatsächlich probiert. Er meldet sich mit einem Token an der API an und pullt seine Arbeit:
| Agent-Kind | Beschreibung |
|---|---|
| CLI-Agent | Eigener Prozess, startbar mit polycrate api agent --agent-token .... Gut für Bare-Metal, Windows, air-gapped Standorte |
| Operator | Der Polycrate-Operator agiert im Kubernetes-Cluster als Agent mit kind=operator. Der Operator registriert sich automatisch und erscheint in der Agent-Liste |
Jeder Agent sendet Heartbeats und Probe-Ergebnisse an die API. Felder wie last_seen, health_status, effective_capacity und monitored_endpoints_count machen seinen Zustand transparent.
EndpointAgentAssignment — wer prüft was¶
Die M2M-Zuweisung zwischen Endpoint und Agent ist explizit: ein Endpoint kann von mehreren Agents parallel geprüft werden (für Multi-Region-Monitoring), und ein Agent prüft typischerweise viele Endpoints.
Die Zuweisung kann
- manuell erfolgen (Admin wählt pro Endpoint passende Agents),
- automatisch über Scheduler-Logik, die freie Agent-Kapazität nutzt.
Von Probe zum Objekt-State¶
Ein einzelner Probe hat ein Ergebnis (up/down, Latenz, Statuscode, TLS-Details). Daraus wird pro Endpoint gerollt:
- Sofort — die letzten Probes bestimmen
is_upundlast_checkam Endpoint. - Zeitbasiert — VictoriaMetrics berechnet aus
polycrate_io_probe_successdie Uptime über 1h/24h/30d. Die Werte wandern in die Metrik-Tabs im UI (status_blocks,latency,uptime). - ManagedObject-State — jeder ManagedObject mit angehängten Endpoints leitet daraus seinen eigenen
stateab: - OK — alle aktiven Probes erfolgreich.
- WARNING — einzelne Probes fehlgeschlagen / Latenz überschritten.
- CRITICAL — harte Schwellen verletzt → löst eine Downtime aus und Notifications an die Kontakte.
SLO / SLA¶
Jedes ManagedObject, das Endpoints trägt, kann SLO/SLA-Ziele definieren:
target_availability_percent— z. B. 99.9 %actual_availability_percent— berechnet aus Probe-Historieerror_budget_*— abgeleitetes Fehlerbudget
Die Werte erscheinen auf dem Detail-View des Objekts und fließen in Reports.
Source-Klassifikation (API-seitig)¶
Wenn Endpoints aus mehreren Quellen kommen, klassifiziert die API sie, damit Ownership klar bleibt:
| Source | Beschreibung |
|---|---|
api | Endpoint wurde direkt in der Polycrate API angelegt (z. B. über die UI/REST) |
discovery | Endpoint entstand aus einer automatischen Erkennung (typisch: Operator erkennt Ingress-Objekte und legt einen Endpoint an) |
manual | Endpoint wurde aus dem Cluster heraus manuell erstellt |
Für Ingress-basierte Discovery im Operator siehe Polycrate Operator — dort sind die Ingress-Annotationen beschrieben, mit denen man Pfade, Intervalle und Timeouts an automatisch erkannte Endpoints steuert. Aus API-Sicht sind alle drei Sources gleichwertig.
TLS-Monitoring¶
HTTP-Endpoints mit HTTPS erhalten automatisch TLS-Monitoring. Die API erzeugt Alerts bei:
- Zertifikat abgelaufen / noch nicht gültig
- Zertifikats-Chain ungültig
- Hostname-Mismatch
- TLS-Expiry < 30 Tagen (Schwelle pro Endpoint konfigurierbar)
Pro Endpoint kann optional ignore_tls_errors=true gesetzt werden — nötig für interne Services mit selbstsignierten Zertifikaten.
Metrik-Funktionen¶
Jeder Endpoint stellt die Standard-Metrik-Funktionen zur Verfügung (siehe Metriken):
| Funktion | Bedeutung |
|---|---|
status_blocks | Lückenlose Block-Darstellung des Probe-Ergebnisses (grün/rot/gelb) |
latency | Antwortzeit pro Probe über die Zeit |
uptime | Uptime in % pro Zeitraum |
Zusätzlich exportiert der Agent Prometheus-Metriken wie polycrate_io_endpoint_up, polycrate_io_endpoint_response_time_ms, polycrate_io_endpoint_certificate_expiry_timestamp.
Multi-Region- und Multi-Agent-Monitoring¶
Ein Endpoint lässt sich an mehrere Agents zuweisen, die ihn parallel aus verschiedenen Regionen prüfen. Das Ergebnis:
- Probe-Daten pro Agent — die Tabelle zeigt pro Probe, welcher Agent geantwortet hat.
- Matrix-Darstellung — PoP-zu-PoP-Latenz als Metrik (siehe Metriken → PoP-zu-PoP-Latenz).
- Aggregierter
is_up-Wert — "Endpoint ist online" bedeutet "mindestens n Agents melden OK" (Schwelle pro Endpoint einstellbar).
Für Plattformen mit verteilten Standorten genügt es, pro Standort einen Operator oder CLI-Agent laufen zu lassen; die Zuweisung zu den Endpoints erfolgt dann zentral.
Agent-Lifecycle¶
Ein Agent ist selbst ein ManagedObject und hat Metrik-Funktionen wie health_status und last_seen. Bleibt der Heartbeat aus, wird der Agent auf state=CRITICAL gesetzt und erzeugt — wie jedes andere ManagedObject — eine Downtime. So erkennt die Plattform selbst, wenn ein Monitor-Standort ausfällt.
API-Endpunkte¶
GET /api/v1/endpoints/— Endpoints auflisten, filtern nachkind,content_type(also welches Objekt geprüft wird),is_up.POST /api/v1/endpoints/— Endpoint anlegen (inkl. Agent-Zuweisung).GET /api/v1/agents/— Liste der registrierten Agents.GET /api/v1/endpoint/{id}/metrics/?function=status_blocks&range=24h— Metrik pro Endpoint.
Typischer Workflow¶
- Host / LoadBalancer / Service anlegen — das Objekt, dessen Zustand du kennen willst.
- Endpoint(s) anhängen — einer oder mehrere Probes pro Objekt.
- Agent(s) zuweisen — entweder den lokalen Operator, externe CLI-Agents oder beides.
- SLO definieren — optional, für Availability-Reports und Fehlerbudgets.
- Observability — Metrik-Tabs, Downtimes, Notifications laufen automatisch.
Verwandte Themen¶
- Polycrate Operator — wie der Operator als Agent auftritt und Ingress-Discovery funktioniert.
- Downtime & Timeline — Folge eines
CRITICAL-States. - PoPs & Provider — PoPs können eigene Endpoints tragen (
Pop.endpoint_monitor). - Metriken — Prometheus-Metriken der Probes und Agents.
- User Management & RBAC — wer Endpoints anlegen/zuweisen darf.