OpenKeel: la soluzione Cloud sovrana, francese e di portata europea, del gruppo inherent Scopri inherent

Deployment

Osservabilità

Metriche, log e traccia di audit di ogni servizio OpenKeel in Grafana: uno stack opzionale installato da okadm --grafana, l'equivalente di Prometheus, Grafana e del logging centralizzato di Kolla.

Lo stack di osservabilità

  1. 01

    Servizi OpenKeel

    Log JSON ed eventi di audit CADF su stdout; /healthz, /readyz e /metrics sulla porta di amministrazione :9090

  2. 02

    Raccolta

    I monitor del Prometheus Operator raccolgono i servizi e i servizi dati; Alloy, un DaemonSet, legge tutti i log dei Pod del suo nodo

  3. 03

    Storage

    Prometheus per le metriche; Loki per i log, con un flusso applicativo e uno di audit separati

  4. 04

    Grafana e allarmi

    Dashboard OpenKeel in una cartella propria; allarmi PrometheusRule inviati tramite Alertmanager

Cosa emette ogni servizio

Tutti i moduli Go sono costruiti sullo stesso modello, quindi emettono tutti gli stessi segnali nello stesso formato.

Log JSON strutturati

  • JSON di log/slog su stdout, in inglese: time (UTC), level, service, pod, msg
  • request_id e global_request_id, trasmessi a ogni chiamata e messaggio in uscita, più gli ID utente e progetto del token
  • I valori di chiavi come password, secret, token o key sono mascherati a qualsiasi profondità; i body delle richieste non vengono mai registrati
  • Livello di log modificabile a caldo con SIGHUP, senza riavvio

Traccia di audit CADF

  • Un evento CADF per chiamata API, nel formato pycadf di keystonemiddleware, verificato campo per campo rispetto a esso
  • Anche le chiamate 401 e 403 sono registrate; Keystone aggiunge i suoi eventi di identità (autenticazione, token, assegnazioni di ruoli)
  • Non registra mai body, token né valori segreti della query
  • Non blocca mai una richiesta: una coda piena scarta l'evento e lo conta, e scatta un allarme

Sonde e metriche

  • Porta di amministrazione :9090, non esposta fuori dal cluster: /healthz (processo attivo), /readyz (database e altri controlli), /metrics
  • /metrics espone i contatori di audit, sui Pod delle API: eventi inviati, scartati e falliti per destinazione
  • Memoria e CPU di ogni Pod vengono da cAdvisor, nel kubelet; i riavvii da kube-state-metrics

Non ancora disponibile: tassi e latenze delle richieste, contatori di database, cache e messaggi, metriche del processo Go e tracce OpenTelemetry fanno parte del progetto del modello di modulo, ma oggi i servizi non li esportano.

Componenti e dimensionamento

Tutto va nel namespace openkeel-monitoring. Le versioni dei chart sono fissate nel manifesto di rilascio di okadm e integrate nel binario.

ReleaseChartCosaLaboratorioProduzione
kube-prometheus-stack92.10.1 (Prometheus Operator v0.94.1)Prometheus Operator e i suoi CRD, Prometheus, Alertmanager, Grafana, kube-state-metrics, node-exporter, le dashboard e gli allarmi Kubernetes1 replica di ciascuno; Prometheus conserva 2 giorni, senza volumePrometheus ×2 (15 giorni, 50 Gi), Alertmanager ×3, Grafana con un volume di 10 Gi, sulla StorageClass a blocchi
loki7.3.0 (Loki 3.6.12)Archivio dei log, interrogato da Grafana con LogQLBinario unico, volume di 5 GiSimple scalable: 3 write, 3 read, 3 backend, gateway ×2; chunk e indice in S3
alloy1.13.1 (Alloy v1.20.1)DaemonSet: ogni log di container del suo nodo verso Loki, con le righe di audit separate1 Pod per nodo1 Pod per nodo

Cosa viene raccolto

L'umbrella chart aggiunge questi oggetti alla release openkeel-infra quando il monitoraggio è attivo.

OggettiRaccoglie
PodMonitor openkeel-servicesLa porta di amministrazione di ogni Pod OpenKeel (API, worker, agenti), etichettata per servizio e componente
Metriche MariaDBmysqld-exporter e il suo ServiceMonitor, aggiunti dall'operatore MariaDB: dimensione del cluster Galera, connessioni, query, query lente
ServiceMonitor openkeel-rabbitmqIl plugin rabbitmq_prometheus, comprese le metriche per coda: messaggi pronti, consumer, allarmi
ServiceMonitors openkeel-kubevirt, openkeel-longhornKubeVirt e Longhorn, quando okadm plan li trova nel cluster
ConfigMaps openkeel-dashboard-*Le dashboard OpenKeel, caricate dal sidecar di Grafana nella cartella OpenKeel

Il laboratorio Kustomize (openkeel-lab) esegue i propri servizi dati, senza exporter: la sua dashboard Data services resta vuota, mentre okadm install --mode lab --grafana li ha tutti.

Log in Loki: due flussi

Alloy instrada ogni riga in base al suo campo log_type di primo livello: così la traccia di audit resta separata dai log applicativi, con una propria conservazione.

FlussoRigheLaboratorioProduzione
{stream="audit"}Eventi di audit CADF ("log_type": "audit")30 giorni400 giorni
{stream="app"}Tutte le altre righe dei container, di OpenKeel o no7 giorni31 giorni

La conservazione è applicata dal compattatore di Loki e si cambia nel file di valori di okadm. Ogni riga porta le etichette namespace, pod, container, node, service e component.

Dashboard

DashboardSorgente datiMostra
OpenKeel / Audit trailLokiEventi, errori, 401, 403, autenticazioni Keystone fallite ed eliminazioni; errori per utente e IP di origine; eliminazioni e modifiche per utente e tipo di risorsa; gli eventi grezzi. Filtri: servizio, esito, utente, IP di origine
OpenKeel / ServicesPrometheus, LokiTarget di raccolta per servizio, contatori di audit, memoria e CPU di ogni Pod (cAdvisor), volume di log per livello, errori per servizio e un pannello di log con ricerca
OpenKeel / Data servicesPrometheusMariaDB Galera e RabbitMQ (code che si accumulano o senza consumatori, allarmi)
Kubernetes / …PrometheusQuelle di kube-prometheus-stack: cluster, nodi, namespace, Pod, workload

Cercare nella traccia di audit

In Grafana, Explore, sorgente dati Loki: i campi CADF si estraggono con LogQL. Qui, le autenticazioni Keystone fallite.

{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"

Allarmi

Forniti nella PrometheusRule openkeel, oltre agli allarmi Kubernetes di kube-prometheus-stack.

AllarmeGravitàScatta quando
OpenKeelAuditEventsDroppedcriticalLa coda di audit di un servizio era piena: la traccia ha un buco
OpenKeelAuditEventsFailedwarningUna destinazione di audit è fallita, ad esempio RabbitMQ irraggiungibile
OpenKeelServiceTargetDownL'endpoint delle metriche di un servizio non può essere raccolto
OpenKeelServiceNoTargetUn servizio non ha alcun target di raccolta

Per impostazione predefinita Alertmanager non invia da nessuna parte: definite i destinatari nel file di valori di okadm.

Attivazione

Senza l'opzione non si installa nulla. okadm installa lo stack subito dopo Multus, prima di openkeel-infra: namespace, una password di admin di Grafana casuale, poi kube-prometheus-stack, Loki e Alloy, attendendo ciascuno. Ricorda l'opzione: le installazioni e gli aggiornamenti successivi mantengono lo stack aggiornato. install, upgrade e access mostrano l'URL di Grafana e il comando che legge la password.

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 produzione

ArgomentoCosa fare
Storage a oggetti di LokiCreare il Secret openkeel-loki-s3 (endpoint, regione, chiavi) e i bucket openkeel-loki-chunks e openkeel-loki-ruler prima dell'installazione; senza di essi okadm plan si blocca. Va bene anche il Ceph RGW di okadm --ceph-s3
Instradamento degli allarmiDefinire i destinatari di Alertmanager
Target del control planeSu Talos, esporre le metriche di etcd, dello scheduler e del controller manager, oppure disattivare questi target
Prometheus Operator già presenteokadm plan lo segnala. Per mantenerlo, installare senza --grafana, attivare i monitor OpenKeel e lasciare che quel Prometheus li selezioni
Accesso a GrafanaIngress su grafana.<domain>, altrimenti un port-forward; la password di admin è casuale, nel Secret openkeel-grafana-admin
ValoriUna sezione observability.<release> per release, nello stesso file -f del resto di OpenKeel

Traccia di audit: cosa deve aggiungere la piattaforma

I servizi producono la traccia; mantenerla completa, integra, ben datata e leggibile per il periodo richiesto è compito della piattaforma.

ObbligoPCI-DSS v4.0ISO/IEC 27001:2022Come
Inviare gli eventi fuori dal nodo appena scritti10.3.3A.8.15Alloy (oppure Fluent Bit, Vector, l'OpenTelemetry Collector) con un buffer su disco
Conservazione inalterabile, a scrittura singola10.3.2, 10.3.3A.8.15Una copia nello storage a oggetti con object lock in modalità compliance; Loki da solo non basta
12 mesi, gli ultimi 3 subito disponibili10.5.1A.5.33, A.8.15Bucket bloccato per 400 giorni; Loki conserva il flusso di audit 400 giorni in produzione
Accesso in lettura limitato10.3.1A.8.15, A.5.15Policy del bucket, un tenant Loki o un team Grafana per il flusso di audit
Orologi sincronizzati10.6.1 to 10.6.3A.8.17NTP sui nodi; allarmi di node-exporter in caso di deriva
Rilevare i buchi10.7.1, 10.7.2A.8.15, A.8.16Gli allarmi di audit sopra e i contatori propri del collettore
Revisione quotidiana10.4.1A.8.16Un SIEM alimentato dal bucket o dal collettore; la dashboard di Grafana

Loki offre una traccia di audit consultabile, non un archivio inalterabile: chi amministra il cluster può scrivere nel suo storage.

Opzionale: openstack-exporter

L'exporter usato da Kolla

monitoring.openstackExporter.enabled: true installa openstack-exporter 1.7.0. Ogni 2 minuti elenca le risorse di ogni API (server, reti, volumi, immagini, Placement, agenti), così le dashboard OpenStack della community funzionano così come sono.

Disattivato di default, attivato con CloudKitty

  • Chiama ogni API con un token di admin, quindi il suo carico cresce con il cloud
  • Scrive propri eventi di audit CADF
  • Ripete ciò che i segnali dei servizi e la traccia di audit mostrano già
  • okadm lo attiva quando CloudKitty è installato: il file di metriche di CloudKitty tariffa le sue serie openstack_*

Chi altro legge Prometheus

Il Prometheus dello stack è anche una fonte di dati per OpenKeel stesso: okadm vi indirizza questi servizi quando --grafana è attivo.

LettoreCosa leggePer
CloudKitty (collector)Serie di openstack-exporter per progetto (tenant_id): istanze, capacità dei volumi, dimensione delle immaginiTariffazione oraria, pagina FinOps / GreenOps di Skyline
openkeel-skyline (GET /extension/server_metrics)Serie KubeVirt kubevirt_vmi_* del namespace del progetto, VM selezionate dall'etichetta openkeel.io/project-idLa pagina Metrics: CPU, memoria (driver balloon), uso del disco (agente guest QEMU) e I/O disco delle VM
openkeel-skyline (Prometheus queries)Le query delle pagine di monitoraggio della consoleViste amministratore di Skyline upstream

Vedi FinOps / GreenOps e CloudKitty e le aggiunte a Skyline.