Доводилось ли мониторить базы данных? Какие метрики и инструменты вы использовали?

«Доводилось ли мониторить базы данных? Какие метрики и инструменты вы использовали?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, постоянно. Мониторинг БД — ключевая часть моих обязанностей как DevOps-инженера. Я настраивал сбор метрик и алертинг для PostgreSQL, MySQL, MongoDB и Redis в продакшн-среде.

Стек: Prometheus + Grafana для метрик, ELK (Elasticsearch, Logstash, Kibana) или Loki для логов, иногда VictoriaMetrics для долгосрочного хранения.

Ключевые метрики и экспортеры:

  1. 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.
  2. MongoDB: Экспортер mongodb_exporter.

    • Операции чтения/записи в секунду.
    • Oplog window (для репликации).
    • Queue lengths и lock percentages.
  3. 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 включал графики по всем этим метрикам, что позволяло быстро диагностировать проблемы, такие как нехватка соединений, рост лага репликации или аномальная нагрузка на диски.