Итак 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/
Добавить комментарий