Плагин MongoDB
Мониторинг производительности базы данных MongoDB с подробными метриками, охватывающими соединения, операции, репликацию и хранилище.
Обзор
Плагин MongoDB собирает детальные метрики с серверов MongoDB, включая:
- Статистика соединений - Активные соединения, доступные соединения, лимиты соединений
- Счётчики операций - Вставки, запросы, обновления, удаления, getmore, команды
- Статус репликации - Здоровье replica set, лаг репликации, размер oplog
- Использование памяти - Резидентная память, виртуальная память, отображённая память
- Статистика хранилища - Размер данных, размер индексов, размер хранилища
- Статистика блокировок - Время глобальной блокировки, блокировки баз данных
- Сетевые метрики - Байты на входе/выходе, запросы в секунду
Требования
Версия MongoDB
- Минимум: MongoDB 4.0
- Рекомендуется: MongoDB 5.0 или новее
- Протестировано с: MongoDB 4.4, 5.0, 6.0, 7.0
Зависимости Python
pip install pymongo>=4.3.0
Устанавливается автоматически при использовании PLUGINS=mongodb во время установки агента.
Доступ к MongoDB
Агенту нужен доступ на чтение к статусу и статистике сервера MongoDB.
Конфигурация
Базовая конфигурация
plugins:
mongodb:
enabled: true
host: localhost
port: 27017
С аутентификацией
plugins:
mongodb:
enabled: true
host: localhost
port: 27017
username: monitor
password: your-secure-password
auth_database: admin
С Replica Set
plugins:
mongodb:
enabled: true
host: localhost
port: 27017
username: monitor
password: your-secure-password
auth_database: admin
replica_set: rs0
Все параметры конфигурации
plugins:
mongodb:
enabled: true # Enable/disable plugin
host: localhost # MongoDB host
port: 27017 # MongoDB port
username: monitor # Username (optional)
password: password # Password (optional)
auth_database: admin # Auth database (default: admin)
replica_set: rs0 # Replica set name (optional)
ssl: false # Use SSL/TLS (default: false)
ssl_ca_certs: /path/to/ca.pem # CA certificate path
timeout: 10 # Connection timeout (seconds)
Переменные окружения
Конфигурацию можно переопределить переменными окружения:
export MONGODB_HOST="localhost"
export MONGODB_PORT="27017"
export MONGODB_USERNAME="monitor"
export MONGODB_PASSWORD="password"
Настройка MongoDB
Создание пользователя мониторинга
Для MongoDB 4.x и 5.x:
use admin
db.createUser({
user: "monitor",
pwd: "your-secure-password",
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "read", db: "local" }
]
})
Для MongoDB 6.x и новее:
use admin
db.createUser({
user: "monitor",
pwd: passwordPrompt(), // Prompts for password securely
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "read", db: "local" }
]
})
Необходимые роли:
clusterMonitor- Чтение статуса и статистики в масштабе кластераreadдля базы данныхlocal- Чтение oplog для метрик репликации
Проверка прав пользователя
use admin
db.auth("monitor", "your-secure-password")
// Should succeed
db.serverStatus()
db.runCommand({ replSetGetStatus: 1 })
// Should list databases
db.adminCommand({ listDatabases: 1 })
Конфигурация MongoDB
Особая конфигурация MongoDB не требуется. Плагин использует стандартные команды мониторинга:
db.serverStatus()- Статистика сервераdb.replSetGetStatus()- Статус replica setdb.stats()- Статистика базы данных
Эти команды доступны по умолчанию во всех установках MongoDB.
Собираемые метрики
Метрики соединений
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
connections_current |
Текущее число открытых соединений | Количество | Gauge |
connections_available |
Доступные соединения | Количество | Gauge |
connections_total_created |
Всего когда-либо созданных соединений | Количество | Counter |
Счётчики операций
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
opcounters_insert |
Операции вставки | Количество | Counter |
opcounters_query |
Операции запроса | Количество | Counter |
opcounters_update |
Операции обновления | Количество | Counter |
opcounters_delete |
Операции удаления | Количество | Counter |
opcounters_getmore |
Операции getmore (курсор) | Количество | Counter |
opcounters_command |
Операции команд | Количество | Counter |
Метрики памяти
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
mem_resident_mb |
Резидентная память (RAM) | MB | Gauge |
mem_virtual_mb |
Виртуальная память | MB | Gauge |
Сетевые метрики
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
network_bytes_in |
Получено байт | Байты | Counter |
network_bytes_out |
Отправлено байт | Байты | Counter |
network_num_requests |
Сетевые запросы | Количество | Counter |
Метрики глобальной блокировки
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
globallock_queue_readers |
Читатели в очереди блокировок | Количество | Gauge |
globallock_queue_writers |
Писатели в очереди блокировок | Количество | Gauge |
globallock_active_readers |
Активные читатели | Количество | Gauge |
globallock_active_writers |
Активные писатели | Количество | Gauge |
Метрики кэша WiredTiger
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
wiredtiger_cache_bytes |
Текущий размер кэша | Байты | Gauge |
wiredtiger_cache_mb |
Текущий размер кэша | MB | Gauge |
wiredtiger_cache_max_bytes |
Максимальный размер кэша | Байты | Gauge |
wiredtiger_cache_pages_evicted |
Страницы, вытесненные потоками приложения | Количество | Counter |
wiredtiger_cache_dirty_bytes |
Отслеживаемые грязные байты в кэше | Байты | Gauge |
Метрики информации о сервере
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
version |
Версия сервера MongoDB | Строка | Info |
uptime_seconds |
Время работы сервера | Секунды | Counter |
Метрики дашборда
Дашборд StatusRadar отображает:
Карточка обзора
- Current Connections - Активные против доступных
- Operations/sec - Скорость операций в реальном времени
- Replication Lag - Для replica set
- Memory Usage - Резидентная память
График соединений
- Текущие соединения во времени
- Порог лимита соединений
- Оповещения о насыщении соединениями
График операций
- Операции в секунду по типам
- Разбивка insert/query/update/delete
- Скорость выполнения команд
График репликации
- Лаг репликации по участникам
- Утилизация oplog
- Статус здоровья replica set
График памяти
- Использование резидентной памяти
- Виртуальная память
- Page faults
График хранилища
- Рост размера данных
- Размер индексов
- Количество коллекций и документов
Установка
Быстрая установка
PLUGINS='mongodb' \
TOKEN='your-agent-token' \
MONGODB_USERNAME='monitor' \
MONGODB_PASSWORD='your-password' \
bash -c "$(curl -sL https://statusradar.dev/install-agent.sh)"
Установка на существующий агент
-
Установите зависимость Python:
cd /opt/statusradar source venv/bin/activate # If using venv pip install pymongo -
Включите плагин в конфигурации:
sudo nano /opt/statusradar/config/agent.yamlДобавьте:
plugins: mongodb: enabled: true host: localhost port: 27017 username: monitor password: your-secure-password -
Перезапустите агент:
sudo systemctl restart statusradar-agent -
Проверьте:
sudo journalctl -u statusradar-agent -n 50 --no-pager | grep mongodbОжидаемо:
INFO: Plugin mongodb: Metrics collected successfully INFO: Plugin mongodb: 25 metrics collected
Тестирование
Ручной тест плагина
cd /opt/statusradar
python3 plugins/mongodb_plugin.py
Ожидаемый вывод:
Plugin: mongodb
Enabled: True
Available: True
Collecting metrics...
{
"connections_current": 52,
"connections_available": 767,
"connections_total_created": 1234,
"opcounters_insert": 123456,
"opcounters_query": 789012,
"opcounters_update": 345678,
"mem_resident": 512,
"mem_virtual": 1024,
"data_size": 2048,
"index_size": 512,
"repl_lag": 0.5,
"repl_set_health": 1
}
Тест подключения к MongoDB
# Using mongo shell
mongo -u monitor -p your-password --authenticationDatabase admin
# Using mongosh (MongoDB 5.0+)
mongosh -u monitor -p your-password --authenticationDatabase admin
# Test serverStatus command
use admin
db.serverStatus()
Устранение неполадок
Плагин не собирает метрики
Проверка 1: Запущен ли MongoDB?
sudo systemctl status mongod
Проверка 2: Может ли агент подключиться к MongoDB?
mongo -u monitor -p password --authenticationDatabase admin --eval "db.serverStatus()"
Проверка 3: Установлен ли Python-пакет?
python3 -c "import pymongo; print(pymongo.__version__)"
Проверка 4: Проверьте логи агента
sudo journalctl -u statusradar-agent -n 100 --no-pager | grep mongodb
Распространённые ошибки
"Authentication failed"
Ошибка:
ERROR: Plugin mongodb: Authentication failed
Причины:
- Неверные имя пользователя/пароль
- Неверная база данных аутентификации
- У пользователя нет необходимых ролей
Решение:
// Verify user exists
use admin
db.getUser("monitor")
// Check user roles
db.getUser("monitor").roles
// Re-create user with correct roles
db.dropUser("monitor")
db.createUser({
user: "monitor",
pwd: "your-secure-password",
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "read", db: "local" }
]
})
"No module named 'pymongo'"
Ошибка:
ERROR: No module named 'pymongo'
Решение:
pip install pymongo
# Or if using venv:
cd /opt/statusradar && source venv/bin/activate && pip install pymongo
"Connection refused"
Ошибка:
ERROR: Plugin mongodb: Connection refused
Причины:
- MongoDB не запущен
- Неверный host/port
- Файрвол блокирует соединение
Решение:
# Check MongoDB is running
sudo systemctl status mongod
# Check MongoDB is listening
sudo netstat -tlnp | grep 27017
# Check bind address in MongoDB config
sudo grep bindIp /etc/mongod.conf
# If MongoDB only listens on 127.0.0.1, agent must run on same host
# Or configure MongoDB to bind to 0.0.0.0
"Command replSetGetStatus is not allowed"
Ошибка:
WARNING: Plugin mongodb: Cannot get replication status - not a replica set or insufficient permissions
Причина: MongoDB работает как standalone (не replica set)
Решение: Это предупреждение, а не ошибка. Для standalone-экземпляров метрики репликации не собираются. Все остальные метрики работают нормально.
"SSL/TLS error"
Ошибка:
ERROR: Plugin mongodb: SSL handshake failed
Решение:
Включите SSL в конфигурации:
plugins:
mongodb:
ssl: true
ssl_ca_certs: /path/to/ca.pem
Влияние на производительность
На MongoDB
Минимальное влияние:
- Плагин выполняет команды
serverStatus(),replSetGetStatus()иdbStats() - Это команды мониторинга только для чтения, специально для этого предназначенные
- Без операций записи и блокировок
- Незначительные накладные расходы на CPU/память
Бенчмарк:
- Накладные расходы MongoDB: < 0.1% CPU за сбор
- Нет измеримого падения производительности
- Безопасно запускать на продакшен-серверах
На агент
Использование ресурсов:
- Память: +20 MB
- CPU: +4% во время сбора
- Сеть: +3 KB за сбор
Время сбора: 0.5-2 секунды в зависимости от размера базы данных
Сценарии использования
1. Мониторинг пула соединений
Отслеживайте:
- Текущие соединения
- Доступные соединения
- Утилизацию соединений
Настройте оповещения на:
- Соединения > 80% от максимума
- Нет доступных соединений
- Быстрый рост соединений
2. Производительность операций
Отслеживайте:
- Операции в секунду
- Соотношение query и update
- Скорость выполнения команд
Настройте оповещения на:
- Внезапный скачок операций
- Высокую скорость удалений (потенциальная проблема)
- Сбои команд
3. Здоровье репликации
Отслеживайте:
- Лаг репликации
- Здоровье участников replica set
- Размер и утилизацию oplog
Настройте оповещения на:
- Лаг репликации > 10 секунд
- Падение участника replica set
- Oplog утилизирован > 90%
4. Использование памяти
Отслеживайте:
- Рост резидентной памяти
- Размер рабочего набора
- Page faults
Настройте оповещения на:
- Память > 80% ОЗУ сервера
- Высокую частоту page faults (рабочий набор не помещается в ОЗУ)
5. Рост хранилища
Отслеживайте:
- Скорость роста размера данных
- Соотношение размера индексов
- Количество коллекций
Настройте оповещения на:
- Быстрый рост данных
- Размер индексов > размера данных (избыточная индексация)
- Хранилище приближается к ёмкости диска
Лучшие практики
1. Используйте пользователя мониторинга только для чтения
Всегда создавайте выделенного пользователя мониторинга с минимальными правами:
db.createUser({
user: "monitor",
pwd: "secure-password",
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "read", db: "local" }
]
})
Преимущества:
- Изоляция безопасности
- Аудиторский след
- Отзываемый доступ
2. Мониторьте Replica Set
Для продакшен-MongoDB:
- Всегда используйте replica set (минимум 3 участника)
- Мониторьте лаг репликации на всех вторичных узлах
- Настройте оповещение на лаг > 10 секунд
3. Установите лимиты соединений
Настройте лимиты соединений MongoDB соответствующим образом:
# /etc/mongod.conf
net:
maxIncomingConnections: 1000
Формула:
maxConnections = (Application pool size × App instances) + 100 (overhead)
4. Мониторьте размер Oplog
Для replica set:
- Мониторьте утилизацию oplog
- Убедитесь, что oplog покрывает не менее 24 часов операций
- Увеличьте размер oplog, если утилизация > 80%
Проверьте часы oplog:
rs.printReplicationInfo()
5. Мониторинг индексов
- Следите за соотношением размера индексов (должно быть < размера данных)
- Проверяйте неиспользуемые индексы
- Настройте оповещение на отсутствующие индексы (высокое время запросов)
6. Регулярные резервные копии
Не полагайтесь только на репликацию:
- Планируйте ежедневные резервные копии
- Тестируйте процедуры восстановления
- Следите за завершением резервного копирования
Расширенная конфигурация
MongoDB Atlas
Для облака MongoDB Atlas:
plugins:
mongodb:
enabled: true
host: cluster0.example.mongodb.net
port: 27017
username: monitor
password: password
auth_database: admin
replica_set: atlas-abc123-shard-0
ssl: true
Шардированный кластер
Мониторьте роутер mongos:
plugins:
mongodb:
enabled: true
host: mongos.example.com
port: 27017
username: monitor
password: password
Мониторьте каждый шард отдельно, развернув агент на primary каждого шарда.
Docker-контейнер
Мониторинг MongoDB в Docker:
plugins:
mongodb:
enabled: true
host: mongodb-container-name # Docker container name
port: 27017
username: monitor
password: password
Или используйте host networking:
docker run --network host ...
Соображения безопасности
Безопасность паролей
Никогда не хардкодьте пароли:
# ✅ Good - environment variable
export MONGODB_PASSWORD="password"
# ❌ Bad - hardcoded in config
password: "my-password" # Visible in config file
Сетевая безопасность
Правила файрвола:
# Only allow agent host to connect
sudo ufw allow from <agent-ip> to any port 27017
sudo ufw deny 27017
Bind IP MongoDB:
# /etc/mongod.conf
net:
bindIp: 127.0.0.1,<private-ip> # Don't bind to 0.0.0.0 unless necessary
SSL/TLS
Для продакшена всегда используйте SSL:
plugins:
mongodb:
ssl: true
ssl_ca_certs: /etc/ssl/mongodb/ca.pem
Примеры конфигураций
Standalone разработка
plugins:
mongodb:
enabled: true
host: localhost
port: 27017
Продакшен Replica Set
plugins:
mongodb:
enabled: true
host: mongo-primary.internal
port: 27017
username: monitor
password: ${MONGODB_PASSWORD} # From environment
auth_database: admin
replica_set: rs0
ssl: true
ssl_ca_certs: /etc/ssl/certs/ca-bundle.crt
MongoDB Atlas
plugins:
mongodb:
enabled: true
host: cluster0.abc123.mongodb.net
port: 27017
username: monitor
password: ${MONGODB_PASSWORD}
auth_database: admin
replica_set: atlas-cluster0-shard-0
ssl: true
Docker Compose
plugins:
mongodb:
enabled: true
host: mongodb # Service name from docker-compose.yml
port: 27017
username: monitor
password: monitor-password
Ограничения
Текущие ограничения
- Нет метрик по отдельным базам данных - Собирает только общесерверные метрики
- Нет анализа медленных запросов - Используйте профайлер MongoDB для медленных запросов
- Нет метрик эффективности индексов - Мониторьте через планы
explain() - Нет метрик шардинга - Ограниченная видимость шардированного кластера
Масштабируемость
Протестировано с:
- Standalone-экземплярами до 1 ТБ
- Replica set с 7 участниками
- Базами данных с 1000+ коллекций
Производительность:
- Время сбора слегка растёт с размером базы данных
- Рекомендуется: < 10,000 коллекций для оптимальной производительности
Лучшие практики мониторинга
Ключевые метрики для наблюдения
Критические:
- Доступные соединения < 10
- Лаг репликации > 30 секунд
- Память > 90% ОЗУ
- Oplog заполнен > 95%
Важные: 5. Высокая частота сбоев команд 6. Медленные операции 7. Конкуренция за блокировки 8. Сетевые ошибки
Пороги оповещений
# Recommended alert thresholds
connections_available: < 50
replication_lag_seconds: > 10
memory_percent: > 85
oplog_percent: > 90
operations_per_second: > baseline + 3 std_dev
Устранение проблем с производительностью
Медленный сбор
Симптом: Сбор плагина занимает > 5 секунд
Решения:
-
Проверьте производительность MongoDB:
db.currentOp() // Check for slow operations db.serverStatus().opcounters // Check operation load -
Снизьте частоту мониторинга:
agent: interval: 600 # 10 minutes instead of 5 -
Проверьте сетевую задержку:
ping mongodb-host
Высокое использование памяти
Симптом: Агент использует чрезмерно много памяти с плагином MongoDB
Решение: Это нормально — pymongo кэширует пулы соединений. Использование памяти должно стабилизироваться после первоначального подключения.
Дальнейшие шаги
- Обзор
- Требования
- Версия MongoDB
- Зависимости Python
- Доступ к MongoDB
- Конфигурация
- Базовая конфигурация
- С аутентификацией
- С Replica Set
- Все параметры конфигурации
- Переменные окружения
- Настройка MongoDB
- Создание пользователя мониторинга
- Проверка прав пользователя
- Конфигурация MongoDB
- Собираемые метрики
- Метрики соединений
- Счётчики операций
- Метрики памяти
- Сетевые метрики
- Метрики глобальной блокировки
- Метрики кэша WiredTiger
- Метрики информации о сервере
- Метрики дашборда
- Карточка обзора
- График соединений
- График операций
- График репликации
- График памяти
- График хранилища
- Установка
- Быстрая установка
- Установка на существующий агент
- Тестирование
- Ручной тест плагина
- Тест подключения к MongoDB
- Устранение неполадок
- Плагин не собирает метрики
- Распространённые ошибки
- Влияние на производительность
- На MongoDB
- На агент
- Сценарии использования
- 1. Мониторинг пула соединений
- 2. Производительность операций
- 3. Здоровье репликации
- 4. Использование памяти
- 5. Рост хранилища
- Лучшие практики
- 1. Используйте пользователя мониторинга только для чтения
- 2. Мониторьте Replica Set
- 3. Установите лимиты соединений
- 4. Мониторьте размер Oplog
- 5. Мониторинг индексов
- 6. Регулярные резервные копии
- Расширенная конфигурация
- MongoDB Atlas
- Шардированный кластер
- Docker-контейнер
- Соображения безопасности
- Безопасность паролей
- Сетевая безопасность
- SSL/TLS
- Примеры конфигураций
- Standalone разработка
- Продакшен Replica Set
- MongoDB Atlas
- Docker Compose
- Ограничения
- Текущие ограничения
- Масштабируемость
- Лучшие практики мониторинга
- Ключевые метрики для наблюдения
- Пороги оповещений
- Устранение проблем с производительностью
- Медленный сбор
- Высокое использование памяти
- Дальнейшие шаги