Все системные администраторы рано или поздно сталкиваются с проблемой мониторинга рабочих серверов. Для решения этой проблемы существует целый зоопарк разнообразных путей. Весьма популярной системой является 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.
Надеюсь, это будет полезно и сэкономит время и кофе при настройке систем мониторинга на боевых серверах.
Автор: wizp