Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  frox
  SARG
  samba & ClamAV
  named
  proftpd
  cacti
  SAMBA+AD+NT ACL
  MySQL
  hylafax
  DDNS+DHCP
  cvsupd
  Samba как PDC
  Основы LDAP
  LDAP+SSL
  LDAP auth
  knockd
  rsync
  MRTG
  Rejik
  Jabber - OpenFire
  Samba(PDC) + Ldap
  squid+AD
  ATSlog
  vsftpd
  LDAP: samba, dns, dhcp
  Free-SA
  cups-samba на samba+AD
  irc + services
  Nagios - мониторинг сети
  TeamSpeak
  icecast2
  verlihub (p2p)
  Icecast2 + Darkice
  OOPS
  vsftpd + mysql
  Amanda
  HAVP
  Рыбалка на FreeBSD
  DNS сервер NSD
  DNS сервер Unbound
  mpd5, msmtp, dynamic ip
  ProFTPd + LDAP
  OpenVPN + LDAP
  Samba (PDC+BDC)
  BIND & AD
  POWERDNS
  3proxy
  eGroupWare
  GLPI
  SugarForge CRM
  Bacula
  Mysql - базовое описание
  Asterisk IP PBX
  Samba & CUPS & AD & ACL
  SMSTools 3
  Samba+ NT ACL
  phpmyadmin
  1С:Предприятие 8.1
  PurefFTPd
  qemu network
  AimSniff
  comms/scmxx
  Zoneminder
  Openfire Jabber Server
  Zoneminder 2
  Принт-Сервер Samba+LPD & AD
  Кластер OpenLDAP 2.4
  Lightsquid
  Установка Zabbix-1.6
  Установка net2ftp
  VSFTPD + AD && MySQL
  Network UPS Tools
  mpd5 L2TP client
  Apache 2.2 as a proxy
  ejabberd+mysql+icq
  HotSpot
  Установка и использование Zenoss на FreeBSD 7.2
  mysql-proxy
  DNS zones
  squid+sams+sqstat
  transmission-daemon
  Squid+AD (group access)
  SysAid Server
  MySQL Master+Master
  proftpd file auth&quota
  usb_modeswitch
  NSDadmin
  iperf Тест скорости между хостами
  Простой факс-сервер mgetty+sendfax
  SQUID-MultiCpuSystem
  vsftpd + system users
  Syslog server
  Температура в серверной
  Nagios+Digitemp
  Avast! FreeBSD
  Настройка git+gitosis
  Firefox SyncServer
  Scan+Print server FreeBSD 9
  proftpd,pgsql,web
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


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=314

не создаст переменную $F, содержащую целое значение триста четырнадцать а, создаст строковую переменную $F, содержащую символы три, один и четыре. Для того чтобы выполнить какую-нибудь математическую операцию используют конструкцию вида:
‘expr $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.
У меня стоит опция
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 . . . Удачных выходных!



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=31377.

размещено: 2011-02-20,
последнее обновление: 2011-02-20,
автор: Капитан

оценить статью:

SlaDER, 2011-02-23 в 9:18:55

Спасибо за статью! Но обычно в серверой есть UPS и температуру обычно с него снимают по snmp, плагин есть в репозитории.

Алексей, 2011-05-26 в 13:53:55

SlaDER спасибо на название плагина, могли бы и написать как называется)


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

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 и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 24 чел.
За последние 30 мин было: 66 человек
За сегодня было
15 показов,
8 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.049 секунд
Из них PHP: 25%; SQL: 75%; Число SQL-запросов: 77 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 166700