Мониторинг MongoDB с помощью Proto Observability

Сбор метрик и логов MongoDB: операции, соединения, память, WiredTiger, репликация, метрики уровня БД и коллекций.

На этой странице:

Сбор метрик MongoDB

Интеграция mongo подключается к mongod (или mongos) клиентом MongoDB и собирает метрики из serverStatus, dbStats, collStats, replSetGetStatus, top и metrics.commands. Поддерживаются standalone, replica set и sharded cluster — для каждого узла mongod и для каждого mongos заводится отдельный instance проверки (см. ниже).

Это обычная Python-проверка, не JMX, поэтому суффикс -jmx в образе агента не нужен — подойдёт обычный protoobp-agent:7.40.3.

Конфигурация MongoDB

Создайте read-only пользователя для агента ProtoOBP в базе admin. Нужны три роли:

  • read@admin — чтение serverStatus / dbStats / collStats;
  • clusterMonitor@adminreplSetGetStatus, top, getCmdLineOpts, serverStatus целиком;
  • read@local — метрики oplog (mongodb_oplog_timediff, mongodb_oplog_usedsizemb и т.п.).
// подключитесь к mongod как администратор
use admin
db.auth("admin", "<YOUR_PASSWORD>")

// MongoDB 3.x и новее
db.createUser({
  user: "protoobp",
  pwd:  "protoobp",
  roles: [
    { role: "read",           db: "admin" },
    { role: "clusterMonitor", db: "admin" },
    { role: "read",           db: "local" }
  ]
})

// Для очень старых версий (MongoDB 2.x)
db.addUser("protoobp", "protoobp", true)

В Docker этот скрипт удобно положить в docker-entrypoint-initdb.d — официальный образ mongo выполняет каждый *.js / *.sh из этого каталога один раз при первой инициализации тома данных, уже после создания root-пользователя из MONGO_INITDB_ROOT_USERNAME / MONGO_INITDB_ROOT_PASSWORD:

// docker-entrypoint-initdb.d/01-protoobp-user.js
db.getSiblingDB('admin').createUser({
  user: 'protoobp',
  pwd:  'protoobp',
  roles: [
    { role: 'read',           db: 'admin' },
    { role: 'clusterMonitor', db: 'admin' },
    { role: 'read',           db: 'local' }
  ]
});
services:
  mongodb:
    image: mongo:7
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: <YOUR_PASSWORD>
    volumes:
      - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:ro
    ports:
      - "27017:27017"

Конфигурация ProtoOBP агента

Если агент запускается в виде службы на хосте

  1. Создайте файл /etc/protoobp-agent/conf.d/mongo.d/conf.yaml:

    init_config:
    
    instances:
      - hosts:
          - mongodb:27017          # хост[:порт] узла mongod (по умолчанию 27017)
        username: protoobp
        password: protoobp
        database: admin            # база, из которой читать dbStats
        options:
          authSource: admin        # пользователь protoobp создан в admin
    
        ## Доп. наборы метрик (по умолчанию собирается базовый сэмпл):
        ##   metrics.commands — статистика по командам БД
        ##   top              — статистика использования по коллекциям
        ##   collection       — метрики коллекций из списка `collections`
        ##   tcmalloc         — аллокатор памяти TCMalloc
        ##   jumbo_chunks     — jumbo-чанки (только на mongos)
        # additional_metrics:
        #   - metrics.commands
        #   - top
        #   - collection
    
        ## Список баз для сбора метрик (по умолчанию — все базы):
        # dbnames:
        #   - mydb
    
        ## Конкретные коллекции для per-collection метрик (нужен
        ## `additional_metrics: [collection]`):
        # collections:
        #   - events
    
        ## Метрики доступа по индексам для коллекций из `collections` (MongoDB 3.2+):
        # collections_indexes_stats: false
    
        ## Читать ли с доступных реплик (отключите, если реплики недостижимы):
        # replica_check: true
    
        ## Доп. теги на все метрики и сервис-проверки этого instance:
        # tags:
        #   - mongo_role:standalone
    
  2. Перезапустите агента: systemctl restart protoobp-agent.

Если агент запускается в виде Docker контейнера

Добавьте autodiscovery-лейблы к контейнеру MongoDB. В docker-compose.yaml:

labels:
  com.protoobp.ad.check_names: '["mongo"]'
  com.protoobp.ad.init_configs: "[{}]"
  com.protoobp.ad.instances: '[{"hosts": ["%%host%%:%%port%%"], "username": "protoobp", "password": "protoobp", "database": "admin", "options": {"authSource": "admin"}}]'

С дополнительными наборами метрик и per-collection / per-db метриками (%%host%% / %%port%% подставляются агентом из инспекта контейнера):

labels:
  com.protoobp.ad.check_names: '["mongo"]'
  com.protoobp.ad.init_configs: "[{}]"
  com.protoobp.ad.instances: >-
    [{"hosts": ["%%host%%:%%port%%"], "username": "protoobp", "password": "protoobp",
      "database": "admin", "options": {"authSource": "admin"},
      "additional_metrics": ["metrics.commands", "top", "collection"],
      "dbnames": ["demo", "admin", "local"],
      "collections": ["events"], "collections_indexes_stats": true,
      "tags": ["mongo_role:standalone"]}]    

Или в Dockerfile:

LABEL "com.protoobp.ad.check_names"='["mongo"]'
LABEL "com.protoobp.ad.init_configs"='[{}]'
LABEL "com.protoobp.ad.instances"='[{"hosts": ["%%host%%:%%port%%"], "username":"protoobp", "password":"protoobp", "database":"admin", "options":{"authSource":"admin"}}]'

Проверка

Убедитесь, что проверка запустилась и собирает метрики:

docker exec protoobp-agent agent status | grep -A 12 "^    mongo$"

Ожидаемый вывод — [OK] для instance и ненулевое число Metric Samples (версия проверки и числа варьируются; на MongoDB 7 с включёнными metrics.commands / top / collection — порядка 375 сэмплов за запуск):

mongo (4.0.2)
-------------
  Instance ID: mongo:58f178627f486c86 [OK]
  Configuration Source: container:docker://0ee90e8358f1...
  Total Runs: 36
  Metric Samples: Last Run: 375, Total: 13,432
  Events: Last Run: 0, Total: 0
  Service Checks: Last Run: 1, Total: 36
  Average Execution Time : 33ms
  metadata:
    version.raw: 7.0.32
    version.scheme: semver

Если instance в состоянии [ERROR] — частые причины: неверный authSource (Authentication failed), у пользователя нет роли clusterMonitor, агент не в той docker network, что MongoDB.

Собираемые метрики

Почти все метрики имеют тип gauge. Имена, заканчивающиеся на ps (...insertps, ...bytesinps и т.п.), — это rate в секунду: интеграция сама считает производную кумулятивного счётчика на стороне агента, в бэкенд уходит уже скорость. Часть метрик собирается только при включённых additional_metrics или только в определённых топологиях — это отмечено.

Лейблы

ЛейблГде появляетсяПример
hostвсе метрикихост, на котором работает агент
server / hostsвсе метрики — адрес узла MongoDBmongodb:27017
dbметрики уровня БД (mongodb_stats_*)db:demo
collectionметрики уровня коллекции (mongodb_collection_*, mongodb_usage_*)collection:events
replset / replset_stateметрики replica set (mongodb_replset_*)replset:rs0
serviceтег service (com.protoobp.tags.service или POBP_TAGS)mongodb
envтег envdevelopment
docker_image / image_name / image_tag / short_imageпри запуске в контейнереmongo:7 / mongo / 7 / mongo

Плюс любые теги из tags: в конфиге instance (например, mongo_role:standalone).

Операции (opcounters)

Скорость операций, которые получил этот узел напрямую от клиентов.

Имя метрикиЕдиницаОписание
mongodb_opcounters_insertpsoperation/secondВставки в секунду
mongodb_opcounters_querypsquery/secondЗапросы (find) в секунду
mongodb_opcounters_updatepsoperation/secondОбновления в секунду
mongodb_opcounters_deletepsoperation/secondУдаления в секунду
mongodb_opcounters_getmorepsoperation/secondgetmore в секунду (дочитывание курсоров)
mongodb_opcounters_commandpscommand/secondКоманды БД в секунду

Соединения

Имя метрикиЕдиницаОписание
mongodb_connections_currentconnectionТекущее число клиентских соединений
mongodb_connections_availableconnectionСколько ещё входящих соединений может принять сервер
mongodb_connections_totalcreatedconnectionВсего соединений создано с момента старта
mongodb_connection_pool_totalinuseconnectionИсходящие соединения к другим узлам кластера, занятые сейчас (mongos/mongod в кластере)
mongodb_connection_pool_totalavailableconnectionДоступные исходящие соединения к узлам кластера
mongodb_connection_pool_totalcreatedpsconnection/secondСоздание исходящих соединений к узлам кластера в секунду
mongodb_connection_pool_totalrefreshingconnectionИсходящие соединения в процессе обновления
mongodb_connection_pool_numclientconnectionsconnectionАктивные/сохранённые исходящие синхронные соединения от mongos
mongodb_connection_pool_numascopedconnectionsconnectionАктивные/сохранённые scoped-соединения от mongos

Документы и операции (metrics.document / metrics.operation)

Имя метрикиЕдиницаОписание
mongodb_metrics_document_insertedpsdocument/secondВставлено документов в секунду
mongodb_metrics_document_updatedpsdocument/secondОбновлено документов в секунду
mongodb_metrics_document_deletedpsdocument/secondУдалено документов в секунду
mongodb_metrics_document_returnedpsdocument/secondВозвращено документов запросами в секунду
mongodb_metrics_queryexecutor_scannedpsoperation/secondПросмотрено элементов индекса в секунду (queries + оценка планов)
mongodb_metrics_queryexecutor_scannedobjectspsoperation/secondПросмотрено документов в секунду
mongodb_metrics_operation_scanandorderpsquery/secondЗапросы в секунду с сортировкой без подходящего индекса
mongodb_metrics_operation_idhackpsquery/secondЗапросы в секунду по полю _id
mongodb_metrics_operation_fastmodpsoperation/secondUpdate’ы в секунду, не меняющие размер документа и не трогающие индексы
mongodb_metrics_operation_writeconflictspsevent/secondКонфликты записи в секунду (WiredTiger optimistic concurrency)
mongodb_metrics_query_sort_spilltodiskpsoperation/secondСбросов сортировки на диск в секунду (MongoDB 6.2+)
mongodb_metrics_query_sort_totalkeyssortedpskey/secondКлючей просортировано в секунду (MongoDB 6.2+)
mongodb_metrics_query_sort_totalbytessortedpsbyte/secondБайт просортировано в секунду (MongoDB 6.2+)
mongodb_metrics_query_plancache_classic_hitsps / .missespsoperation/secondПопадания/промахи classic plan cache в секунду (MongoDB 7.0+)
mongodb_metrics_query_plancache_sbe_hitsps / .missespsoperation/secondПопадания/промахи SBE plan cache в секунду (MongoDB 7.0+)
mongodb_metrics_record_movespsoperation/secondПеремещений документов на диске в секунду
mongodb_metrics_ttl_deleteddocumentspsdocument/secondДокументов удалено TTL-индексами в секунду
mongodb_metrics_ttl_passespsoperation/secondПроходов фонового TTL-процесса в секунду
mongodb_metrics_cursor_open_totalcursorОткрытых курсоров всего
mongodb_metrics_cursor_open_pinnedcursorЗакреплённых открытых курсоров
mongodb_metrics_cursor_open_notimeoutcursorОткрытых курсоров с noTimeout
mongodb_metrics_cursor_timedoutpscursor/secondКурсоров истекло по таймауту в секунду
mongodb_metrics_getlasterror_wtime_numpsoperation/secondgetLastError с write concern в секунду
mongodb_metrics_getlasterror_wtimeoutspsevent/secondТаймаутов write concern в секунду

Латентность операций (oplatencies)

Из serverStatus().opLatencies — суммарная и средняя латентность по типам операций.

Имя метрикиЕдиницаОписание
mongodb_oplatencies_reads_latencymicrosecondСуммарная латентность чтений
mongodb_oplatencies_reads_latency_avgmicrosecondСредняя латентность чтения
mongodb_oplatencies_writes_latencymicrosecondСуммарная латентность записей
mongodb_oplatencies_writes_latency_avgmicrosecondСредняя латентность записи
mongodb_oplatencies_commands_latencymicrosecondСуммарная латентность команд
mongodb_oplatencies_commands_latency_avgmicrosecondСредняя латентность команды

Память (mem / extra_info / tcmalloc)

Имя метрикиЕдиницаОписание
mongodb_mem_residentmebibyteRSS процесса mongod
mongodb_mem_virtualmebibyteВиртуальная память процесса mongod
mongodb_mem_mappedmebibyteРазмер mapped-памяти (storage engine со mmap)
mongodb_mem_mappedwithjournalmebibyteMapped-память включая журнал
mongodb_mem_bitsmebibyteРазрядность storage engine
mongodb_extra_info_heap_usage_bytespsbyte/secondИспользование heap процессом БД (Unix/Linux)
mongodb_extra_info_page_faultspsfault/secondPage faults в секунду, требующие операций с диском
mongodb_system_cpu_percentpercentЗагрузка CPU процессом MongoDB (только self-hosted на хосте агента)
mongodb_system_cpu_corescoreДоступно логических ядер
mongodb_system_mem_total / mongodb_system_mem_limitmegabyteВсего RAM / лимит RAM (например, в контейнере)
mongodb_tcmalloc_generic_current_allocated_bytesbyteБайт памяти, используемой приложением (нужен additional_metrics: [tcmalloc])
mongodb_tcmalloc_generic_heap_sizebyteБайт системной памяти, зарезервированной TCMalloc
mongodb_tcmalloc_tcmalloc_pageheap_free_bytesbyteБайт в свободных mapped-страницах page heap
mongodb_tcmalloc_tcmalloc_pageheap_unmapped_bytesbyteБайт в свободных unmapped-страницах page heap
mongodb_tcmalloc_tcmalloc_current_total_thread_cache_bytesbyteБайт во всех thread-кэшах
mongodb_tcmalloc_tcmalloc_central_cache_free_bytesbyteСвободных байт в central cache
mongodb_tcmalloc_tcmalloc_transfer_cache_free_bytesbyteСвободных байт в transfer cache
mongodb_tcmalloc_tcmalloc_thread_cache_free_bytesbyteСвободных байт в thread-кэшах
mongodb_tcmalloc_tcmalloc_max_total_thread_cache_bytesbyteВерхний лимит на все thread-кэши
mongodb_tcmalloc_tcmalloc_spinlock_total_delay_nsnanosecondСуммарное время задержек на spinlock’ах
mongodb_tcmalloc_tcmalloc_aggressive_memory_decommitСтатус режима aggressive memory decommit

Сеть

Имя метрикиЕдиницаОписание
mongodb_network_bytesinpsbyte/secondВходящий сетевой трафик БД
mongodb_network_bytesoutpsbyte/secondИсходящий сетевой трафик БД
mongodb_network_numrequestspsrequest/secondКоличество отдельных запросов к серверу в секунду

Ассерты

Имя метрикиЕдиницаОписание
mongodb_asserts_regularpsassertion/secondОбычные ассерты в секунду
mongodb_asserts_warningpsassertion/secondПредупреждения в секунду
mongodb_asserts_msgpsassertion/secondMessage-ассерты в секунду
mongodb_asserts_userpsassertion/secondПользовательские ассерты в секунду (ошибки клиентских операций)
mongodb_asserts_rolloverspsassertion/secondПереполнений счётчиков ассертов в секунду

WiredTiger

Метрики storage engine WiredTiger — кэш и concurrency tickets.

Имя метрикиЕдиницаОписание
mongodb_wiredtiger_cache_bytes_currently_in_cachebyteРазмер данных, находящихся сейчас в кэше
mongodb_wiredtiger_cache_maximum_bytes_configuredbyteМаксимальный размер кэша
mongodb_wiredtiger_cache_tracked_dirty_bytes_in_cachebyteРазмер «грязных» данных в кэше
mongodb_wiredtiger_cache_bytes_read_into_cachebyteПрочитано байт в кэш
mongodb_wiredtiger_cache_bytes_written_from_cachebyteЗаписано байт из кэша
mongodb_wiredtiger_cache_pages_currently_held_in_cachepageСтраниц сейчас в кэше
mongodb_wiredtiger_cache_pages_read_into_cachepageПрочитано страниц в кэш
mongodb_wiredtiger_cache_pages_written_from_cachepageЗаписано страниц из кэша
mongodb_wiredtiger_cache_pages_requested_from_cachepageЗапрошено страниц из кэша
mongodb_wiredtiger_cache_modified_pages_evicted / .unmodified_pages_evictedpageВытеснено изменённых / неизменённых страниц
mongodb_wiredtiger_cache_pages_evicted_by_application_threadspspage/secondСтраниц вытеснено прикладными потоками в секунду
mongodb_wiredtiger_cache_pages_evicted_exceeding_the_in_memory_maximumpspage/secondСтраниц вытеснено из-за превышения in-memory maximum в секунду
mongodb_wiredtiger_cache_failed_eviction_of_pages_exceeding_the_in_memory_maximumpspage/secondНеудачных вытеснений таких страниц в секунду
mongodb_wiredtiger_cache_in_memory_page_splitssplitРазбиений страниц в памяти
mongodb_wiredtiger_cache_maximum_page_size_at_evictionbyteМаксимальный размер страницы при вытеснении
mongodb_wiredtiger_concurrenttransactions_read_out / .write.outticketИспользуется read- / write-тикетов (одновременных транзакций)
mongodb_wiredtiger_concurrenttransactions_read_available / .write.availableticketСвободных read- / write-тикетов
mongodb_wiredtiger_concurrenttransactions_read_totaltickets / .write.totalticketsticketВсего read- / write-тикетов

Курсоры

Имя метрикиЕдиницаОписание
mongodb_cursors_totalopencursorОткрытых курсоров, обслуживаемых для клиентов
mongodb_cursors_timedoutcursorВсего курсоров истекло по таймауту с момента старта

Команды (metrics.commands)

Собираются при additional_metrics: [metrics.commands]. Для каждой команды — сколько раз выполнена (total) и сколько раз упала в секунду (failedps): count, insert, update, delete, findandmodify, createindexes, eval.

Имя метрикиЕдиницаОписание
mongodb_metrics_commands_<cmd>_totalcommandСколько раз команда <cmd> выполнена
mongodb_metrics_commands_<cmd>_failedpscommand/secondСколько раз команда <cmd> упала в секунду

Локи и глобальный лок (locks / globallock)

mongodb_globallock_* — состояние очереди и активных клиентов на чтение/запись:

Имя метрикиЕдиницаОписание
mongodb_globallock_currentqueue_totaloperationОпераций в очереди на глобальный лок
mongodb_globallock_currentqueue_readers / .writersoperationОпераций в очереди на чтение / запись
mongodb_globallock_activeclients_totalconnectionАктивных клиентских соединений
mongodb_globallock_activeclients_readers / .writersconnectionАктивных клиентов на чтение / запись
mongodb_globallock_totaltimemicrosecondВремя с создания глобального лока
mongodb_globallock_locktimemillisecondВремя удержания глобального лока с момента старта
mongodb_globallock_ratiofractionДоля времени удержания глобального лока (deprecated)

mongodb_locks_<scope>_acquirecount_<mode>ps / acquirewaitcount.<mode>ps / timeacquiringmicros.<mode>ps — счётчики захватов лока в секунду, ожиданий и времени ожидания, по областям (scope: global, database, collection, metadata, oplog, mmapv1journal) и режимам (mode: shared, exclusive, intent_shared, intent_exclusive). Пример: mongodb_locks_database_acquirecount_intent_exclusiveps.

Журналирование (dur)

Метрики durability/journal (serverStatus().dur; на storage engine со mmap):

Имя метрикиЕдиницаОписание
mongodb_dur_commitstransactionТранзакций записано в журнал за последний group-commit
mongodb_dur_commitsinwritelockcommitКоммитов, выполненных под write-локом
mongodb_dur_earlycommitscommitПреждевременных коммитов журнала
mongodb_dur_journaledmbmebibyteЗаписано в журнал за последний group-commit
mongodb_dur_writetodatafilesmbmebibyteЗаписано из журнала в файлы данных за последний group-commit
mongodb_dur_compressionfractionСтепень сжатия данных, записываемых в журнал
mongodb_dur_timems_writetojournalmillisecondВремя записи в журнал
mongodb_dur_timems_writetodatafilesmillisecondВремя записи в файлы данных после журналирования
mongodb_dur_timems_commitsmillisecondВремя на коммиты
mongodb_dur_timems_commitsinwritelockmillisecondВремя на коммиты под write-локом
mongodb_dur_timems_preplogbuffermillisecondВремя подготовки записи в журнал
mongodb_dur_timems_remapprivateviewmillisecondВремя remap copy-on-write memory mapped views
mongodb_dur_timems_dtmillisecondИнтервал, за который собраны dur.timeMS

Уровень базы данных (dbStats)

Несут лейбл db:<имя_базы>. Базы выбираются параметром dbnames: (по умолчанию — все).

Имя метрикиЕдиницаОписание
mongodb_stats_collectionsЧисло коллекций в базе
mongodb_stats_viewsЧисло view в базе
mongodb_stats_indexesindexЧисло индексов по всем коллекциям базы
mongodb_stats_objectsobjectЧисло документов по всем коллекциям базы
mongodb_stats_avgobjsizebyteСредний размер документа
mongodb_stats_datasizebyteРазмер данных базы (с учётом padding)
mongodb_stats_storagesizebyteВыделено места под хранение документов
mongodb_stats_indexsizebyteРазмер всех индексов базы
mongodb_stats_totalsizebyteВсего выделено диска под документы и индексы (used + free)
mongodb_stats_freestoragesizebyteСвободно места, выделенного коллекциям под документы
mongodb_stats_indexfreestoragesizebyteСвободно места, выделенного под индексы
mongodb_stats_totalfreestoragesizebyteВсего свободного выделенного места (документы + индексы)
mongodb_stats_fstotalsizebyteВсего ёмкости ФС, где лежат данные MongoDB
mongodb_stats_fsusedsizebyteЗанято на ФС, где лежат данные MongoDB
mongodb_stats_filesizebyteРазмер файлов данных (только mmapv1)
mongodb_stats_numextentsЧисло extents в базе (mmapv1)
mongodb_dbsitemВсего существующих баз на сервере

Уровень коллекции (collStats / top)

Собираются при additional_metrics: [collection] для коллекций из списка collections:. Несут лейблы db:<база> и collection:<имя>. Каждая коллекция добавляет ~8 + (число индексов) серий.

Имя метрикиЕдиницаОписание
mongodb_collection_countitemЧисло документов в коллекции
mongodb_collection_sizebyteНесжатый размер всех документов коллекции в памяти
mongodb_collection_storagesizebyteВыделено места под хранение документов коллекции
mongodb_collection_avgobjsizebyteСредний размер документа в коллекции
mongodb_collection_nindexesindexЧисло индексов на коллекции
mongodb_collection_totalindexsizebyteСуммарный размер всех индексов коллекции
mongodb_collection_indexsizesbyteРазмер индекса (по индексу; тег index_name)
mongodb_collection_cappedrecord1, если коллекция capped
mongodb_collection_maxdocumentМаксимум документов в capped-коллекции
mongodb_collection_maxsizebyteМаксимальный размер capped-коллекции
mongodb_collection_indexes_accesses_ops / .opspsevent / event/secondСколько раз использован индекс (всего / в секунду; нужен collections_indexes_stats: true)
mongodb_collection_collectionscans_total / .totalpsscan / scan/secondПолных сканирований коллекции (всего / в секунду)
mongodb_collection_collectionscans_nontailable / .nontailablepsscan / scan/secondСканирований без tailable-курсора
mongodb_collection_reads_opsps / .reads.latency / .reads.latency.avgoperation/second / microsecondЧтения: rate, суммарная и средняя латентность
mongodb_collection_writes_opsps / .writes.latency / .writes.latency.avgoperation/second / microsecondЗаписи: rate, суммарная и средняя латентность
mongodb_collection_commands_opsps / .commands.latency / .commands.latency.avgoperation/second / microsecondКоманды: rate, суммарная и средняя латентность
mongodb_collection_transactions_opsps / .transactions.latency / .transactions.latency.avgoperation/second / microsecondТранзакции: rate, суммарная и средняя латентность

mongodb_usage_<op>_count / .countps / .time (<op>: total, queries, getmore, insert, update, remove, commands, readlock, writelock) — из top, при additional_metrics: [top], по коллекциям (collection:<имя>): число операций с момента старта, в секунду и суммарное время в микросекундах. Например, mongodb_usage_queries_countps.

Репликация (replset / opcountersrepl / oplog)

Эти метрики появляются только на узлах replica set / sharded cluster.

Имя метрикиЕдиницаОписание
mongodb_replset_healthЗдоровье члена набора: 1 — up, 0 — down (тег member)
mongodb_replset_stateСостояние реплики в наборе (тег replset_state: primary, secondary, …)
mongodb_replset_replicationlagsecondЛаг репликации, вычисленный на каждом узле (тег host)
mongodb_replset_optime_lagsecondЛаг репликации, вычисленный на primary (тег member) — точнее, рекомендуется для алертов
mongodb_replset_votes / .votefractionitem / fractionСколько голосов отдаёт узел на выборах / доля голосов
mongodb_opcountersrepl_insertps / .updateps / .deleteps / .queryps / .getmoreps / .commandpsoperation/second / query/second / command/secondРеплицированные операции в секунду (применённые из oplog)
mongodb_oplog_logsizembmebibyteСконфигурированный размер oplog
mongodb_oplog_usedsizembmebibyteЗанято в oplog
mongodb_oplog_timediffsecondОкно oplog: разница между первой и последней операцией в oplog
mongodb_metrics_repl_apply_opspsoperation/secondПрименено операций из oplog в секунду
mongodb_metrics_repl_apply_batches_numps / .totalmillispsoperation/second / fractionБатчей применено в секунду / доля времени на применение oplog
mongodb_metrics_repl_buffer_count / .sizebytes / .maxsizebytesoperation / byteОпераций в oplog-буфере / текущий и максимальный размер буфера
mongodb_metrics_repl_network_bytesps / .opsps / .readerscreatedpsbyte/second / operation/second / process/secondЧтение из источника репликации: байт, операций, создано reader-процессов в секунду
mongodb_metrics_repl_network_getmores_numps / .totalmillispsoperation/second / fractiongetmore к источнику в секунду / доля времени на сбор данных

Прочее

Имя метрикиЕдиницаОписание
mongodb_uptimesecondСколько секунд процесс mongod / mongos работает
mongodb_sessions_countsessionЧисло активных сессий всех пользователей
mongodb_fsynclocked1, если база заблокирована fsyncLock, иначе 0
mongodb_indexcounters_accessesps / .hitsps / .missesps / .resetspsevent/second / hit/second / miss/second / event/secondДоступы к индексам в секунду: всего, попаданий, промахов, сбросов счётчиков (mmapv1)
mongodb_indexcounters_missratiofractionДоля промахов индексов (mmapv1)
mongodb_backgroundflushing_flushesps / .average_ms / .last_ms / .total_msflush/second / millisecondСбросы на диск в секунду / среднее / последнее / суммарное время (mmapv1, deprecated в 4.0)
mongodb_chunks_total / .jumboВсего чанков / jumbo-чанков в кластере (sharded; additional_metrics: [jumbo_chunks])
mongodb_sharded_data_distribution_num_owned_documents / .num_orphaned_docs / .owned_size_bytes / .orphaned_size_bytesdocument / byteРаспределение данных по шардам: «свои» и осиротевшие документы и их размер

Ключевые метрики для дашбордов и алертов

Доступность

  • Отсутствие свежих серий по server / hosts — алерт: узел MongoDB недоступен или агент не может подключиться (проверьте authSource, роли пользователя, сеть).
  • mongodb_uptime резко сбросился в маленькое значение — mongod перезапускался.

Нагрузка и пропускная способность

  • mongodb_opcounters_insertps / .queryps / .updateps / .deleteps / .commandps — базовый профиль нагрузки. Резкий рост commandps или падение всех до нуля — повод посмотреть.
  • mongodb_metrics_document_returnedps против mongodb_metrics_queryexecutor_scannedps — если просматривается на порядки больше, чем возвращается, не хватает индексов.
  • mongodb_metrics_operation_scanandorderps > 0 стабильно — сортировки без индекса.

Латентность

  • mongodb_oplatencies_reads_latency_avg / .writes.latency.avg / .commands.latency.avg — алерт по росту относительно базовой линии.
  • mongodb_collection_reads_latency_avg / .writes.latency.avg per collection — какая коллекция тормозит.

Соединения

  • mongodb_connections_current приближается к current + available (потолок) — скоро connection refused у клиентов.
  • Резкий рост mongodb_connections_totalcreated (rate) — connection storm, пул на стороне приложения не работает.

Память и кэш

  • mongodb_wiredtiger_cache_bytes_currently_in_cache против mongodb_wiredtiger_cache_maximum_bytes_configured — приближение к 95 % и рост mongodb_wiredtiger_cache_tracked_dirty_bytes_in_cache выше ~20 % → агрессивное вытеснение, деградация.
  • mongodb_wiredtiger_cache_pages_evicted_by_application_threadsps > 0 — прикладные потоки вынуждены сами вытеснять страницы (кэш под давлением).
  • mongodb_wiredtiger_concurrenttransactions_read_available / .write.available → 0 — тикеты кончились, операции встают в очередь.
  • mongodb_mem_resident против лимита контейнера (mongodb_system_mem_limit) — близко к лимиту → риск OOM-kill.
  • mongodb_extra_info_page_faultsps высокий — рабочий набор не помещается в RAM.

Локи / конфликты

  • mongodb_globallock_currentqueue_readers / .writers > 0 стабильно — операции ждут лока.
  • mongodb_metrics_operation_writeconflictsps высокий — частые конфликты записи (горячие документы).
  • mongodb_asserts_userps всплеск — много ошибок клиентских операций.

Репликация (replica set)

  • mongodb_replset_health == 0 для члена набора — узел down → алерт.
  • mongodb_replset_optime_lag (на primary) или mongodb_replset_replicationlag растёт — secondary отстаёт.
  • mongodb_replset_state сменился на не-primary/secondary (recovering, rollback, …) — нештатное состояние члена набора.
  • mongodb_oplog_timediff (окно oplog) сокращается — secondary рискует «выпасть» из репликации, нужен resync.

Хранилище

  • mongodb_stats_fsusedsize / mongodb_stats_fstotalsize per db — заполнение диска.
  • mongodb_stats_datasize / mongodb_stats_indexsize per db — рост данных и индексов; индексы крупнее данных = переиндексировано.
  • mongodb_collection_collectionscans_totalps > 0 стабильно для горячей коллекции — запросы без индекса.

Сбор логов MongoDB

Логи mongod / mongos собираются ProtoOBP агентом и отправляются в бэкенд ProtoOBP. Здесь — только специфичные для MongoDB настройки. Включение логов на стороне агента (logs_enabled, logs_pobp_url) описано в Получение данных логов.

Конфигурация ProtoOBP агента

Если агент запускается в виде службы на хосте

Дополните уже существующий /etc/protoobp-agent/conf.d/mongo.d/conf.yaml (тот же файл, в котором лежит instances: для метрик) блоком logs:.

logs:
  - type: file
    path: /var/log/mongodb/mongod.log
    source: mongo
    service: mongodb

/var/log/mongodb/mongod.log — стандартный путь при установке из пакета (параметр systemLog.path в /etc/mongod.conf). У агента должны быть права на чтение этого файла (пользователь pobp-agent — добавьте его в группу, которой принадлежит файл лога, обычно mongodb).

Перезапустите агента: systemctl restart protoobp-agent.

Если агент запускается в виде Docker контейнера

Шаг 1 — включите сбор логов в самом агенте через переменные окружения и смонтируйте директорию JSON-логов docker-демона:

services:
  protoobp-agent:
    environment:
      POBP_LOGS_ENABLED: "true"
      POBP_LOGS_CONFIG_USE_HTTP: "true"
      POBP_LOGS_CONFIG_LOGS_POBP_URL: <protoobp-backend>:<port>
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      # Прямое чтение JSON-лог файлов docker-демона быстрее,
      # чем тянуть их через Docker socket API.
      - /var/lib/docker/containers:/var/lib/docker/containers:ro

Шаг 2 — добавьте лейбл com.protoobp.ad.logs к контейнеру MongoDB. Образ mongo по умолчанию пишет лог в stdout, агент его подхватит и пометит записи указанными source и service:

services:
  mongodb:
    labels:
      com.protoobp.ad.logs: '[{"source": "mongo", "service": "mongodb"}]'

Проверка

В выводе agent status должен быть раздел Logs Agent со статусом running и источник mongo с ненулевым BytesRead:

docker exec protoobp-agent agent status \
  | sed -n '/^==== Logs Agent ====/,/^====/p'

Пример:

==========
Logs Agent
==========
    Reliable: Sending compressed logs in HTTPS to ... on port 443
    LogsProcessed: 13423
    LogsSent: 13401

  docker
  ------
    - Type: file
      Identifier: <container_id>
      Path: /var/lib/docker/containers/<container_id>/<container_id>-json.log
      Service: mongodb
      Source: mongo
      Status: OK
      BytesRead: 6.74e+06