OpenKeel: die souveräne französische Cloud-Lösung mit europäischer Reichweite der inherent-Gruppe inherent entdecken

Deployment

Observability

Metriken, Logs und die Audit-Spur jedes OpenKeel-Dienstes in Grafana: ein optionaler Stack, installiert mit okadm --grafana, das Gegenstück zu Prometheus, Grafana und zentralem Logging in Kolla.

Der Observability-Stack

  1. 01

    OpenKeel-Dienste

    JSON-Logs und CADF-Audit-Ereignisse auf stdout; /healthz, /readyz und /metrics auf dem Admin-Port :9090

  2. 02

    Sammlung

    Monitore des Prometheus Operator erfassen die Dienste und Datendienste; Alloy, ein DaemonSet, liest jedes Pod-Log seines Knotens

  3. 03

    Speicher

    Prometheus für Metriken; Loki für Logs, mit getrenntem App- und Audit-Stream

  4. 04

    Grafana und Alarme

    OpenKeel-Dashboards in einem eigenen Ordner; PrometheusRule-Alarme über Alertmanager

Was jeder Dienst ausgibt

Alle Go-Module basieren auf derselben Vorlage und senden daher dieselben Signale im selben Format.

Strukturierte JSON-Logs

  • log/slog-JSON auf stdout, auf Englisch: time (UTC), level, service, pod, msg
  • request_id und global_request_id, an jeden ausgehenden Aufruf und jede Nachricht weitergegeben, dazu die Benutzer- und Projekt-IDs des Tokens
  • Werte von Schlüsseln wie password, secret, token oder key werden in jeder Tiefe maskiert; Anfrage-Bodies werden nie geloggt
  • Log-Level zur Laufzeit per SIGHUP änderbar, ohne Neustart

CADF-Audit-Spur

  • Ein CADF-Ereignis pro API-Aufruf, im pycadf-Format von keystonemiddleware, Feld für Feld dagegen geprüft
  • Auch 401- und 403-Aufrufe werden auditiert; Keystone ergänzt seine Identitätsereignisse (Authentifizierung, Tokens, Rollenzuweisungen)
  • Zeichnet nie Bodies, Tokens oder geheime Query-Werte auf
  • Blockiert nie eine Anfrage: Eine volle Warteschlange verwirft das Ereignis und zählt es, und ein Alarm wird ausgelöst

Probes und Metriken

  • Admin-Port :9090, außerhalb des Clusters nicht erreichbar: /healthz (Prozess lebt), /readyz (Datenbank und weitere Prüfungen), /metrics
  • /metrics liefert die Audit-Zähler, auf den API-Pods: gesendete, verworfene und fehlgeschlagene Ereignisse je Ziel
  • Speicher und CPU jedes Pods kommen von cAdvisor im kubelet, Neustarts von kube-state-metrics

Noch nicht vorhanden: Anfrageraten und Latenzen, Zähler für Datenbank, Cache und Nachrichten, Go-Prozessmetriken und OpenTelemetry-Traces gehören zum Entwurf der Modulvorlage, werden von den Diensten aber heute nicht exportiert.

Komponenten und Dimensionierung

Alles liegt im Namespace openkeel-monitoring. Die Chart-Versionen sind im Release-Manifest von okadm festgelegt und in das Binary eingebaut.

ReleaseChartWasLaborProduktion
kube-prometheus-stack92.10.1 (Prometheus Operator v0.94.1)Prometheus Operator und seine CRDs, Prometheus, Alertmanager, Grafana, kube-state-metrics, node-exporter, die Kubernetes-Dashboards und -AlarmeJe 1 Replikat; Prometheus behält 2 Tage, ohne VolumePrometheus ×2 (15 Tage, 50 Gi), Alertmanager ×3, Grafana mit einem 10-Gi-Volume, auf der Block-StorageClass
loki7.3.0 (Loki 3.6.12)Log-Speicher, von Grafana mit LogQL abgefragtEinzelnes Binary, 5-Gi-VolumeSimple Scalable: 3 write, 3 read, 3 backend, Gateway ×2; Chunks und Index in S3
alloy1.13.1 (Alloy v1.20.1)DaemonSet: jedes Container-Log seines Knotens an Loki, Audit-Zeilen getrennt1 Pod pro Knoten1 Pod pro Knoten

Was erfasst wird

Das Umbrella-Chart fügt diese Objekte dem Release openkeel-infra hinzu, wenn das Monitoring aktiv ist.

ObjektErfasst
PodMonitor openkeel-servicesDer Admin-Port jedes OpenKeel-Pods (APIs, Worker, Agenten), gekennzeichnet nach Dienst und Komponente
MariaDB-Metrikenmysqld-exporter und sein ServiceMonitor, vom MariaDB-Operator hinzugefügt: Größe des Galera-Clusters, Verbindungen, Abfragen, langsame Abfragen
ServiceMonitor openkeel-rabbitmqDas Plugin rabbitmq_prometheus, einschließlich Metriken je Queue: bereite Nachrichten, Consumer, Alarme
ServiceMonitors openkeel-kubevirt, openkeel-longhornKubeVirt und Longhorn, wenn okadm plan sie im Cluster findet
ConfigMaps openkeel-dashboard-*Die OpenKeel-Dashboards, vom Sidecar von Grafana in den Ordner OpenKeel geladen

Das Kustomize-Lab (openkeel-lab) betreibt eigene Datendienste ohne Exporter: sein Dashboard Data services bleibt leer, während okadm install --mode lab --grafana sie alle hat.

Logs in Loki: zwei Streams

Alloy leitet jede Zeile nach ihrem Feld log_type der obersten Ebene weiter: So bleibt die Audit-Spur von den Anwendungslogs getrennt, mit eigener Aufbewahrung.

StreamZeilenLaborProduktion
{stream="audit"}CADF-Audit-Ereignisse ("log_type": "audit")30 Tage400 Tage
{stream="app"}Alle anderen Container-Zeilen, ob OpenKeel oder nicht7 Tage31 Tage

Die Aufbewahrung setzt der Compactor von Loki durch; sie lässt sich in der Values-Datei von okadm ändern. Jede Zeile trägt die Labels namespace, pod, container, node, service und component.

Dashboards

DashboardDatenquelleZeigt
OpenKeel / Audit trailLokiEreignisse, Fehlschläge, 401, 403, fehlgeschlagene Keystone-Authentifizierungen und Löschungen; Fehlschläge nach Benutzer und Quell-IP; Löschungen und Änderungen nach Benutzer und Ressourcentyp; die Rohereignisse. Filter: Dienst, Ergebnis, Benutzer, Quell-IP
OpenKeel / ServicesPrometheus, LokiScrape-Ziele je Dienst, Audit-Zähler, Speicher und CPU jedes Pods (cAdvisor), Log-Volumen nach Level, Fehler je Dienst und ein durchsuchbares Log-Panel
OpenKeel / Data servicesPrometheusMariaDB Galera und RabbitMQ (sich stauende Queues oder Queues ohne Consumer, Alarme)
Kubernetes / …PrometheusDie von kube-prometheus-stack: Cluster, Knoten, Namespaces, Pods, Workloads

Die Audit-Spur durchsuchen

In Grafana, Explore, Datenquelle Loki: Die CADF-Felder werden mit LogQL extrahiert. Hier die fehlgeschlagenen Keystone-Authentifizierungen.

{stream="audit", service="openkeel-keystone"}
  | json outcome="payload.outcome",
         initiator="payload.initiator.id",
         ip="payload.initiator.host.address",
         event_type="event_type"
  | event_type="identity.authenticate"
  | outcome="failure"

Alarme

Geliefert als PrometheusRule openkeel, zusätzlich zu den Kubernetes-Alarmen von kube-prometheus-stack.

AlarmSchweregradLöst aus, wenn
OpenKeelAuditEventsDroppedcriticalDie Audit-Warteschlange eines Dienstes war voll: Die Spur hat eine Lücke
OpenKeelAuditEventsFailedwarningEin Audit-Ziel ist fehlgeschlagen, zum Beispiel RabbitMQ nicht erreichbar
OpenKeelServiceTargetDownDer Metrik-Endpunkt eines Dienstes kann nicht abgefragt werden
OpenKeelServiceNoTargetEin Dienst hat überhaupt kein Scrape-Ziel

Alertmanager sendet standardmäßig nirgendwohin: Legen Sie seine Empfänger in der Values-Datei von okadm fest.

Aktivierung

Ohne die Option wird nichts installiert. okadm installiert den Stack direkt nach Multus, vor openkeel-infra: Namespace, ein zufälliges Grafana-Admin-Passwort, dann kube-prometheus-stack, Loki und Alloy, jeweils abgewartet. Es merkt sich die Option: Spätere Installationen und Upgrades halten den Stack aktuell. install, upgrade und access zeigen die URL von Grafana und den Befehl, der das Passwort ausliest.

okadm install --mode lab --grafana            # kind lab
okadm install --mode lab --grafana --ingress  # Grafana at grafana.127.0.0.1.nip.io
okadm install --grafana --domain cloud.example.org
# or, with the Kustomize lab
GRAFANA=1 make lab-up

In der Produktion

ThemaWas zu tun ist
Objektspeicher für LokiVor der Installation das Secret openkeel-loki-s3 (Endpunkt, Region, Schlüssel) und die Buckets openkeel-loki-chunks und openkeel-loki-ruler anlegen; ohne sie blockiert okadm plan. Auch das Ceph RGW von okadm --ceph-s3 funktioniert
Weiterleitung der AlarmeDie Empfänger von Alertmanager festlegen
Ziele der Control PlaneUnter Talos die Metriken von etcd, Scheduler und Controller Manager freigeben oder diese Ziele abschalten
Bereits vorhandener Prometheus Operatorokadm plan warnt davor. Um ihn zu behalten, ohne --grafana installieren, die OpenKeel-Monitore aktivieren und diesen Prometheus sie auswählen lassen
Zugang zu GrafanaIngress unter grafana.<domain>, sonst ein Port-Forward; das Admin-Passwort ist zufällig, im Secret openkeel-grafana-admin
ValuesEin Abschnitt observability.<release> pro Release, in derselben -f-Datei wie der Rest von OpenKeel

Audit-Spur: was die Plattform ergänzen muss

Die Dienste erzeugen die Spur; sie vollständig, unverändert, zeitgenau und für die geforderte Dauer lesbar zu halten, ist Aufgabe der Plattform.

PflichtPCI-DSS v4.0ISO/IEC 27001:2022Wie
Ereignisse beim Schreiben sofort vom Knoten wegschicken10.3.3A.8.15Alloy (oder Fluent Bit, Vector, der OpenTelemetry Collector) mit einem Puffer auf der Festplatte
Manipulationssichere, einmal beschreibbare Aufbewahrung10.3.2, 10.3.3A.8.15Eine Kopie im Objektspeicher mit Object Lock im Compliance-Modus; Loki allein reicht nicht
12 Monate, die letzten 3 sofort verfügbar10.5.1A.5.33, A.8.15Gesperrter Bucket für 400 Tage; Loki behält den Audit-Stream in der Produktion 400 Tage
Eingeschränkter Lesezugriff10.3.1A.8.15, A.5.15Bucket-Richtlinie, ein Loki-Tenant oder ein Grafana-Team für den Audit-Stream
Synchronisierte Uhren10.6.1 to 10.6.3A.8.17NTP auf den Knoten; node-exporter-Alarme bei Abweichung
Lücken erkennen10.7.1, 10.7.2A.8.15, A.8.16Die Audit-Alarme oben und die eigenen Zähler des Collectors
Tägliche Überprüfung10.4.1A.8.16Ein SIEM, gespeist aus dem Bucket oder dem Collector; das Grafana-Dashboard

Loki bietet eine durchsuchbare Audit-Spur, kein manipulationssicheres Archiv: Wer den Cluster administriert, kann in seinen Speicher schreiben.

Optional: openstack-exporter

Der Exporter, den Kolla nutzt

monitoring.openstackExporter.enabled: true installiert openstack-exporter 1.7.0. Alle 2 Minuten listet er die Ressourcen jeder API auf (Server, Netze, Volumes, Images, Placement, Agenten), sodass die OpenStack-Dashboards der Community unverändert funktionieren.

Standardmäßig aus, mit CloudKitty an

  • Es ruft jede API mit einem Admin-Token auf, seine Last wächst also mit der Cloud
  • Es schreibt eigene CADF-Audit-Ereignisse
  • Es wiederholt, was die Signale der Dienste und die Audit-Spur bereits zeigen
  • okadm schaltet ihn ein, wenn CloudKitty installiert ist: Die Metrikdatei von CloudKitty bewertet seine openstack_*-Reihen

Wer Prometheus noch liest

Das Prometheus des Stacks ist auch eine Datenquelle für OpenKeel selbst: okadm richtet diese Dienste darauf aus, wenn --grafana aktiv ist.

LeserWas er liestWofür
CloudKitty (Collector)openstack-exporter-Reihen pro Projekt (tenant_id): Instanzen, Volume-Kapazität, Image-GrößeStündliche Bewertung, FinOps-/GreenOps-Seite von Skyline
openkeel-skyline (GET /extension/server_metrics)KubeVirt-Reihen kubevirt_vmi_* des Namespace des Projekts, VMs über das Label openkeel.io/project-id ausgewähltDie Seite Metrics: CPU, Speicher (Balloon-Treiber), Festplattenbelegung (QEMU-Gastagent) und Festplatten-E/A der VMs
openkeel-skyline (Prometheus queries)Die Abfragen der Überwachungsseiten der KonsoleAdministratoransichten des Upstream-Skyline

Siehe FinOps / GreenOps und CloudKitty und die Skyline-Ergänzungen.