OpenKeel: la solución Cloud soberana, francesa y de alcance europeo, del grupo inherent Descubrir inherent

Despliegue

Observabilidad

Métricas, registros y el registro de auditoría de cada servicio de OpenKeel en Grafana: una pila opcional instalada por okadm --grafana, el equivalente del Prometheus, el Grafana y el registro centralizado de Kolla.

La pila de observabilidad

  1. 01

    Servicios de OpenKeel

    Registros JSON y eventos de auditoría CADF en stdout; /healthz, /readyz y /metrics en el puerto de administración :9090

  2. 02

    Colección

    Los monitores del Prometheus Operator recogen los servicios y los servicios de datos; Alloy, un DaemonSet, lee todos los registros de los Pods de su nodo

  3. 03

    Almacenamiento

    Prometheus para las métricas; Loki para los registros, con un flujo de aplicación y otro de auditoría separados

  4. 04

    Grafana y alertas

    Paneles de OpenKeel en su propia carpeta; alertas PrometheusRule enviadas por Alertmanager

Lo que emite cada servicio

Todos los módulos Go se construyen con la misma plantilla, así que todos emiten las mismas señales en el mismo formato.

Registros JSON estructurados

  • JSON de log/slog en stdout, en inglés: time (UTC), level, service, pod, msg
  • request_id y global_request_id, transmitidos a cada llamada y mensaje saliente, además de los identificadores de usuario y proyecto del token
  • Los valores de claves como password, secret, token o key se enmascaran a cualquier profundidad; los cuerpos de las peticiones nunca se registran
  • Nivel de registro modificable en caliente con SIGHUP, sin reiniciar

Registro de auditoría CADF

  • Un evento CADF por llamada a la API, en el formato pycadf de keystonemiddleware, comprobado campo a campo frente a él
  • Las llamadas 401 y 403 también se auditan; Keystone añade sus eventos de identidad (autenticación, tokens, asignaciones de roles)
  • Nunca registra cuerpos, tokens ni valores secretos de la consulta
  • Nunca bloquea una petición: una cola llena descarta el evento y lo cuenta, y salta una alerta

Sondas y métricas

  • Puerto de administración :9090, no expuesto fuera del clúster: /healthz (proceso vivo), /readyz (base de datos y otras comprobaciones), /metrics
  • /metrics sirve los contadores de auditoría, en los Pods de API: eventos enviados, descartados y fallidos por destino
  • La memoria y la CPU de cada Pod vienen de cAdvisor, en el kubelet; los reinicios, de kube-state-metrics

Aún no disponible: las tasas y latencias de las peticiones, los contadores de base de datos, caché y mensajes, las métricas del proceso Go y las trazas OpenTelemetry forman parte del diseño de la plantilla de módulo, pero los servicios no las exportan hoy.

Componentes y dimensionamiento

Todo va en el namespace openkeel-monitoring. Las versiones de los charts están fijadas en el manifiesto de versión de okadm e integradas en el binario.

ReleaseChartQuéLaboratorioProducción
kube-prometheus-stack92.10.1 (Prometheus Operator v0.94.1)Prometheus Operator y sus CRD, Prometheus, Alertmanager, Grafana, kube-state-metrics, node-exporter, los paneles y alertas de Kubernetes1 réplica de cada uno; Prometheus conserva 2 días, sin volumenPrometheus ×2 (15 días, 50 Gi), Alertmanager ×3, Grafana con un volumen de 10 Gi, en la StorageClass de bloque
loki7.3.0 (Loki 3.6.12)Almacén de registros, consultado por Grafana con LogQLBinario único, volumen de 5 GiSimple scalable: 3 write, 3 read, 3 backend, gateway ×2; chunks e índice en S3
alloy1.13.1 (Alloy v1.20.1)DaemonSet: cada registro de contenedor de su nodo hacia Loki, con las líneas de auditoría separadas1 Pod por nodo1 Pod por nodo

Lo que se recoge

El chart paraguas añade estos objetos a la release openkeel-infra cuando la supervisión está activada.

ObjetoRecoge
PodMonitor openkeel-servicesEl puerto de administración de cada Pod de OpenKeel (API, workers, agentes), etiquetado por servicio y componente
Métricas de MariaDBmysqld-exporter y su ServiceMonitor, añadidos por el operador de MariaDB: tamaño del clúster Galera, conexiones, consultas, consultas lentas
ServiceMonitor openkeel-rabbitmqEl plugin rabbitmq_prometheus, incluidas las métricas por cola: mensajes listos, consumidores, alarmas
ServiceMonitors openkeel-kubevirt, openkeel-longhornKubeVirt y Longhorn, cuando okadm plan los encuentra en el clúster
ConfigMaps openkeel-dashboard-*Los paneles de OpenKeel, cargados por el sidecar de Grafana en la carpeta OpenKeel

El laboratorio Kustomize (openkeel-lab) ejecuta sus propios servicios de datos, sin exporters: su panel Data services queda vacío, mientras que okadm install --mode lab --grafana los tiene todos.

Registros en Loki: dos flujos

Alloy encamina cada línea según su campo log_type de primer nivel: así el registro de auditoría queda separado de los registros de aplicación, con su propia retención.

FlujoLíneasLaboratorioProducción
{stream="audit"}Eventos de auditoría CADF ("log_type": "audit")30 días400 días
{stream="app"}Todas las demás líneas de contenedor, de OpenKeel o no7 días31 días

La retención la aplica el compactador de Loki y se cambia en el archivo de valores de okadm. Cada línea lleva las etiquetas namespace, pod, container, node, service y component.

Paneles

PanelFuente de datosMuestra
OpenKeel / Audit trailLokiEventos, fallos, 401, 403, autenticaciones de Keystone fallidas y borrados; fallos por usuario e IP de origen; borrados y modificaciones por usuario y tipo de recurso; los eventos en bruto. Filtros: servicio, resultado, usuario, IP de origen
OpenKeel / ServicesPrometheus, LokiObjetivos de recogida por servicio, contadores de auditoría, memoria y CPU de cada Pod (cAdvisor), volumen de registros por nivel, errores por servicio y un panel de registros con búsqueda
OpenKeel / Data servicesPrometheusMariaDB Galera y RabbitMQ (colas que se acumulan o sin consumidores, alarmas)
Kubernetes / …PrometheusLos de kube-prometheus-stack: clúster, nodos, namespaces, Pods, cargas de trabajo

Buscar en el registro de auditoría

En Grafana, Explore, fuente de datos Loki: los campos CADF se extraen con LogQL. Aquí, las autenticaciones de Keystone fallidas.

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

Alertas

Incluidas en la PrometheusRule openkeel, además de las alertas de Kubernetes de kube-prometheus-stack.

AlertaGravedadSe dispara cuando
OpenKeelAuditEventsDroppedcriticalLa cola de auditoría de un servicio estaba llena: el registro tiene un hueco
OpenKeelAuditEventsFailedwarningUn destino de auditoría falló, por ejemplo RabbitMQ inalcanzable
OpenKeelServiceTargetDownNo se puede recoger el punto de métricas de un servicio
OpenKeelServiceNoTargetUn servicio no tiene ningún objetivo de recogida

Alertmanager no envía a ningún sitio por defecto: defina sus destinatarios en el archivo de valores de okadm.

Activación

Sin la opción no se instala nada. okadm instala la pila justo después de Multus, antes de openkeel-infra: namespace, una contraseña de admin de Grafana aleatoria, y luego kube-prometheus-stack, Loki y Alloy, esperando a cada uno. Recuerda la opción: las instalaciones y actualizaciones posteriores mantienen la pila al día. install, upgrade y access muestran la URL de Grafana y el comando que lee la contraseña.

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

En producción

TemaQué hacer
Almacenamiento de objetos de LokiCrear el Secret openkeel-loki-s3 (endpoint, región, claves) y los buckets openkeel-loki-chunks y openkeel-loki-ruler antes de la instalación; okadm plan se bloquea sin ellos. El Ceph RGW de okadm --ceph-s3 también sirve
Enrutamiento de las alertasDefinir los destinatarios de Alertmanager
Objetivos del plano de controlEn Talos, exponer las métricas de etcd, el scheduler y el controller manager, o desactivar esos objetivos
Prometheus Operator ya existenteokadm plan avisa de ello. Para conservarlo, instalar sin --grafana, activar los monitores de OpenKeel y dejar que ese Prometheus los seleccione
Acceso a GrafanaIngress en grafana.<domain>, si no un port-forward; la contraseña de admin es aleatoria, en el Secret openkeel-grafana-admin
ValoresUna sección observability.<release> por release, en el mismo archivo -f que el resto de OpenKeel

Registro de auditoría: lo que la plataforma debe añadir

Los servicios producen el registro; mantenerlo completo, intacto, bien fechado y legible durante el periodo exigido es tarea de la plataforma.

ObligaciónPCI-DSS v4.0ISO/IEC 27001:2022Cómo
Enviar los eventos fuera del nodo en cuanto se escriben10.3.3A.8.15Alloy (o Fluent Bit, Vector, el OpenTelemetry Collector) con un búfer en disco
Retención inalterable, de escritura única10.3.2, 10.3.3A.8.15Una copia en almacenamiento de objetos con bloqueo de objetos en modo cumplimiento; Loki solo no basta
12 meses, los 3 últimos disponibles de inmediato10.5.1A.5.33, A.8.15Bucket bloqueado 400 días; Loki conserva el flujo de auditoría 400 días en producción
Acceso de lectura restringido10.3.1A.8.15, A.5.15Política del bucket, un tenant de Loki o un equipo de Grafana para el flujo de auditoría
Relojes sincronizados10.6.1 to 10.6.3A.8.17NTP en los nodos; alertas de node-exporter ante desvíos
Detectar huecos10.7.1, 10.7.2A.8.15, A.8.16Las alertas de auditoría anteriores y los contadores propios del colector
Revisión diaria10.4.1A.8.16Un SIEM alimentado desde el bucket o el colector; el panel de Grafana

Loki ofrece un registro de auditoría consultable, no un archivo inalterable: quien administra el clúster puede escribir en su almacenamiento.

Opcional: openstack-exporter

El exportador que usa Kolla

monitoring.openstackExporter.enabled: true despliega openstack-exporter 1.7.0. Cada 2 minutos lista los recursos de cada API (servidores, redes, volúmenes, imágenes, Placement, agentes), de modo que los paneles OpenStack de la comunidad funcionan tal cual.

Desactivado por defecto, activado con CloudKitty

  • Llama a cada API con un token de admin, así que su carga crece con la nube
  • Escribe sus propios eventos de auditoría CADF
  • Repite lo que ya muestran las señales de los servicios y el registro de auditoría
  • okadm lo activa cuando CloudKitty está instalado: el fichero de métricas de CloudKitty tarifica sus series openstack_*

Quién más lee Prometheus

El Prometheus de la pila es también una fuente de datos para el propio OpenKeel: okadm dirige estos servicios hacia él cuando --grafana está activo.

LectorLo que leePara
CloudKitty (colector)Series de openstack-exporter por proyecto (tenant_id): instancias, capacidad de volúmenes, tamaño de imágenesTarificación horaria, página FinOps / GreenOps de Skyline
openkeel-skyline (GET /extension/server_metrics)Series KubeVirt kubevirt_vmi_* del namespace del proyecto, VM seleccionadas por la etiqueta openkeel.io/project-idLa página Metrics: CPU, memoria (driver balloon), uso de disco (agente invitado de QEMU) y E/S de disco de las VM
openkeel-skyline (Prometheus queries)Las consultas de las páginas de supervisión de la consolaVistas de administrador de Skyline upstream

Véase FinOps / GreenOps y CloudKitty y los añadidos a Skyline.