Ответ
Да, постоянно. Мониторинг БД — ключевая часть моих обязанностей как DevOps-инженера. Я настраивал сбор метрик и алертинг для PostgreSQL, MySQL, MongoDB и Redis в продакшн-среде.
Стек: Prometheus + Grafana для метрик, ELK (Elasticsearch, Logstash, Kibana) или Loki для логов, иногда VictoriaMetrics для долгосрочного хранения.
Ключевые метрики и экспортеры:
-
PostgreSQL/MySQL: Использовал экспортеры
postgres_exporterиmysqld_exporterдля Prometheus.- Производительность:
pg_stat_database(транзакции в секунду, конфликты),pg_stat_statements(медленные запросы). - Ресурсы: Connections, locks, buffer cache hit ratio.
- Репликация: Replication lag (
pg_replication_slots), статус слейвов. - Дисковый ввод-вывод: Checkpoints, WAL activity.
- Производительность:
-
MongoDB: Экспортер
mongodb_exporter.- Операции чтения/записи в секунду.
- Oplog window (для репликации).
- Queue lengths и lock percentages.
-
Redis: Экспортер
redis_exporter.- Memory usage, hit/miss ratio.
- Connected clients, blocked clients.
- Ключи с истекшим TTL в секунду.
Пример алерта Prometheus для PostgreSQL:
- alert: HighPostgresConnections
expr: pg_stat_database_numbackends{datname!~"template.*|postgres"} > 100
for: 5m
labels:
severity: warning
team: db
annotations:
summary: "Высокое количество подключений к БД {{ $labels.datname }}"
description: "База данных {{ $labels.datname }} имеет {{ $value }} активных подключений."
Дашборд в Grafana включал графики по всем этим метрикам, что позволяло быстро диагностировать проблемы, такие как нехватка соединений, рост лага репликации или аномальная нагрузка на диски.