|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> Nagios+Digitemp
Система оповещения о превышении допустимой температуры в серверной на основе связки Nagios + Digitemp.
Автор: Капитан.
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
Процесс изготовления простейшего контроллера шины 1-Wire DS9097 для съёма показаний с датчика температуры DS1820 и установки программы Digitemp на FreeBSD подробно описан в статье http://www.lissyara.su/articles/mad_hands/computers/ds9097+ds1820/
В статье http://www.lissyara.su/articles/freebsd/programms/mrtg+digitemp/ описано применение этого устройства для отображения графиков изменения температуры в помещении серверной. Однако, участь всё время пялиться в монитор, отслеживая момент, когда сломается кондиционер не совсем подходит для . . . (здесь могло бы быть Ваше резюме) ;). Представим себе ситуацию: мы сидим в последнюю тяпницу июля в кафе . . . , а где-то там перегреваются сервера . . . ЖУТЬ!
Имеем
Сервер с операционной системой FreeBSD 8.1-RELEASE amd64 с установленной и настроенной системой мониторинга Nagios (каминг сун). К COM-порту сервера подсоединен контроллер DS9097 с датчиком температуры DS1820, на сервере установлена и настроена программа Digitemp.
Как мы видели в предыдущей статье, с датчика DS1820 можно снять показания значения температуры в градусах Цельсия и в Фаренгейтах с точностью до сотых долей. Прозападные Фаренгейты и слишком точные “цельсии ” нам не нужны (мы же не самогонку варим) – нам нужно целое число отражающее температуру в градусах Цельсия. Команда для получения нужного параметра выглядит так:
#/usr/local/etc/digitemp/digitemp -t 0 -q -o "%.C" \
-c /usr/local/etc/digitemp/.digitemprc
| Теперь прикручиваем это всё к 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.
Создаем команду проверки
#ee /usr/local/libexec/nagios/checkthermo.sh
|
#!/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. Линуксяторы используют BASH, и такой скрипт может у вас не заработать. В данном случае установите BASH из портов и поменяйте первую строку на
#!/usr/local/bin/bash
Делаем наш скрипт исполняемым
#chmod +x /usr/local/libexec/nagios/checkthermo.sh
| Добавляем описание нашей команды и описание сервиса в конфигурационные файлы 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.
У меня стоит опция
поэтому входные параметры для команд я прописываю сразу на удалённой стороне. В данном случае описывать команду проверки не нужно, а описание проверки сервиса будет выглядеть так:
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 . . . Удачных выходных!
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=31377.
размещено: 2011-02-20,
последнее обновление: 2011-02-20,
автор: Капитан
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
|
Комментарии пользователей [2 шт.]