Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
Теперь прикручиваем это всё к Nagios
Немного лирики (теория). Для проверки какого-либо сервиса Nagios использует соответствующие программы/команды, которые описываются в файлах конфигурации примерно в таком виде:
define command { command_name проверить_чёта_там command_line $USER1$/check_чёта.sh -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ } |
В данном примере переменные:
- USER1 соответствует местонахождению проверочных программ (обычно определяется в файле resource.cfg;
$USER1$=/usr/local/libexec/nagios |
- HOSTADDRESS – адрес проверяемого узла;
“
- ARG1 – порог предупреждения (при превышении, которого статус проверяемого сервиса меняется на Warning);
- ARG2 – порог аварии (при превышении – статус Critical).
Никто не запрещает писать свои команды со своими переменными.
При выполнении, такая команда должна опросить сервис чёта_там
” на узле HOSTADDRESS и получить от него какие-то данные. Эти данные сверяются со значениями порогов. В зависимости от результата проверки проверочная программа может завершиться с кодом:
0 – ОК всё нормально;
1 – Warning – превышено значение ARG1;
2 – Critical - превышено значение ARG2;
3 – Unknown – непонятки.
Термин «превышение» я использовал чисто для наглядности, применительно к процессу наблюдения за перегревом. Ведь существуют и ситуации, когда важно знать - насколько что-то там понизилось.
Адрес узла нам не нужен (мы проверяем помещение, а не какой-то сервер). Наша команда проверки температуры должна принимать на входе только значения порогов срабатывания оповещений и завершаться с выдачей показания текущей температуры и возвращать одно из трёх значений (0,1 или 2).
Простейший скрипт будет выглядеть следующим образом.
#!/bin/sh T=`/usr/local/etc/digitemp/digitemp -a -q -o "%.C" -c /usr/local/etc/digitemp/.digitemprc` if test `expr $2 - $T` -gt 0 then echo "OK " $T exit 0 fi if [ `expr $T - $4` -gt 0 ] then echo "OVERHEAT " $T exit 2 fi echo "WARNING " $T exit 1 |
Небольшие пояснения для тех, кто мало знаком с программированием на shell. Переменные могут быть только строковыми (string), т.е. запись
|
не создаст переменную $F, содержащую целое значение триста четырнадцать а, создаст строковую переменную $F, содержащую символы три, один и четыре. Для того чтобы выполнить какую-нибудь математическую операцию используют конструкцию вида:
|
Переменные вида $число (в данном примере $2 и $4)в программах на shell соответствуют подстрокам (параметрам) перечисленным после указания самого исполняемого файла.
“
Если была запущена программа /гдетотам/прога –w 25 –c 30
Значения переменных переданных в программу «прога» будут
$1 -w
”
“
$2   25
”  
“
$3   -c
”
“
$4   30
”
Данный скрипт вполне рабочий, его можно использовать, но он не содержит никаких проверок входных данных, хотя, если вы пишите чисто для внутреннего применения, такой подход можно (да и то с натяжкой) применять на практике. Сколько уязвимостей находится/эксплуатируется каждый день из-за того, что кто-то в погоне за призрачной прибавкой в скорости поленился проверить входные данные.
Простейшая проверка $1 могла бы выглядеть примерно так
if [ "-w"=$1 ] then WARNLIM=$2 else echo "Unknown input parameter" exit 3 fi |
Теперь пора перейти к практике.
Настраиваем Nagios.
Создаем команду проверки
|
|
Возможные грабли:
Если вы используете сторонние скрипты (скачанные из интернета, например), убедитесь, что они действительно написаны на Shell. Линуксяторы используют BASH, и такой скрипт может у вас не заработать. В данном случае установите BASH из портов и поменяйте первую строку на
#!/usr/local/bin/bash
Делаем наш скрипт исполняемым
|
Добавляем описание нашей команды и описание сервиса в конфигурационные файлы Nagios.
Описание команды
define command{ command_name check_thermal command_line $USER1$/checkthermo.sh -w $ARG1$ -c $ARG2$ } |
Описание хоста
define host{ use freebsd-server host_name 0_THERMAL_0 alias thermal address 172.17.254.119 hostgroups 101 parents monitor icon_image gradusnik.png statusmap_image gradusnik.png } |
Для наглядности я сделал отдельный виртуальный хост для того, чтобы в таблице сервисов запись о состоянии температуры шла отдельной строкой, хотя это дело вкуса. В таблице хосты расставляются по алфавиту и, чтобы показания были сверху я название для хоста начал с нолика.
Теперь определим сервис
define service{ use generic-service host_name 0_THERMAL_0 service_description Thermal_State check_command check_thermal!-w 25 –c 28 contact_groups admins icon_image gradusnik.png } |
После того, как Nagios перечитает конфигурацию, уведомления о превышении температуры будут получать члены контакт группы admins. Что и требовалось.
Теперь рассмотрим ситуацию, когда необходимо мониторить температуру в удалённом помещении (в серверной филиала, например) или, как в моём случае, нет возможности подцепить датчик напрямую к серверу наблюдения (низковольтный COM-порт или отсутствие такового вообще). Я подключил датчик к другому серверу, на котором было поднято приложение NRPE http://en.wikipedia.org/wiki/NRPE (Сервер, конечно на FreeBSD). В данном случае помещаем наш проверочный скрипт checkthermo.sh в папку /usr/local/libexec/nagios/ удалённой машины. В конфигурацию NRPE добавляются такие строки:
command[check_thermal]=/ usr/local/libexec/nagios/checkthermo.sh -w 25 -c 28 command[check_thermal3]=/usr/local/etc/digitemp/digitemp3.sh |
вторая строка содержит ссылку на скрипт digitemp3.sh с таким содержанием
#!/bin/sh /usr/local/etc/digitemp/digitemp -a -q -o "%.C" -c /usr/local/etc/digitemp/.digitemprc |
С помощью него я получаю данные для MRTG.
У меня стоит опция
dont_blame_nrpe=0 |
поэтому входные параметры для команд я прописываю сразу на удалённой стороне. В данном случае описывать команду проверки не нужно, а описание проверки сервиса будет выглядеть так:
define service{ use generic-service host_name 0_THERMAL_0 service_description Thermal_State check_command check_nrpe2!check_thermal contact_groups admins icon_image gradusnik.png } |
Изначально Nagios отправляет оповещения по почте, но кто мешает прикрутить smstools . . . Удачных выходных!
размещено: 2011-02-20,
последнее обновление: 2011-02-20,
автор: Капитан
SlaDER, 2011-02-23 в 9:18:55
Спасибо за статью! Но обычно в серверой есть UPS и температуру обычно с него снимают по snmp, плагин есть в репозитории.
Алексей, 2011-05-26 в 13:53:55
SlaDER спасибо на название плагина, могли бы и написать как называется)
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [2 шт.]