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

в 6:24, , рубрики: 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.
Надеюсь, это будет полезно и сэкономит время и кофе при настройке систем мониторинга на боевых серверах.

Автор: wizp

Источник


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


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