- PVSM.RU - https://www.pvsm.ru -

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

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

Итак Ganglia – это система мониторинга с открытым исходным кодом, спроектированная для работы с тысячами узлов, изначально разрабатывавшаяся в университете Berkeley. Ganglia проста в установке и использовании. Отличительной ее особенностью является высокая гибкость и масштабируемость. Поскольку настройка и установка ganglia выходят за рамки данной статьи, можно почитать об этом здесь [5]. Так же добавлю, что в отличии от cacti, ganglia продолжает собирать данные о системе, даже если произошло отключение от сети. Так что когда сервер снова появится в сети он передаст все накопленные данные и в графиках метрик не будет разрывов.
О установке и настройке Nagios, а так же его интеграциии с Ganglia можно почитать здесь [6].
Используя данные материалы уже можно настроить Ganglia и научить Nagios его мониторить, но в реальной жизни мы сталкиваемся с более сложными ситуациями вида: нужно мониторить сервер во внутренней локальной сети, передавать метрики по защищенному каналу и многое другое. Для решения подобных вещей существует nrpe (более подробно можно прочесть тут [7]).
Собственно отсюда и начинается суть данной статьи. Ситуация: удаленный сервер в локальной сети, установлена Ganglia, сервер в рабочей сети с установленным Nagios. Задача: отслеживать удаленную систему.
Сначала займемся установкой всего нужного на удаленный сервер.
Первым делом устанавливаем плагин для ganglia check_ganglia_metric [8]. Действуем по инструкции, проверяем работоспособность плагина.
Затем устанавливаем 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 [9] Joka [10]
Вот собственно сам код, написан на 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.
Надеюсь, это будет полезно и сэкономит время и кофе при настройке систем мониторинга на боевых серверах.

Автор: wizp

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/sistemnoe-administrirovanie/25106

Ссылки в тексте:

[1] Nagios: http://ru.wikipedia.org/wiki/Nagios

[2] Cacti: http://ru.wikipedia.org/wiki/Cacti

[3] Zabbix: http://ru.wikipedia.org/wiki/Zabbix

[4] Ganglia : http://ru.wikipedia.org/wiki/Ganglia

[5] здесь: http://www.ibm.com/developerworks/ru/library/l-ganglia-nagios-1/index.html

[6] здесь: http://www.ibm.com/developerworks/ru/library/l-ganglia-nagios-2/

[7] тут: http://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&ved=0CD4QFjAC&url=http%3A%2F%2Fnagios.sourceforge.net%2Fdocs%2Fnrpe%2FNRPE.pdf&ei=O9D3UOqeI6Gm4ASYrYG4Dg&usg=AFQjCNGYpmjIaMBRWQWzjMSmZZ_Zl_BgLA&bvm=bv.41018144,d.bGE

[8] check_ganglia_metric: http://pypi.python.org/pypi/check_ganglia_metric/

[9] Пишем свой плагин для nagios: http://habrahabr.ru/post/61430/

[10] Joka: http://habrahabr.ru/users/joka/

[11] Источник: http://habrahabr.ru/post/166171/