Ganglia и Nagios. Взаимодополняющий удаленный мониторинг

от автора

Все системные администраторы рано или поздно сталкиваются с проблемой мониторинга рабочих серверов. Для решения этой проблемы существует целый зоопарк разнообразных путей. Весьма популярной системой является Nagios из-за своего мощного механизма оповещений. Так же, часто используются системы больше сконцентрированные на сборе значений различных параметров, и отслеживании этих изменений с течением времени для сбора статистики, такие как: Cacti, Zabbix, Ganglia . Причем Ganglia незаслуженно обделена вниманием Хабрасообщества. В этом топике я постараюсь исправить этот недостаток, и показать насколько это гибкий и полезный инструмент.


Итак Ganglia – это система мониторинга с открытым исходным кодом, спроектированная для работы с тысячами узлов, изначально разрабатывавшаяся в университете Berkeley. Ganglia проста в установке и использовании. Отличительной ее особенностью является высокая гибкость и масштабируемость. Поскольку настройка и установка ganglia выходят за рамки данной статьи, можно почитать об этом здесь. Так же добавлю, что в отличии от cacti, ganglia продолжает собирать данные о системе, даже если произошло отключение от сети. Так что когда сервер снова появится в сети он передаст все накопленные данные и в графиках метрик не будет разрывов.
О установке и настройке Nagios, а так же его интеграциии с Ganglia можно почитать здесь.
Используя данные материалы уже можно настроить Ganglia и научить Nagios его мониторить, но в реальной жизни мы сталкиваемся с более сложными ситуациями вида: нужно мониторить сервер во внутренней локальной сети, передавать метрики по защищенному каналу и многое другое. Для решения подобных вещей существует nrpe (более подробно можно прочесть тут).
Собственно отсюда и начинается суть данной статьи. Ситуация: удаленный сервер в локальной сети, установлена Ganglia, сервер в рабочей сети с установленным Nagios. Задача: отслеживать удаленную систему.
Сначала займемся установкой всего нужного на удаленный сервер.
Первым делом устанавливаем плагин для ganglia check_ganglia_metric. Действуем по инструкции, проверяем работоспособность плагина.
Затем устанавливаем nagios-nrpe-server:

sudo aptitude install nagios-nrpe-server 

далее идем в конфиг:

sudo nano /etc/nrpe.cfg 

исправляем строки:

доверенные хосты: allowed_hosts = <your nagios adress> разрешение передавать аргументы в плагины: dont_blame_nrpe = 1 в конце конфига список выполняемых скриптов: command[some_name] = path args прописываем сюда путь к check_ganglia_metric ommand[check_ganglia_metric] = check_ganglia_metric.py --gmetad_host=your_host --metric_host=metric_host_you_neded --metric_name=$ARG1$ --warning=$ARG2$ --critical=$ARG3$ 

Сохраняем и перезапускаем плагин:

sudo /etc/init.d/nagios-nrpe-server restart 

Теперь идем на наш сервер донастраивать Nagios (вы ведь уже настроили его используя ссылки выше ):
Добавляем в сервисы:

define service{                     use    generic-service                     host_name   your_remote_host                     service_description   remote_ganglia_checking                     check_command   check_nrpe!check_ganglia_metric!$ARG1$  $ARG2$ $ARG3$ } 

Перезапускаем Nagios, и видим, что он выставил состояние Warning для нашей метрики, а так же говорит, что не может распознать ответ. Ну что же — достаем напильник. 😉
Нам нужен скрипт запускающий check_ganglia_metric.py.
Как писать плагины для Nagios есть здесь: Пишем свой плагин для nagios Joka
Вот собственно сам код, написан на Python:

Исходный код плагина

!/usr/bin/python2.6 # -*- coding: utf-8 -*-  import sys import subprocess import shlex  if len(sys.argv) < 5:     print("wrong config data")     sys.exit(3)  argGmetadHost = str(sys.argv[1]) argMetricHost = str(sys.argv[2]) argMetricName = str(sys.argv[3]) argWarning = str(sys.argv[4]) argCritical = str(sys.argv[5]) command_line = "".join(['sudo check_ganglia_metric.py --gmetad_host=', argGmetadHost, ' --metric_host=', argMetricHost, ' --metric_name=', argMetricName, ' --warning=', argWarning, ' --critical=', argCritical]) args = shlex.split(command_line) p = subprocess.call(args) 

Скрипт check_ganglia_metric.py во время выполнения создает файл check_ganglia_metric.cache. При запуске с правами пользователя Nagios он пытается создать этот файл в директории принадлежащей root.
Появляется проблема, что для запуска check_ganglia_metric.py пользователем Nagios ему нужны root права — это совсем нехорошо. Но ведь мы можем дать ему возможность запускать только этот скрипт:

sudo nano /etc/sudousers  

 nagios ALL=(ALL) NOPASSWD: /usr/local/bin/check_ganglia_metric.py 

Снова правим конфиг nrpe:
Добавляем наш плагин в разрешенные к исполнению:

сommand[check_ganglia] =/usr/lib/nagios/plugins/ganglia_support.py $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$ 

Сохраняем, перезапускаем.
Опять правим конфигурацию Nagios:

define service{                     use    generic-service                     host_name   your_remote_host                     service_description   remote_ganglia_checking                     check_command   check_nrpe!check_ganglia!$ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$ } 

Сохраняем, перезапускам. Все, теперь работает.
Все пути и команды выполнялись под Debian.
Надеюсь, это будет полезно и сэкономит время и кофе при настройке систем мониторинга на боевых серверах.

ссылка на оригинал статьи http://habrahabr.ru/post/166171/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *