Настройка мониторинга MongoDB через Prometheus и mongodb_exporter

Когда MongoDB падает в 3 часа ночи, а логи показывают лишь обрывки, каждый час простоя бьёт по бизнесу. Мы настраиваем мониторинг MongoDB через Prometheus и mongodb_exporter, превращая хаос диагностических данных в понятные метрики и алерты. Наша команда реализует проект под ключ — от создания пользователя с минимальными правами до настройки дашбордов в Grafana, обеспечивая стабильную работу и последующую поддержку.
Часто задаваемые вопросы

Вы запускаете db.serverStatus() и видите сотни полей JSON. Без экспортера эти данные — мёртвый груз. Когда MongoDB падает в 3 часа ночи, а logs показывают только обрывки — каждый лишний час простоя стоит бизнесу сотен тысяч долларов. Именно поэтому мониторинг — не опция, а критический элемент production-инфраструктуры. Наша команда имеет 8-летний опыт в DevOps и более 50 успешных проектов по мониторингу MongoDB, от стартапов до enterprise с десятками шардов. Мы используем percona/mongodb_exporter — наиболее зрелый экспортер, который превращает diagnostic data в метрики с нормальными label-ами. Без мониторинга вы рискуете пропустить рост latency, внезапный отказ реплики или переполнение кэша WiredTiger. Один инцидент с неправильным алертом может стоить нескольких часов downtime. В этой статье — практический опыт, метрики, которые действительно спасают, и алерты, которые мы ставим всегда. Своевременное обнаружение проблем позволяет существенно сократить расходы на простой.

Как настроить mongodb_exporter?

  1. Создайте пользователя в MongoDB с минимальными правами:
use admin
db.createUser({
  user: "exporter",
  pwd: "secret",
  roles: [
    { role: "clusterMonitor", db: "admin" },
    { role: "read", db: "local" }
  ]
})

Официальная документация MongoDB по ролям подтверждает, что роль clusterMonitor предоставляет read-only доступ к serverStatus и replSetGetStatus. Это минимально необходимый набор прав.

  1. Настройте docker-compose.yml:
services:
  mongodb-exporter:
    image: percona/mongodb_exporter:0.40
    command:
      - --mongodb.uri=mongodb://exporter:secret@mongo:27017
      - --collect-all
      - --compatible-mode
    ports:
      - "9216:9216"

Флаг --compatible-mode включает метрики, совместимые со старым dcu/mongodb_exporter — актуально, если у вас уже есть дашборды. --collect-all активирует все коллекторы: diagnosticdata, replicaset, shards, topmetrics, indexstats, dbstats, collstats. Без этого экспортер собирает только базовые метрики соединений и операций.

  1. Запустите и проверьте метрики: убедитесь, что на порту 9216 отдаются метрики в формате Prometheus.

Почему WiredTiger cache важен для производительности?

WiredTiger по умолчанию использует 50% RAM минус 1 GB. Когда cache pressure высокий, начинается активное вытеснение страниц — mongodb_wiredtiger_cache_pages_evicted_by_application_threads_total растёт, latency запросов растёт вместе с ним. На одном проекте мы увидели, как индексный запрос стал выполняться на 200 мс медленнее из-за cache eviction. После увеличения кэша до 70% RAM проблема ушла. Следите за отношением mongodb_wiredtiger_cache_bytes_currently_in_cache к max_bytes_configured — при 95% в течение 10 минут ставьте алерт. WiredTiger cache pressure — один из первых индикаторов проблем с производительностью.

Какие метрики критичны для replica set?

Для replica set ключевых метрик три: состояние членов, lag и операции. mongodb_rs_members_state показывает состояние: 1 (PRIMARY), 2 (SECONDARY), 6 (RECOVERING), 8 (DOWN). Любое значение не 1 или 2 — это авария. mongodb_rs_members_optime_date позволяет вычислить replication lag: разница между PRIMARY и SECONDARY в секундах. При превышении 30 секунд в течение 5 минут ставьте алерт. mongodb_rs_members_optime_date часто игнорируют, но на больших кластерах lag может привести к потере данных при failover.

Критические метрики MongoDB в production

В production мы фокусируемся на пяти группах метрик. Вот они в таблице:

Метрика Описание Типичный алерт
mongodb_rs_members_state Состояние replica set: 1 (PRIMARY), 2 (SECONDARY), 6 (RECOVERING), 8 (DOWN) Любое значение не 1 или 2
mongodb_rs_members_optime_date Время последней применённой операции Replication lag > 30 секунд
mongodb_wiredtiger_cache_bytes_currently_in_cache / max_bytes_configured Заполненность кэша WiredTiger > 95% в течение 10 минут
mongodb_op_counters_total Счётчики операций: query, insert, update, delete, command Резкое изменение соотношения после деплоя
mongodb_connections{state="current"} Текущие соединения vs доступные (available) near(available)

Replica Set состояние. mongodb_rs_members_state — первый индикатор беды. Любое значение кроме 1 или 2 — это чрезвычайная ситуация. mongodb_rs_members_optime_date вместе с разницей между PRIMARY и SECONDARY даёт replication lag. На больших кластерах мы ставим for: 5m и порог 30 секунд, чтобы избежать ложных срабатываний на коротких пиках нагрузки.

WiredTiger cache прямо влияет на latency. Мониторинг этого показателя позволяет вовремя расширить кэш или оптимизировать запросы.

Операции. mongodb_op_counters_total с типом query, insert, update, delete, command — профиль нагрузки. Резкое изменение соотношения после деплоя — первый сигнал, что приложение использует базу не так, как ожидалось.

Соединения. Когда current подбирается к available — база начинает отказывать. Ставьте алерт при 80% заполнения.

Когда mongodb_exporter лучше старого dcu/mongodb_exporter?

percona/mongodb_exporter включает 10 коллекторов против 3 у dcu/mongodb_exporter, что в 3 раза увеличивает охват метрик. Она поддерживает диагностические данные, статистику коллекций и индексов — всё, что нужно для глубокого анализа. Кроме того, percona-экспортер активнее развивается и совместим с MongoDB 7.0+. Подробнее о возможностях можно узнать на GitHub-странице проекта.

Пример алертов для Prometheus

groups:
  - name: mongodb
    rules:
      - alert: MongoDBReplicaMemberDown
        expr: mongodb_rs_members_state{} not in (1, 2)
        for: 2m
        labels:
          severity: critical
      - alert: MongoDBHighReplicationLag
        expr: |
          (max(mongodb_rs_members_optime_date{member_state="PRIMARY"}) - min(mongodb_rs_members_optime_date{member_state="SECONDARY"})) > 30
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "MongoDB replication lag {{ $value }}s"
      - alert: MongoDBWiredTigerCachePressure
        expr: |
          mongodb_wiredtiger_cache_bytes_currently_in_cache / mongodb_wiredtiger_cache_max_bytes_configured > 0.95
        for: 10m
        labels:
          severity: warning

Как настроить мониторинг sharded кластера?

Для sharded MongoDB важны метрики балансировщика:

  • mongodb_mongos_balancer_enabled — включён ли балансировщик
  • mongodb_ss_sharding_chunks_* — распределение chunks по шардам

Если chunks распределены неравномерно — запросы перегружают один шард, остальные простаивают. Экспортер собирает эти данные только при подключении к mongos, не к mongod напрямую.

Типичные ошибки при настройке мониторинга

Ошибка Проявление Решение
Неправильные права пользователя Метрики репликации пусты Выдайте роль clusterMonitor и read на local
Пропущен флаг --compatible-mode Несовместимость со старыми дашбордами Добавьте флаг и перезапустите контейнер
Подключение к mongod вместо mongos Нет метрик шардирования Укажите URI mongos в конфиге

Что входит в работу?

  • Аудит текущей конфигурации MongoDB и Prometheus.
  • Расчёт рекомендуемых коллекторов и метрик под вашу схему.
  • Деплой экспортера, настройка scrape в Prometheus.
  • Настройка алертов (replica state, replication lag, cache pressure, connections).
  • Создание дашборда в Grafana с key metrics.
  • Документация runbook по эксплуатации.

Базовая настройка (деплой, scrape, алерты на RS-состояние и connections) — 4–6 часов. Полноценный стек с collstats, indexstats, дашбордами под конкретную схему и шардированием — 1–2 дня. Стоимость рассчитывается индивидуально и зависит от сложности архитектуры.

Свяжитесь с нами для настройки мониторинга вашего кластера. Получите консультацию по вашему проекту уже сегодня. Закажите аудит текущего мониторинга — мы найдем узкие места и предложим решения.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142