Прямой ответ
Database monitoring — отслеживание производительности и состояния базы данных (monitoring — «мониторинг БД» — monitoring — incident — «наблюдаемость» — monitoring), зачем: раннее обнаружение проблем (monitoring — «проблемы видны заранее» — monitoring — incident — «до инцидента» — monitoring — postgres — «обнаружение» — monitoring); ключевые метрики (monitoring — «метрики БД» — monitoring): (1) Запросы (monitoring — «количество запросов» — monitoring — incident — «QPS» — monitoring — postgres — pg_stat_database (monitoring — «запросы» — monitoring — «xact_commit/xact_rollback» — monitoring); (2) Соединения (monitoring — «активные соединения» — monitoring — incident — «connections» — monitoring — postgres — pg_stat_activity (monitoring — «соединения» — monitoring — «сколько активно» — monitoring); (3) Блокировки (monitoring — «блокировки таблиц» — monitoring — incident — «locks» — monitoring — postgres — pg_locks (monitoring — «блокировки» — monitoring — «сколько блокировок» — monitoring); (4) Производительность (monitoring — «время выполнения запросов» — monitoring — incident — «latency» — monitoring — postgres — pg_stat_statements (monitoring — «статистика запросов» — monitoring — «время выполнения» — monitoring); (5) Ресурсы (monitoring — «CPU/память/диск» — monitoring — incident — «ресурсы» — monitoring — postgres — метрики ОС (monitoring — «ресурсы сервера» — monitoring — «CPU/память/диск» — monitoring); инструменты (monitoring): (1) Prometheus (monitoring — «система мониторинга» — monitoring — incident — «метрики» — monitoring — postgres — exporter (monitoring — «postgres_exporter» — monitoring — Prometheus — «метрики» — monitoring); (2) Grafana (monitoring — «визуализация метрик» — monitoring — incident — «дашборды» — monitoring — postgres — дашборды (monitoring — «дашборды БД» — monitoring — Grafana — «визуализация» — monitoring); (3) pg_stat_statements (monitoring — «расширение PostgreSQL» — monitoring — incident — «статистика запросов» — monitoring — postgres — pg_stat_statements (monitoring — «запросы» — monitoring — postgres — «статистика» — monitoring); алерты (monitoring — «оповещения» — monitoring): (1) Высокая нагрузка (monitoring — «много запросов» — monitoring — incident — «QPS > 1000» — monitoring — postgres — алерт (monitoring — «высокая нагрузка» — monitoring — incident — «алерт» — monitoring); (2) Медленные запросы (monitoring — «запросы > 1 с» — monitoring — incident — «latency» — monitoring — postgres — алерт (monitoring — «медленные запросы» — monitoring — incident — «алерт» — monitoring); (3) Блокировки (monitoring — «блокировки > 10 с» — monitoring — incident — «locks» — monitoring — postgres — алерт (monitoring — «блокировки» — monitoring — incident — «алерт» — monitoring); когда мониторить (monitoring): всегда (monitoring — «постоянно» — monitoring — incident — «24/7» — monitoring — postgres), продакшн (monitoring — «продакшн БД» — monitoring — incident — «продакшн» — monitoring — postgres), критичные сервисы (monitoring — «критичные» — monitoring — incident — «критичные» — monitoring — postgres); антипаттерны: не мониторить (monitoring — «без мониторинга» — monitoring — incident — «проблемы не видны» — monitoring — postgres — «мониторинг обязателен» — monitoring), слишком много метрик (monitoring — «все метрики» — monitoring — incident — «шум» — monitoring — postgres — «только важные» — monitoring).
Практика: мониторинг PostgreSQL
postgres_exporter (monitoring — kubectl apply -f postgres-exporter-deployment.yaml (monitoring — «postgres_exporter в Kubernetes» — monitoring — postgres — «exporter» — monitoring — Prometheus); Prometheus (monitoring — scrape_configs: - job_name: postgres static_configs: - targets: ['postgres-exporter:9187'] (monitoring — «Prometheus собирает метрики» — monitoring — postgres — «метрики» — monitoring — Prometheus); Grafana (monitoring — kubectl apply -f grafana-deployment.yaml (monitoring — «Grafana в Kubernetes» — monitoring — postgres — «визуализация» — monitoring — Grafana); pg_stat_statements (monitoring — CREATE EXTENSION pg_stat_statements; SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; (monitoring — «статистика запросов» — monitoring — postgres — «топ запросов» — monitoring — postgres); Алерты (monitoring — alert: HighDatabaseLoad expr: rate(pg_stat_database_xact_commit[5m]) > 1000 for: 5m labels: severity: warning (monitoring — «алерт на высокую нагрузку» — monitoring — postgres — «алерт» — monitoring — incident).
Практический сценарий: настройка мониторинга PostgreSQL
Контекст: PostgreSQL (postgres — продакшн (incident — monitoring), боль: нет мониторинга (monitoring — «без мониторинга» — monitoring — incident — «проблемы не видны» — monitoring — postgres); решение — database monitoring: (1) postgres_exporter (monitoring — установка (monitoring — kubectl apply -f postgres-exporter-deployment.yaml (monitoring — postgres — «exporter» — monitoring — Prometheus); (2) Prometheus (monitoring — сбор метрик (monitoring — scrape_configs: - job_name: postgres (monitoring — postgres — «метрики» — monitoring — Prometheus); (3) Grafana (monitoring — визуализация (monitoring — kubectl apply -f grafana-deployment.yaml (monitoring — postgres — «дашборды» — monitoring — Grafana); (4) pg_stat_statements (monitoring — CREATE EXTENSION pg_stat_statements; (monitoring — postgres — «статистика» — monitoring — postgres); (5) алерты (monitoring — alert: HighDatabaseLoad expr: rate(pg_stat_database_xact_commit[5m]) > 1000 (monitoring — postgres — «алерты» — monitoring — incident); результат: мониторинг настроен (monitoring — «метрики собираются» — monitoring — incident — «дашборды» — monitoring — postgres — «алерты» — monitoring — «проблемы видны» — monitoring); вывод: database monitoring решили задачу (наблюдаемость — monitoring — ADR — «не мониторить» — антипаттерн — postgres — мониторинг обязателен — monitoring — техдолг).
FAQ
Что такое database monitoring и зачем он нужен? Database monitoring (monitoring — отслеживание производительности (monitoring — «мониторинг БД» — monitoring — incident — «наблюдаемость» — monitoring — postgres); зачем: раннее обнаружение (monitoring — «проблемы видны» — monitoring — incident — «до инцидента» — monitoring — postgres), оптимизация (monitoring — «узкие места видны» — monitoring — incident — «оптимизация» — monitoring — postgres), планирование (monitoring — «нагрузка видна» — monitoring — incident — «планирование» — monitoring — postgres); «без мониторинга» — антипаттерн (проблемы не видны — postgres — мониторинг обязателен — monitoring — ADR — техдолг).
Какие ключевые метрики нужно мониторить в базе данных?
Метрики (monitoring — ключевые (monitoring — «метрики БД» — monitoring — incident — «важные» — monitoring — postgres): Запросы (monitoring — «количество запросов» — monitoring — incident — «QPS» — monitoring — postgres — pg_stat_database (monitoring — «запросы» — monitoring), Соединения (monitoring — «активные соединения» — monitoring — incident — «connections» — monitoring — postgres — pg_stat_activity (monitoring — «соединения» — monitoring), Блокировки (monitoring — «блокировки таблиц» — monitoring — incident — «locks» — monitoring — postgres — pg_locks (monitoring — «блокировки» — monitoring), Производительность (monitoring — «время выполнения» — monitoring — incident — «latency» — monitoring — postgres — pg_stat_statements (monitoring — «статистика» — monitoring); «не мониторить ключевые метрики» — антипаттерн (проблемы не видны — postgres — мониторить обязательно — monitoring — ADR — техдолг).
Как настроить database monitoring с Prometheus и Grafana?
Настройка (monitoring — postgres_exporter (monitoring — kubectl apply -f postgres-exporter-deployment.yaml (monitoring — postgres — «exporter» — monitoring — Prometheus); Prometheus (monitoring — сбор метрик (monitoring — scrape_configs: - job_name: postgres (monitoring — postgres — «метрики» — monitoring — Prometheus); Grafana (monitoring — визуализация (monitoring — kubectl apply -f grafana-deployment.yaml (monitoring — postgres — «дашборды» — monitoring — Grafana); алерты (monitoring — alert: HighDatabaseLoad expr: rate(pg_stat_database_xact_commit[5m]) > 1000 (monitoring — postgres — «алерты» — monitoring — incident); «не мониторить» — антипаттерн (проблемы не видны — postgres — мониторинг обязателен — monitoring — ADR — техдолг).
Как анализировать медленные запросы и что такое pg_stat_statements?
Анализ (monitoring — медленные запросы (monitoring — «запросы > 1 с» — monitoring — incident — «latency» — monitoring — postgres); pg_stat_statements (monitoring — расширение PostgreSQL (monitoring — «статистика запросов» — monitoring — incident — «статистика» — monitoring — postgres — pg_stat_statements (monitoring — «запросы» — monitoring — postgres); как: включить (monitoring — CREATE EXTENSION pg_stat_statements; (monitoring — postgres — «включить» — monitoring — postgres), анализировать (monitoring — SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; (monitoring — postgres — «топ запросов» — monitoring — postgres), оптимизировать (monitoring — индексы/запросы (monitoring — «оптимизация» — monitoring — incident — «оптимизировать» — monitoring — postgres); «не анализировать медленные запросы» — антипаттерн (производительность страдает — postgres — анализировать обязательно — monitoring — ADR — техдолг).
Источники: PostgreSQL docs (monitoring), Prometheus docs, Grafana docs — ссылки в шапке.