Prometheus exporters как HelmRelease: Kafka, MongoDB, Redis, RabbitMQ
Published: 2026-02-21
kube-prometheus-stack из коробки даёт метрики узлов, kubelet и Kubernetes API. Для метрик уровня приложений — consumer lag в Kafka, hit ratio в Redis, частоты операций в MongoDB — нужны отдельные экспортёры. Вот как мы разворачиваем и подключаем их через FluxCD по единому паттерну.
Паттерн
Каждый экспортёр следует одному и тому же паттерну HelmRelease:
- Разворачивать в том же namespace, что и рабочая нагрузка (не в
observability) - Включить
serviceMonitorс меткойrelease: kube-prom-stack— по ней оператор Prometheus находит ServiceMonitor - Через relabelings записать в метку
jobстабильное читаемое значение - Задать resource requests/limits
Почему в том же namespace, что и рабочая нагрузка? Экспортёру нужен сетевой доступ к сервису, с которого он собирает метрики, а общий namespace позволяет обходиться короткими именами хостов.
kafka-exporter
yamlapiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: kafka-exporter
namespace: kafka
spec:
chart:
spec:
chart: prometheus-kafka-exporter
version: "3.0.1"
sourceRef:
kind: HelmRepository
name: prometheus-community
namespace: flux-system
values:
kafkaServer:
- kafka.kafka.svc.cluster.local:9092
prometheus:
serviceMonitor:
enabled: true
additionalLabels:
release: kube-prom-stack
interval: 30s
relabelings:
- targetLabel: job
replacement: kafka
resources:
requests:
cpu: 25m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
Что даёт: consumer lag (по партициям и по группам), количество партиций топика, статус брокеров, недореплицированные партиции, частоту сообщений.
Ключевые метрики для алертинга:
kafka_consumergroup_lag_sum— суммарный лаг по consumer groupkafka_topic_partition_under_replicated_partition— состояние репликацииkafka_brokers— количество видимых брокеров
mongodb-exporter
yamlapiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: mongodb-exporter
namespace: db
spec:
chart:
spec:
chart: prometheus-mongodb-exporter
version: "3.8.0"
sourceRef:
kind: HelmRepository
name: prometheus-community
namespace: flux-system
values:
mongodb:
uri: "mongodb://exporter:${MONGO_EXPORTER_PASS}@mongodb.db.svc.cluster.local:27017/admin"
serviceMonitor:
enabled: true
additionalLabels:
release: kube-prom-stack
interval: 30s
relabelings:
- targetLabel: job
replacement: mongodb
resources:
requests:
cpu: 25m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
mongodb.uri содержит учётные данные — он подставляется через ExternalSecret из Vault и никогда не хранится в Git открытым текстом.
Пользователь MongoDB для экспортёра
javascriptuse admin
db.createUser({
user: "exporter",
pwd: "secure-password",
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "read", db: "local" }
]
})
Что даёт: количество документов по коллекциям, лаг репликации, статистику индексов, частоту операций (insert/update/delete/query), hit ratio кэша WiredTiger, использование пула соединений.
redis-exporter
yamlapiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: redis-exporter
namespace: db
spec:
chart:
spec:
chart: prometheus-redis-exporter
version: "6.9.0"
sourceRef:
kind: HelmRepository
name: prometheus-community
namespace: flux-system
values:
redisAddress: redis://redis-master.db.svc.cluster.local:6379
auth:
enabled: true
secret:
name: redis-password
key: redis-password
serviceMonitor:
enabled: true
labels:
release: kube-prom-stack
interval: 15s
relabelings:
- targetLabel: job
replacement: redis
resources:
requests:
cpu: 10m
memory: 32Mi
limits:
cpu: 100m
memory: 64Mi
interval: 15s — метрики Redis меняются быстро (hit rate, частота команд). Частый сбор даёт более точный сигнал для алертов о задержках.
Ключевые метрики:
redis_keyspace_hits_total/redis_keyspace_misses_total— hit ratio кэшаredis_memory_used_bytesпротивredis_memory_max_bytes— нехватка памятиredis_evicted_keys_total— вытеснения ключей (признак нехватки памяти)
Recording rule для hit ratio Redis
yaml- record: job:redis_hit_ratio:5m
expr: |
rate(redis_keyspace_hits_total[5m])
/
(rate(redis_keyspace_hits_total[5m]) + rate(redis_keyspace_misses_total[5m]))
Алерт при падении hit ratio ниже 80%:
yaml- alert: RedisLowHitRatio
expr: job:redis_hit_ratio:5m < 0.8
for: 10m
labels:
severity: warning
event: 'Redis Low Hit Ratio |{{$value | humanize}}'
rabbitmq-exporter
У RabbitMQ есть встроенный эндпоинт метрик Prometheus — отдельный экспортёр не нужен:
yamlvalues:
metrics:
enabled: true
serviceMonitor:
enabled: true
labels:
release: kube-prom-stack
interval: 30s
relabelings:
- targetLabel: job
replacement: rabbitmq
Ключевые метрики:
rabbitmq_queue_messages— сообщений в очереди (косвенный показатель consumer lag)rabbitmq_queue_consumers— активные консьюмеры (0 — очередь никто не читает)rabbitmq_node_mem_alarm— флаг memory alarm (1 = сработал)rabbitmq_node_disk_free_alarm— флаг disk alarm
helm-exporter
Отслеживает версии и статусы Helm-релизов на кластерах:
yamlapiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: helm-exporter
namespace: observability
spec:
chart:
spec:
chart: helm-exporter
sourceRef:
kind: HelmRepository
name: sstarcher
values:
serviceMonitor:
create: true
labels:
release: kube-prom-stack
Даёт по одному gauge на каждый Helm-релиз с метками chart, version, namespace, status. Алерт на зависшие релизы:
yaml- alert: HelmReleaseFailed
expr: helm_chart_info{status!="deployed"} > 0
for: 15m
labels:
severity: warning
event: 'Helm Release Failed |{{$labels.chart}}|{{$labels.namespace}}'
Как работает ServiceMonitor discovery
Оператор Prometheus следит за объектами ServiceMonitor, метки которых соответствуют serviceMonitorSelector в Prometheus CR:
yamlserviceMonitorSelector:
matchLabels:
release: kube-prom-stack
Если у ServiceMonitor нет этой метки, Prometheus не станет опрашивать таргет. Проверить:
bashkubectl get servicemonitor -A -l release=kube-prom-stack
# Убедиться, что targets видны в Prometheus
kubectl port-forward -n observability svc/kube-prom-stack-prometheus 9090:9090
# localhost:9090/targets — должны быть kafka, mongodb, redis, rabbitmq