Zabbix, мониторим MongoDB

в 8:31, , рубрики: linux, mongodb, zabbix, системное администрирование, метки: ,

Доброе время суток!
… заказчик востребовал мониторинг MongoDB. Покопавшись в просторах интернета, наткнулся на статью про онлайн систему мониторинга MongoDB (MMS), но данный вариант не совсем подходит так как: во первых данные статистики не должны уходит дальше своих серверов, во вторых в компании была поднята отличная на мой взгляд система мониторинга Zabbix. На оф сайте MobgoDB в разделе мониторинг и диагностика было упоминание за готовый плагин к Zabbix’у от Mikoomi «MongoDB Plugin». Было принято решение его и задействовать. Судя по комментариям заработал он у одного человека и действительно в процессе были некие трудности. Про те ошибки которые я увидел писал разработчику, но он не одно письмо не отреагировал.

Были замечены следующие неточности:

— не корректный подсчет количества БД (ошибка в php файле)
— в описании шаблона параметры съема статистики файлов журнала были, а в реальности нет (ошибка в шаблоне)

Journaling: Commits in last 1 Minute
Journaling: Commits in Writelocks in last 1 Minute
Journaling: Datafile Write Time (ms) in last 1 Minute
Journaling: Datafile Writes (MB) in last 1 Minute
Journaling: Early Commits in last 1 Minute
Journaling: Journal Write Time (ms) in last 1 Minute
Journaling: Journal Writes (MB) in last 1 Minute
Journaling: Log Buffer Prep Time (ms) in last 1 Minute

— не работали триггеры (тоже ошибка в шаблоне)
One or more databases have been created
One or more databases have been destroyed
One or more replication members need attention
One or more members have been removed from the ReplicaSet
One or more members have been added to the ReplicaSet
One or more new shard chunks have been created
One or more shards have been added to the cluster
One or more shards have been removed from the cluster
One or more new sharded collections have been created
One or more collections have been dropped
One or more collections have been added
One or more indexes have been dropped
One or more indexes have been added

Все поправлено, работает и протестировано.

Итак, что мы имеем:
Debian Squeeze
Zabbix 1.8.10
Mongodb-10gen
Установку ОС (операционной системы), СМ (системы мониторинга) и СУБД (система управления базами данных) MongoDB расматривать не буду так как это выходит за рамки данной статьи. Документации по установке и их настройке более чем достаточно.

Итак, вперед.
Вся установка происходит только на на сервера с СМ Zabbix. На сервере MongoDB только нужно открыть порт 27017.
Для работы плагина устанавливаем zabbix-agent, в который входит нужный нам zabbix sender.
sudo apt-get install zabbix-agent

Создадим каталог для ExternalScripts — размещение внешних скриптов:

sudo mkdir -p /etc/zabbix/externalscripts/

показываем заббиксу где у него обитают внешние скрипты, для этого ищем где у нас секция «ExternalScripts» и исправляем её к следующему виду (правим одну строчку):

sudo nano /etc/zabbix/zabbix_server.conf
### Option: ExternalScripts
# Location of external scripts
# Mandatory: no
# Default:
ExternalScripts=/etc/zabbix/externalscripts

Сам MongoDB плагин работает с помощью MongoDB PHP драйвера, который необходимо установить. Для этого будут нужны следующие пакеты:

sudo apt-get install php5-dev php-pear gcc make git

Теперь непосредственно установка самого MongoDB PHP драйвера:

sudo pecl install mongo

После успешной установки необходимо включить его. В php.ini ищем секцию "Dynamic Extensions" и добавляем туда одну строчку.
sudo find /etc/ -name "php.ini"
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini

В нашем случаи добавляем в оба найденных файла:
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=mongo.so

После редактирования, что бы изменения вступили в силу перезапускам веб сервер:

sudo apache2ctl -k graceful

Тестируем драйвер, для этого создадим файл c таким содержимым
nano ~/test.php

<?php
// connect
$m = new Mongo();
// select a database
$db = $m->comedy;
// select a collection (analogous to a relational database's table)
$collection = $db->cartoons;
// add a record
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);
// add another record, with a different "shape"
$obj = array( "title" => "XKCD", "online" => true );
$collection->insert($obj);
// find everything in the collection
$cursor = $collection->find();
// iterate through the results
foreach ($cursor as $obj) {
echo $obj["title"] . "n";
}
?>

запускаем тестовый скрипт
/usr/bin/php5 test.php

Если все работает, результат должен быть:
Calvin and Hobbes
XKCD

Заметка:

если БД не на локалхосте, то в тест скрипте строка подключения будет такой:
было
$m = new Mongo();
стало
$m = new Mongo( "example.com:27017" );

Качаем сам плагин (shell и php скрипты) и копируем файлы в нужную папку.
sudo cd ~ && git clone git://gist.github.com/2634051.git gist-2634051 && cp ~/gist-2634051/mikoomi-mongodb-plugin.* /etc/zabbix/externalscripts/

Делаем оба исполняемыми
sudo chmod 755 /etc/zabbix/externalscripts/mikoomi-mongodb-plugin.*

выставляем владельца
sudo chown -R zabbix:zabbix /etc/zabbix/externalscripts/

перезапускам zabbix сервер
sudo /etc/init.d/zabbix-server restart

Скачиваем шаблон для Zabbix от Miookomi. И уже с веб интерфейса СМ импортируем шаблон.

  • Настройки-Шаблоны
  • Жмем кнопку “Импорт шаблона” в правом верхнем углу.
  • Находим ранее скачаный шаблон.
  • Загружаем шаблон.

Подключаем MongoDB сервер к СМ

  • * Настройка — Узлы сети
  • * Жмем на кнопку в правом верхнем углу “Создать узел сети”
  • * Заполните необходимые параметры
  • * Нажимаем кнопку “Добавить” и указываем “Template_MongoDB”

В секции макросы добавляем три макроса (если коннект к БД без авторизации)
{$MONGODB_HOSTNAME} = Имя или IP адрес моного сервера
{$MONGODB_PORT} = Порт, по умолчанию 27017
{$MONGODB_ZABBIX_NAME} = Имя сервера монго (произвольно)

Если подключение с авторизацией то плюс еще два макроса
{$MONGODB_USER} = имя пользователя
{$MONGODB_PASS} = пароль

И в конце не забываем “Сохранить”.
Выглядит это должно примерно так:
image

Проверяем работу плагина
cd /etc/zabbix/externalscripts/
./mikoomi-mongodb-plugin.sh [-D -h 127.0.0.1 -p 27017 -z MongoDB_ZabbixN ]

если все в норме, в лог файле должно быть
tail -f /tmp/mikoomi-mongodb-plugin.php_MongoDB_ZabbixN.log

"response":"success",

"info":"Processed 66 Failed 5 Total 71 Seconds spent 0.000747"}]

Info from server: "Processed 66 Failed 5 Total 71 Seconds spent 0.000747"

sent: 71; skipped: 2; total: 73

Удаляем лог файл и файл с данными созданных не от пользователя zabbix
rm -rf /tmp/mikoomi-mongodb-plugin.php_MongoDB_ZabbixN.*

Ждем минуту и логи опять появляться, если там есть выше указанное, значит все заработало. Заходим в веб интерфейсе «Мониторинг» — «Последние данные» и любуемся результатом :)
По умолчанию шаблон состоит с:
13 групп (в которые входят 77 элементов данных)
14 триггеров
4 групп графиков

Примеры графиков

«Подсчет операций за последнюю минуту»
image

«Использование журнала»
image

Автор: freemanlutsk


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js