Observabilidad + Service Mesh
Observabilidad del CDC Pipeline
El pipeline completo está instrumentado con métricas Prometheus, dashboards Grafana y trazabilidad via Service Mesh.
Stack de observabilidad
| Componente | Rol |
|---|---|
Prometheus (via Cluster Observability Operator) |
Scraping de métricas JMX de Kafka, Debezium y Camel |
Grafana |
Dashboard "Kafka CDC Pipeline" con paneles de throughput, lag y latencia |
Kiali |
Visualización del tráfico entre servicios en el Service Mesh |
Kafka Exporter |
Exporta métricas de consumer group lag a Prometheus |
Dashboard Grafana — Kafka CDC Pipeline
El dashboard se asocia a la instancia de Grafana mediante instanceSelector. El label debe coincidir con el de la instancia Grafana CR:
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: kafka-cdc-pipeline
namespace: openshift-cluster-observability-operator
spec:
instanceSelector:
matchLabels:
dashboards: grafana-observability
json: |
{ ... }
El label dashboards: grafana-observability debe coincidir exactamente con el label de la instancia Grafana CR. Un mismatch (por ejemplo connectivity-link) hará que el dashboard nunca se monte.
|
El dashboard "Kafka CDC Pipeline" incluye los siguientes paneles:
| Panel | Métrica |
|---|---|
Kafka Broker — Messages In/s |
|
Kafka Broker — Bytes In/Out |
Throughput de bytes por segundo (entrada y salida) |
Consumer Group Lag |
|
Debezium — Streaming Duration |
|
KafkaConnect — Task Status |
Cantidad de connectors activos |
KafkaConnect — Records Processed/s |
|
PodMonitors para métricas
Se configuran PodMonitors para cada componente del pipeline:
apiVersion: monitoring.rhobs/v1
kind: PodMonitor
metadata:
name: kafka-cluster-metrics
namespace: openshift-cluster-observability-operator
spec:
namespaceSelector:
matchNames:
- kafka-cdc
podMetricsEndpoints:
- interval: 30s
port: tcp-prometheus
selector:
matchLabels:
strimzi.io/cluster: cdc-cluster
strimzi.io/kind: Kafka
How it Works
Pipeline de métricas: del JMX a Grafana
Las métricas del pipeline CDC atraviesan cuatro capas antes de visualizarse:
-
Exposición (JMX → Prometheus format) — Cada broker Kafka y KafkaConnect expone métricas JMX internas. Un agente JMX Prometheus Exporter (configurado via
metricsConfigen el CR de Strimzi) convierte las métricas JMX al formato de texto Prometheus en el puerto 9404. Camel usa Micrometer para exponer sus métricas nativamente en/q/metrics. -
Scraping (Prometheus) — Los
PodMonitorCRs le indican a Prometheus qué pods scrapear, en qué puerto y con qué frecuencia (interval: 30s). Prometheus almacena las series temporales con labels (topic, partition, consumer group, connector) que permiten queries granulares. -
Consulta (PromQL → paneles) — Cada panel del dashboard Grafana ejecuta una query PromQL. Por ejemplo,
sum(rate(kafka_server_brokertopicmetrics_messagesin_total[5m])) by (topic)calcula el throughput de mensajes por segundo agrupado por topic, usando una ventana de 5 minutos para suavizar picos. -
Alertas (PrometheusRule → Alertmanager) — Las reglas de alerta se evalúan continuamente por Prometheus. Cuando una expresión se cumple por el periodo
fordefinido (ej:kafka_consumergroup_lag > 1000durante 5 minutos), Prometheus dispara una alerta al Alertmanager, que puede notificar via email, Slack, PagerDuty, etc.
Kafka Exporter: métricas de consumer lag
El kafkaExporter desplegado por Strimzi es un proceso dedicado que:
-
Se conecta al cluster Kafka y consulta los offsets de todos los consumer groups
-
Calcula el lag por partición:
lag = highWaterMark - consumerOffset -
Expone la métrica
kafka_consumergroup_lagque Prometheus scrapea -
Esto permite detectar cuellos de botella: si el lag crece, los consumidores no procesan tan rápido como los productores producen
Service Mesh — Istio Ambient Mode
El namespace kafka-cdc está enrollado en el Service Mesh usando Istio ambient mode (sin sidecars):
metadata:
labels:
istio.io/dataplane-mode: ambient
istio-discovery: enabled
Tráfico visible en Kiali
Acceso: https://kiali-openshift-cluster-observability-operator.apps.cluster-l9nhj.dynamic.redhatworkshops.io
En Kiali se puede ver el grafo de servicios del namespace kafka-cdc:
-
PostgreSQL → KafkaConnect (Debezium)
-
KafkaConnect → Kafka brokers
-
Kafka → Camel CDC Processor
-
Camel → Mailpit (HTTP)
El modo ambient proporciona:
-
mTLS automático entre todos los pods del namespace
-
Métricas L4/L7 sin sidecars (via ztunnel)
-
Visibilidad del tráfico en Kiali sin overhead de CPU/RAM por sidecar
Alertas — PrometheusRule
Las alertas están desplegadas como un recurso PrometheusRule que Prometheus evalúa automáticamente:
apiVersion: monitoring.rhobs/v1
kind: PrometheusRule
metadata:
name: kafka-cdc-alerts
namespace: openshift-cluster-observability-operator
labels:
openshift.io/user-monitoring: "true"
spec:
groups:
- name: kafka-cdc
rules:
- alert: KafkaConsumerLagHigh
expr: kafka_consumergroup_lag > 1000
for: 5m
labels:
severity: warning
annotations:
summary: "Consumer lag alto en {{ $labels.consumergroup }}"
- alert: DebeziumDisconnected
expr: debezium_postgres_Connected == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Debezium desconectado de PostgreSQL"
- alert: KafkaConnectTaskFailed
expr: kafka_connect_worker_connector_failed_task_count > 0
for: 1m
labels:
severity: critical
annotations:
summary: "KafkaConnect connector en estado FAILED"
Para verificar que las alertas están activas:
oc get prometheusrule kafka-cdc-alerts -n openshift-cluster-observability-operator -o yaml
Documentación Oficial
-
OpenShift Monitoring — Monitoreo integrado con Prometheus y Alertmanager
-
Cluster Observability Operator — Observabilidad multi-señal en OpenShift
-
Red Hat OpenShift Service Mesh — Service Mesh con Istio, incluyendo modo ambient
-
Grafana Documentation — Dashboards y visualización de métricas
-
Kiali Documentation — Consola de observabilidad del Service Mesh
-
Prometheus Documentation — Monitoreo y alertas
-
Kafka Metrics and Monitoring — Exportar métricas de Kafka a Prometheus