Мониторинг MongoDB с помощью Proto Observability
На этой странице:
- Сбор метрик MongoDB
- Конфигурация MongoDB
- Конфигурация ProtoOBP агента
- Проверка
- Собираемые метрики
- Лейблы
- Операции (opcounters)
- Соединения
- Документы и операции (metrics.document / metrics.operation)
- Латентность операций (oplatencies)
- Память (mem / extra_info / tcmalloc)
- Сеть
- Ассерты
- WiredTiger
- Курсоры
- Команды (metrics.commands)
- Локи и глобальный лок (locks / globallock)
- Журналирование (dur)
- Уровень базы данных (dbStats)
- Уровень коллекции (collStats / top)
- Репликация (replset / opcountersrepl / oplog)
- Прочее
- Ключевые метрики для дашбордов и алертов
- Сбор логов MongoDB
Сбор метрик 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@admin—replSetGetStatus,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"
Топология
- Standalone — один instance проверки на узел
mongod. - Replica set — по одному instance на каждый узел
mongod(нужно для репликационных метрик и событий). Не указывайте параметрreplSetв опциях соединения — агент должен всегда подключаться к одному и тому же хосту. - Sharded cluster — по одному instance на каждый
mongodкаждого шарда (включая configsvr) плюс один instance наmongos.
Конфигурация ProtoOBP агента
Если агент запускается в виде службы на хосте
Создайте файл
/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Перезапустите агента:
systemctl restart protoobp-agent.
`authSource`
Если пользовательprotoobp создан в базе admin (как в примере выше), а
метрики читаются из другой базы (database:), обязательно укажите
options.authSource: admin. Без этого агент попытается аутентифицироваться в
базе из database: и получит Authentication failed.Если агент запускается в виде 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 network, что и MongoDB. Также агенту нужен смонтированный/var/run/docker.sock:/var/run/docker.sock:ro
для autodiscovery контейнеров. Суффикс -jmx для mongo не нужен.Проверка
Убедитесь, что проверка запустилась и собирает метрики:
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 | все метрики — адрес узла MongoDB | mongodb: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 | тег env | development |
docker_image / image_name / image_tag / short_image | при запуске в контейнере | mongo:7 / mongo / 7 / mongo |
Плюс любые теги из tags: в конфиге instance (например, mongo_role:standalone).
Операции (opcounters)
Скорость операций, которые получил этот узел напрямую от клиентов.
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_opcounters_insertps | operation/second | Вставки в секунду |
mongodb_opcounters_queryps | query/second | Запросы (find) в секунду |
mongodb_opcounters_updateps | operation/second | Обновления в секунду |
mongodb_opcounters_deleteps | operation/second | Удаления в секунду |
mongodb_opcounters_getmoreps | operation/second | getmore в секунду (дочитывание курсоров) |
mongodb_opcounters_commandps | command/second | Команды БД в секунду |
Соединения
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_connections_current | connection | Текущее число клиентских соединений |
mongodb_connections_available | connection | Сколько ещё входящих соединений может принять сервер |
mongodb_connections_totalcreated | connection | Всего соединений создано с момента старта |
mongodb_connection_pool_totalinuse | connection | Исходящие соединения к другим узлам кластера, занятые сейчас (mongos/mongod в кластере) |
mongodb_connection_pool_totalavailable | connection | Доступные исходящие соединения к узлам кластера |
mongodb_connection_pool_totalcreatedps | connection/second | Создание исходящих соединений к узлам кластера в секунду |
mongodb_connection_pool_totalrefreshing | connection | Исходящие соединения в процессе обновления |
mongodb_connection_pool_numclientconnections | connection | Активные/сохранённые исходящие синхронные соединения от mongos |
mongodb_connection_pool_numascopedconnections | connection | Активные/сохранённые scoped-соединения от mongos |
Документы и операции (metrics.document / metrics.operation)
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_metrics_document_insertedps | document/second | Вставлено документов в секунду |
mongodb_metrics_document_updatedps | document/second | Обновлено документов в секунду |
mongodb_metrics_document_deletedps | document/second | Удалено документов в секунду |
mongodb_metrics_document_returnedps | document/second | Возвращено документов запросами в секунду |
mongodb_metrics_queryexecutor_scannedps | operation/second | Просмотрено элементов индекса в секунду (queries + оценка планов) |
mongodb_metrics_queryexecutor_scannedobjectsps | operation/second | Просмотрено документов в секунду |
mongodb_metrics_operation_scanandorderps | query/second | Запросы в секунду с сортировкой без подходящего индекса |
mongodb_metrics_operation_idhackps | query/second | Запросы в секунду по полю _id |
mongodb_metrics_operation_fastmodps | operation/second | Update’ы в секунду, не меняющие размер документа и не трогающие индексы |
mongodb_metrics_operation_writeconflictsps | event/second | Конфликты записи в секунду (WiredTiger optimistic concurrency) |
mongodb_metrics_query_sort_spilltodiskps | operation/second | Сбросов сортировки на диск в секунду (MongoDB 6.2+) |
mongodb_metrics_query_sort_totalkeyssortedps | key/second | Ключей просортировано в секунду (MongoDB 6.2+) |
mongodb_metrics_query_sort_totalbytessortedps | byte/second | Байт просортировано в секунду (MongoDB 6.2+) |
mongodb_metrics_query_plancache_classic_hitsps / .missesps | operation/second | Попадания/промахи classic plan cache в секунду (MongoDB 7.0+) |
mongodb_metrics_query_plancache_sbe_hitsps / .missesps | operation/second | Попадания/промахи SBE plan cache в секунду (MongoDB 7.0+) |
mongodb_metrics_record_movesps | operation/second | Перемещений документов на диске в секунду |
mongodb_metrics_ttl_deleteddocumentsps | document/second | Документов удалено TTL-индексами в секунду |
mongodb_metrics_ttl_passesps | operation/second | Проходов фонового TTL-процесса в секунду |
mongodb_metrics_cursor_open_total | cursor | Открытых курсоров всего |
mongodb_metrics_cursor_open_pinned | cursor | Закреплённых открытых курсоров |
mongodb_metrics_cursor_open_notimeout | cursor | Открытых курсоров с noTimeout |
mongodb_metrics_cursor_timedoutps | cursor/second | Курсоров истекло по таймауту в секунду |
mongodb_metrics_getlasterror_wtime_numps | operation/second | getLastError с write concern в секунду |
mongodb_metrics_getlasterror_wtimeoutsps | event/second | Таймаутов write concern в секунду |
Латентность операций (oplatencies)
Из serverStatus().opLatencies — суммарная и средняя латентность по типам операций.
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_oplatencies_reads_latency | microsecond | Суммарная латентность чтений |
mongodb_oplatencies_reads_latency_avg | microsecond | Средняя латентность чтения |
mongodb_oplatencies_writes_latency | microsecond | Суммарная латентность записей |
mongodb_oplatencies_writes_latency_avg | microsecond | Средняя латентность записи |
mongodb_oplatencies_commands_latency | microsecond | Суммарная латентность команд |
mongodb_oplatencies_commands_latency_avg | microsecond | Средняя латентность команды |
Память (mem / extra_info / tcmalloc)
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_mem_resident | mebibyte | RSS процесса mongod |
mongodb_mem_virtual | mebibyte | Виртуальная память процесса mongod |
mongodb_mem_mapped | mebibyte | Размер mapped-памяти (storage engine со mmap) |
mongodb_mem_mappedwithjournal | mebibyte | Mapped-память включая журнал |
mongodb_mem_bits | mebibyte | Разрядность storage engine |
mongodb_extra_info_heap_usage_bytesps | byte/second | Использование heap процессом БД (Unix/Linux) |
mongodb_extra_info_page_faultsps | fault/second | Page faults в секунду, требующие операций с диском |
mongodb_system_cpu_percent | percent | Загрузка CPU процессом MongoDB (только self-hosted на хосте агента) |
mongodb_system_cpu_cores | core | Доступно логических ядер |
mongodb_system_mem_total / mongodb_system_mem_limit | megabyte | Всего RAM / лимит RAM (например, в контейнере) |
mongodb_tcmalloc_generic_current_allocated_bytes | byte | Байт памяти, используемой приложением (нужен additional_metrics: [tcmalloc]) |
mongodb_tcmalloc_generic_heap_size | byte | Байт системной памяти, зарезервированной TCMalloc |
mongodb_tcmalloc_tcmalloc_pageheap_free_bytes | byte | Байт в свободных mapped-страницах page heap |
mongodb_tcmalloc_tcmalloc_pageheap_unmapped_bytes | byte | Байт в свободных unmapped-страницах page heap |
mongodb_tcmalloc_tcmalloc_current_total_thread_cache_bytes | byte | Байт во всех thread-кэшах |
mongodb_tcmalloc_tcmalloc_central_cache_free_bytes | byte | Свободных байт в central cache |
mongodb_tcmalloc_tcmalloc_transfer_cache_free_bytes | byte | Свободных байт в transfer cache |
mongodb_tcmalloc_tcmalloc_thread_cache_free_bytes | byte | Свободных байт в thread-кэшах |
mongodb_tcmalloc_tcmalloc_max_total_thread_cache_bytes | byte | Верхний лимит на все thread-кэши |
mongodb_tcmalloc_tcmalloc_spinlock_total_delay_ns | nanosecond | Суммарное время задержек на spinlock’ах |
mongodb_tcmalloc_tcmalloc_aggressive_memory_decommit | — | Статус режима aggressive memory decommit |
Сеть
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_network_bytesinps | byte/second | Входящий сетевой трафик БД |
mongodb_network_bytesoutps | byte/second | Исходящий сетевой трафик БД |
mongodb_network_numrequestsps | request/second | Количество отдельных запросов к серверу в секунду |
Ассерты
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_asserts_regularps | assertion/second | Обычные ассерты в секунду |
mongodb_asserts_warningps | assertion/second | Предупреждения в секунду |
mongodb_asserts_msgps | assertion/second | Message-ассерты в секунду |
mongodb_asserts_userps | assertion/second | Пользовательские ассерты в секунду (ошибки клиентских операций) |
mongodb_asserts_rolloversps | assertion/second | Переполнений счётчиков ассертов в секунду |
WiredTiger
Метрики storage engine WiredTiger — кэш и concurrency tickets.
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_wiredtiger_cache_bytes_currently_in_cache | byte | Размер данных, находящихся сейчас в кэше |
mongodb_wiredtiger_cache_maximum_bytes_configured | byte | Максимальный размер кэша |
mongodb_wiredtiger_cache_tracked_dirty_bytes_in_cache | byte | Размер «грязных» данных в кэше |
mongodb_wiredtiger_cache_bytes_read_into_cache | byte | Прочитано байт в кэш |
mongodb_wiredtiger_cache_bytes_written_from_cache | byte | Записано байт из кэша |
mongodb_wiredtiger_cache_pages_currently_held_in_cache | page | Страниц сейчас в кэше |
mongodb_wiredtiger_cache_pages_read_into_cache | page | Прочитано страниц в кэш |
mongodb_wiredtiger_cache_pages_written_from_cache | page | Записано страниц из кэша |
mongodb_wiredtiger_cache_pages_requested_from_cache | page | Запрошено страниц из кэша |
mongodb_wiredtiger_cache_modified_pages_evicted / .unmodified_pages_evicted | page | Вытеснено изменённых / неизменённых страниц |
mongodb_wiredtiger_cache_pages_evicted_by_application_threadsps | page/second | Страниц вытеснено прикладными потоками в секунду |
mongodb_wiredtiger_cache_pages_evicted_exceeding_the_in_memory_maximumps | page/second | Страниц вытеснено из-за превышения in-memory maximum в секунду |
mongodb_wiredtiger_cache_failed_eviction_of_pages_exceeding_the_in_memory_maximumps | page/second | Неудачных вытеснений таких страниц в секунду |
mongodb_wiredtiger_cache_in_memory_page_splits | split | Разбиений страниц в памяти |
mongodb_wiredtiger_cache_maximum_page_size_at_eviction | byte | Максимальный размер страницы при вытеснении |
mongodb_wiredtiger_concurrenttransactions_read_out / .write.out | ticket | Используется read- / write-тикетов (одновременных транзакций) |
mongodb_wiredtiger_concurrenttransactions_read_available / .write.available | ticket | Свободных read- / write-тикетов |
mongodb_wiredtiger_concurrenttransactions_read_totaltickets / .write.totaltickets | ticket | Всего read- / write-тикетов |
Курсоры
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_cursors_totalopen | cursor | Открытых курсоров, обслуживаемых для клиентов |
mongodb_cursors_timedout | cursor | Всего курсоров истекло по таймауту с момента старта |
Команды (metrics.commands)
Собираются при additional_metrics: [metrics.commands]. Для каждой команды —
сколько раз выполнена (total) и сколько раз упала в секунду (failedps):
count, insert, update, delete, findandmodify, createindexes, eval.
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_metrics_commands_<cmd>_total | command | Сколько раз команда <cmd> выполнена |
mongodb_metrics_commands_<cmd>_failedps | command/second | Сколько раз команда <cmd> упала в секунду |
Локи и глобальный лок (locks / globallock)
mongodb_globallock_* — состояние очереди и активных клиентов на чтение/запись:
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_globallock_currentqueue_total | operation | Операций в очереди на глобальный лок |
mongodb_globallock_currentqueue_readers / .writers | operation | Операций в очереди на чтение / запись |
mongodb_globallock_activeclients_total | connection | Активных клиентских соединений |
mongodb_globallock_activeclients_readers / .writers | connection | Активных клиентов на чтение / запись |
mongodb_globallock_totaltime | microsecond | Время с создания глобального лока |
mongodb_globallock_locktime | millisecond | Время удержания глобального лока с момента старта |
mongodb_globallock_ratio | fraction | Доля времени удержания глобального лока (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_commits | transaction | Транзакций записано в журнал за последний group-commit |
mongodb_dur_commitsinwritelock | commit | Коммитов, выполненных под write-локом |
mongodb_dur_earlycommits | commit | Преждевременных коммитов журнала |
mongodb_dur_journaledmb | mebibyte | Записано в журнал за последний group-commit |
mongodb_dur_writetodatafilesmb | mebibyte | Записано из журнала в файлы данных за последний group-commit |
mongodb_dur_compression | fraction | Степень сжатия данных, записываемых в журнал |
mongodb_dur_timems_writetojournal | millisecond | Время записи в журнал |
mongodb_dur_timems_writetodatafiles | millisecond | Время записи в файлы данных после журналирования |
mongodb_dur_timems_commits | millisecond | Время на коммиты |
mongodb_dur_timems_commitsinwritelock | millisecond | Время на коммиты под write-локом |
mongodb_dur_timems_preplogbuffer | millisecond | Время подготовки записи в журнал |
mongodb_dur_timems_remapprivateview | millisecond | Время remap copy-on-write memory mapped views |
mongodb_dur_timems_dt | millisecond | Интервал, за который собраны dur.timeMS |
Уровень базы данных (dbStats)
Несут лейбл db:<имя_базы>. Базы выбираются параметром dbnames: (по
умолчанию — все).
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_stats_collections | — | Число коллекций в базе |
mongodb_stats_views | — | Число view в базе |
mongodb_stats_indexes | index | Число индексов по всем коллекциям базы |
mongodb_stats_objects | object | Число документов по всем коллекциям базы |
mongodb_stats_avgobjsize | byte | Средний размер документа |
mongodb_stats_datasize | byte | Размер данных базы (с учётом padding) |
mongodb_stats_storagesize | byte | Выделено места под хранение документов |
mongodb_stats_indexsize | byte | Размер всех индексов базы |
mongodb_stats_totalsize | byte | Всего выделено диска под документы и индексы (used + free) |
mongodb_stats_freestoragesize | byte | Свободно места, выделенного коллекциям под документы |
mongodb_stats_indexfreestoragesize | byte | Свободно места, выделенного под индексы |
mongodb_stats_totalfreestoragesize | byte | Всего свободного выделенного места (документы + индексы) |
mongodb_stats_fstotalsize | byte | Всего ёмкости ФС, где лежат данные MongoDB |
mongodb_stats_fsusedsize | byte | Занято на ФС, где лежат данные MongoDB |
mongodb_stats_filesize | byte | Размер файлов данных (только mmapv1) |
mongodb_stats_numextents | — | Число extents в базе (mmapv1) |
mongodb_dbs | item | Всего существующих баз на сервере |
Уровень коллекции (collStats / top)
Собираются при additional_metrics: [collection] для коллекций из списка
collections:. Несут лейблы db:<база> и collection:<имя>. Каждая коллекция
добавляет ~8 + (число индексов) серий.
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_collection_count | item | Число документов в коллекции |
mongodb_collection_size | byte | Несжатый размер всех документов коллекции в памяти |
mongodb_collection_storagesize | byte | Выделено места под хранение документов коллекции |
mongodb_collection_avgobjsize | byte | Средний размер документа в коллекции |
mongodb_collection_nindexes | index | Число индексов на коллекции |
mongodb_collection_totalindexsize | byte | Суммарный размер всех индексов коллекции |
mongodb_collection_indexsizes | byte | Размер индекса (по индексу; тег index_name) |
mongodb_collection_capped | record | 1, если коллекция capped |
mongodb_collection_max | document | Максимум документов в capped-коллекции |
mongodb_collection_maxsize | byte | Максимальный размер capped-коллекции |
mongodb_collection_indexes_accesses_ops / .opsps | event / event/second | Сколько раз использован индекс (всего / в секунду; нужен collections_indexes_stats: true) |
mongodb_collection_collectionscans_total / .totalps | scan / scan/second | Полных сканирований коллекции (всего / в секунду) |
mongodb_collection_collectionscans_nontailable / .nontailableps | scan / scan/second | Сканирований без tailable-курсора |
mongodb_collection_reads_opsps / .reads.latency / .reads.latency.avg | operation/second / microsecond | Чтения: rate, суммарная и средняя латентность |
mongodb_collection_writes_opsps / .writes.latency / .writes.latency.avg | operation/second / microsecond | Записи: rate, суммарная и средняя латентность |
mongodb_collection_commands_opsps / .commands.latency / .commands.latency.avg | operation/second / microsecond | Команды: rate, суммарная и средняя латентность |
mongodb_collection_transactions_opsps / .transactions.latency / .transactions.latency.avg | operation/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_replicationlag | second | Лаг репликации, вычисленный на каждом узле (тег host) |
mongodb_replset_optime_lag | second | Лаг репликации, вычисленный на primary (тег member) — точнее, рекомендуется для алертов |
mongodb_replset_votes / .votefraction | item / fraction | Сколько голосов отдаёт узел на выборах / доля голосов |
mongodb_opcountersrepl_insertps / .updateps / .deleteps / .queryps / .getmoreps / .commandps | operation/second / query/second / command/second | Реплицированные операции в секунду (применённые из oplog) |
mongodb_oplog_logsizemb | mebibyte | Сконфигурированный размер oplog |
mongodb_oplog_usedsizemb | mebibyte | Занято в oplog |
mongodb_oplog_timediff | second | Окно oplog: разница между первой и последней операцией в oplog |
mongodb_metrics_repl_apply_opsps | operation/second | Применено операций из oplog в секунду |
mongodb_metrics_repl_apply_batches_numps / .totalmillisps | operation/second / fraction | Батчей применено в секунду / доля времени на применение oplog |
mongodb_metrics_repl_buffer_count / .sizebytes / .maxsizebytes | operation / byte | Операций в oplog-буфере / текущий и максимальный размер буфера |
mongodb_metrics_repl_network_bytesps / .opsps / .readerscreatedps | byte/second / operation/second / process/second | Чтение из источника репликации: байт, операций, создано reader-процессов в секунду |
mongodb_metrics_repl_network_getmores_numps / .totalmillisps | operation/second / fraction | getmore к источнику в секунду / доля времени на сбор данных |
Прочее
| Имя метрики | Единица | Описание |
|---|---|---|
mongodb_uptime | second | Сколько секунд процесс mongod / mongos работает |
mongodb_sessions_count | session | Число активных сессий всех пользователей |
mongodb_fsynclocked | — | 1, если база заблокирована fsyncLock, иначе 0 |
mongodb_indexcounters_accessesps / .hitsps / .missesps / .resetsps | event/second / hit/second / miss/second / event/second | Доступы к индексам в секунду: всего, попаданий, промахов, сбросов счётчиков (mmapv1) |
mongodb_indexcounters_missratio | fraction | Доля промахов индексов (mmapv1) |
mongodb_backgroundflushing_flushesps / .average_ms / .last_ms / .total_ms | flush/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_bytes | document / 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.avgpercollection— какая коллекция тормозит.
Соединения
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_fstotalsizeperdb— заполнение диска.mongodb_stats_datasize/mongodb_stats_indexsizeperdb— рост данных и индексов; индексы крупнее данных = переиндексировано.mongodb_collection_collectionscans_totalps > 0стабильно для горячей коллекции — запросы без индекса.
Сбор логов MongoDB
Логи mongod / mongos собираются ProtoOBP агентом и отправляются в бэкенд
ProtoOBP. Здесь — только специфичные для MongoDB настройки. Включение логов на
стороне агента (logs_enabled, logs_pobp_url) описано в
Получение данных логов.
Формат лога MongoDB
MongoDB 4.4 и новее пишет лог в виде структурированного JSON — по одному полному объекту на строку:
{"t":{"$date":"2026-05-12T10:00:00.123+00:00"},"s":"I","c":"NETWORK","id":22943,"ctx":"listener","msg":"Connection accepted","attr":{"remote":"172.18.0.4:42130","connectionId":12,"connectionCount":3}}
Многострочных записей в этом формате нет, поэтому правило log_processing_rules
с type: multi_line не требуется и его не нужно добавлять. Указывайте
source: mongo — по этому источнику бэкенд применит парсер MongoDB JSON и
разложит запись на поля (s → severity, c → компонент, msg → текст,
attr.* → атрибуты).
На старых версиях (≤ 4.2) лог был «плоский», вида
2026-05-12T10:00:00.123+0000 I NETWORK [listener] … — там при желании можно
добавить multi_line с якорем \d{4}-\d{2}-\d{2}, но для MongoDB 4.4+ это не
нужно.
Конфигурация 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"}]'
Только нужные контейнеры
Если в агенте не задана переменнаяPOBP_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true,
агент собирает логи только тех контейнеров, на которых есть лейбл
com.protoobp.ad.logs.Проверка
В выводе 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
Обратите внимание
Для отображения нового хоста СУБД следует обновить страницу браузера целиком (кнопкаОбновить в правом верхнем углу веб-консоли обновляет только значения метрик на дашборде, но не список серверов).