Показаны сообщения с ярлыком nagios. Показать все сообщения
Показаны сообщения с ярлыком nagios. Показать все сообщения

среда, 15 августа 2012 г.

Установка и базовая настройка pnp4nagios

PNP — это дополнение к Nagios, которое анализирует данные о производительности от плагинов и автоматически сохраняет их в RRD базу данных. Для установки нужны:
  • Perl >= 5.x без дополнительных модулей
  • RRDtool >= 1.x, лучше 1.2
    PHP >= 5.1.6 для Web-интерфейса на базе Kohana
  • Nagios >= 2.x или Icinga
  • Kohana нужен загруженный модуль “mod_rewrite”.
Предполагается, что у вас уже установлен Nagios, httpd и они работают. Установка будет проходить на CentOS 6.3 x86_64. Итак, начнем.
1. Скачать архив исходных кодов с сайта pnp4nagios.org.
2. Распаковать
tar xzf pnp4nagios-0.6.18.tar.gz
cd pnp4nagios-0.6.18
3. Установка необходимых пакетов:
yum -y install rrdtool rrdtool-perl openssl-devel gcc php-gd

4. Установка:
./configure --prefix=/opt/pnp4nagios
# компилирует компоненты типа NPCD, написанного на C
make all
# установка файлов по правильным путям
make install
# конфигурационные файлы для process_perfdata.pl и npcd будут скопированы в etc/pnp
make install-config
# будет скопирован файл pnp4nagios.conf в директорию /etc/httpd/conf.d/
make install-webconf
# устанавливает скрипт инициализации NPCD
make install-init

5. Конфигурирование:
а) выбор режима сбора данных
PNP поддерживает несколько режимов обработки данных производительности. Режимы различаются по сложности и ожидаемой производительности. Подробнее http://docs.pnp4nagios.org/pnp-0.6/modes. Я выбрал режим «Bulk Mode with npcdmod», который с точки зрения Nagios наилучший поскольку не будет блокировать Nagios, а само изменение конфигурационного файла Nagios затронет всего 2 строчки.
Nagios использует временный файл для хранения данных и выполняет команду спустя некоторое время. Вместо немедленной обработки с помощью process_perfdata.pl этот файл перемещается в spool-директорию. NPCD-сервис (Nagios Performance C Daemon) мониторит эту директорию на предмет появления новых файлов и передает их имена на вход process_perfdata.pl. Обработка данных производительности полностью отделена от Nagios. NPCD может стартовать множество потоков для обработки данных.

б) настройка режима сбора данных
Отредактировать nagios.cfg:
process_performance_data=1
broker_module=/opt/pnp4nagios/lib/npcdmod.o config_file=/opt/pnp4nagios/etc/npcd.cfg

Данный режим использует в качестве обработчика событий модуль npcdmod.o. Этот модуль (npcdmod.o) принимает на себя задачу обработки данных требуемых для PNP.

6. Рестартовать сервисы:
service httpd restart
service ncpd restart
service nagios restart

7. Добавить/проверить в автозагрузку при старте системы:
chkconfig httpd on
chkconfig ncpd on
chkconfig nagios on

8. Проверка установки:
зайти на url http://<server name>/pnp4nagios/

Появится страница “PNP4Nagios Environment Tests”, которая включает разные проверки необходимых компонентов системы. Перед следующим шагом все проверки должны быть пройдены успешно. Если что-то не так, читать http://docs.pnp4nagios.org/pnp-0.6/verify до прояснения. Если все тесты пройдены успешно, файл pnp4nagios/share/install.php должен быть удален или переименован, либо создать файл с именем pnp4nagios/share/install.ignore, который запрещает вызов инсталлятор после дальнейших обновлений.

9. Добавление иконки PNP в веб-интерфейс Nagios.
Нужно добавить к определениям шаблонов хостов и сервисов строчку action_url, например так:
define host{
name generic-host
*****
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_
register 0
}

define service{
name generic-service
********
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
register 0
}

и перезапустить Nagios
service nagios restart

10. Дополнительные настройки:
а) Debug
http://<server-name>/pnp4nagios/debug/?host=<HOST>&srv=<SERVICE>
вместо
http://<server-name>/pnp4nagios/index.php/graph?host=<HOST>&srv=<SERVICE>

б) Отредактировать файлы config.php и local_config.php
# Масштабировать предварительный просмотр графиков при всплывании
$conf['popup-width'] = "597px";
изменять этот параметр нужно в ОБОИХ конфигурационных файлах (config.php и local_config.php)

# Список директорий для поиска шаблонов. Ищется до первого совпадения.
$conf['template_dirs'][] = '/opt/pnp4nagios/share/templates';
$conf['template_dirs'][] = '/opt/pnp4nagios/share/templates.dist';

в) SSI
Вы можете интегрировать PNP в Nagios таким образом, чтобы текущие графики показывались в виде всплывающих страничек без необходимости кликания по иконкам. Для этого нужно создать файл /usr/share/nagios/html/ssi/status-header.ssi, либо скопировать файл status-header.ssi из исходный кодов PNP в директорию /usr/share/nagios/html/ssi.
Содержимое файла status-header.ssi (модифицированное):
<script src="/pnp4nagios/media/js/jquery-min.js" type="text/javascript"></script>
<script src="/pnp4nagios/media/js/jquery.cluetip.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery.noConflict();
jQuery(document).ready(function() {
jQuery('a.tips').cluetip({ajaxCache: false, dropShadow: false,showTitle: false, width: '620', height: '700', sticky: true, arrows: false, closeText: '<img src="/pnp4nagios/media/images/close1.png" BORDER="0">', closePosition: 'top' });
});
</script>

Иконка close1.png не входит в поставку PNP, поэтому ее нужно создать самому, либо воспользоваться какой-то готовой, либо скопировать входящий в исходные коды PNP файл и ничего не делать.

Литература:

среда, 1 июня 2011 г.

Мониторинг температуры серверной с помощью digitemp.

В серверной имеется старенький датчик температуры DS9097U. Года полтора назад надо было настроить мониторинг температуры в серверной. Собственно, это небольшая заметка о проделанной ранее работе. В организации, где я работаю, активно используется Nagios для мониторинга серверов/стоек/активного оборудования и т.п. Далее я кратко опишу, как прикрутить digitemp к nagios. DigiTemp - это простая программа, используемая для чтения данных из датчиков температур, в моем случае подключенных к COM-порту сервера под RHEL 6 (ранее RHEL 5).

1. Скачать digitemp можно отсюда:
wget -c http://www.digitemp.com/software/linux/digitemp-3.6.0.tar.gz

2. Распаковать
tar xzf digitemp-3.6.0.tar.gz
cd digitemp-3.6.0


3. прочитать README
less README

4. Компилирование исходников
make ds9097u

5. Инициализация датчика (ищет доступные устройства, если не указать явно, и записывает их ROM-параметры в .digitemprc)
./digitemp_DS9097U -i -s /dev/ttyS0

6. Копирование файлов в нужные папки
cp digitemp_DS9097U /usr/local/bin
ln -s /usr/local/bin/digitemp_DS9097U /usr/local/bin/digitemp
mv .digitemprc /etc/nagios/digitemp.conf


7. Установить необходимые права на устройство, либо добавить пользователя nagios в группу, которой принадлежит файл /dev/ttyS0
chmod 666 /dev/ttyS0 (подключенное устройство)
Обязательно добавить в правила udev соответствующие разрешения.

8. Скачать плагин для nagios под названием check_digitemp.pl. Например, отсюда http://oss.teamix.org/projects/nagiosplug/repository/revisions/master/changes/contrib/check_digitemp.pl

Проверка
/usr/local/nagios/libexec/check_digitemp.pl -t 0 -f /etc/nagios/digitemp.conf -w 30 -c 35 -C
добавить в /etc/nagios/nrpe.conf на стороне сервера, к которому подключен датчик.
echo “command[check_temperature]=/usr/local/nagios/libexec/check_digitemp.pl -t 0 -f /etc/nagios/digitemp.conf -w 30 -c 35 -C” >> /etc/nagios/nrpe.conf

Описать сервис на хосте с Nagios
define service{
use linux-service
host_name dbtest01
service_description Current temperature
check_command check_nrpe!check_temperature
}


Объявить команду check_temperature в файле /etc/nagios/commands.cfg на хосте с Nagios
*****
#DigiTemp temperature check command
define command{
command_name check_temperature
command_line $USER1$/check_digitemp.pl -w $ARG1$ -c $ARG2$ -t $ARG3$ -f $ARG4$ -C
}

*****

четверг, 3 марта 2011 г.

Проверка очереди сообщений в MDaemon с помощью Nagios.

Вообщем после очередной неудачной рассылки прайсов/накладных и т.п. через MDaemon вокникла супер-идея мониторить количество сообщений и в случае ЧП пропихивать их вручную. Как проверять? Дык есть же Nagios!
Теперь по делу. Поскольку MDaemon не имеет возможности отдавать по snmp данные о своей загрузке, пришлось писать скрипт на powershell, который будет мониторить каждые 5 минут папку Remoteq (Remote Queue) и, если их число превысит какое-то значение, то информировать заинтересованных лиц.
Собственно последовательность действий:
1. Написать скрипт и поднастроить powershell (Set-ExecutionPolicy RemoteSigned)
$MAX_WARN=50
$MAX_CRIT=200
$DIR="d:\Program Files\MDaemon\Remoteq\"
$FILTER="*msg"

$X = (get-childitem $DIR -include $FILTER -recurse ).count

if (( $X -gt $MAX_WARN ) -and ( $X -lt $MAX_CRIT )) {
Write-host "In RemoteQueue there are: "$X " message(s)."
exit 1
}
elseif ( $X -gt $MAX_CRIT ){
Write-host "In RemoteQueue there are: "$X " message(s)."
exit 2
}
else {
Write-host "In RemoteQueue there are: "$X " message(s)."
exit 0
}

2. Установить/настроить конфигурационный файл nsclient++ - прописать в nsc.ini что-то типа такого:

[NRPE Handlers]
check_mdqueue=cmd /c echo d:\mdqueue.ps1 ; exit $LastExitCode | powershell -command -

3. Запустить/перезапустить nsclient++
4. Открыть порт 5666 на windows firewall для хоста(ов) мониторинга.
5. Настроить nagios, добавить в список проверяемых сервисов.
define service{
use local-service
host_name khonsu
service_description MDaemon remote queues
check_command check_nrpe!check_mdqueue
}
6. Проверка с хоста nagios
/usr/local/nagios/libexec/check_nrpe -H khonsu -c check_mdqueue
In RemoteQueue there are: 3 message(s).

четверг, 9 декабря 2010 г.

Плагин для nagios check_wh.

Итак, пока помню опишу. Все мы страдаем забывчивостью. За доменом необходимо следить. Серьезно. Никто не погладит по головке, если Ваш домен сначала "заморозят", а потом пометят как удаленный. В моей организации используется Nagios для мониторинга кучи серверов. Филиалы имеют свои внешние домены и пару раз случалась ситуация, когда местная бухгалтерия забывала проплатить за доменное имя. Почему то вчера в голову стукнула идея написать скрипт, который бы мониторил это дело и сообщал когда стоит начать шевелиться. Поискав по просторам интернета, нашел пару скриптов под Nagios - один на Perl, другой на bash, но ни один из мне не понравился, так как не выводил количество дней до deadline. Проанализировав результаты команды `whois DOMAIN` для пары десятков украинских и российских доменов, была выведена тенденция и написан небольшой скрипт.
Немного WIKI: WHOIS — сетевой протокол прикладного уровня, базирующийся на протоколе TCP (порт 43). Основное применение — получение регистрационных данных о владельцах доменных имен, IP-адресов и автономных систем.
Теперь о плагине - ушло 4-5 часов на написание (с учетом всех отрывов от написания) и тестирование. Оказалось все просто, однако, будет работать ТОЛЬКО для записей, имеющих значения в полях Status и expire (что поделать, не все придерживаются одинакового синтаксиса в БД whois).
Внимание счастливым админам, не имеющим записей о времени истечения срока действия ваших доменов. Вам остается либо помнить этот знаменательный день, предварительно уточнив его у провайдера, либо попросить/заставить провайдера внести в БД WHOIS необходимые данные.

Собственно сам скрипт.

#!/bin/bash
# Script for checking whois status
# Usage $0 arg1 warning critical

# аргументы [WARNING_THRESHOLD] [CRITICAL_THRESHOLD] опциональные, если их не передавать - будут использоваться значения по умолчанию - 40 и 25 соот.
if [ $# -lt 1 ]; then
echo "Usage: `basename $0` DOMAIN [WARNING_THRESHOLD] [CRITICAL_THRESHOLD]"
exit 3
fi;

# текущая дата в секундах со времен 1970-01-01 00:00:00 UTC
CUR_DATE=`date +%s`

# проверка на передачу аргументов WARNING и CRITICAL. Если WARN задан и больше CRIT, то использовать заданное значение. Если нет - то принять значение по умолчанию 40 (выставил самостоятельно)
if [ $2 ] && [ $2 -gt $3 ]; then
WH_WARN=$2
else
WH_WARN=40
fi;

if [ $3 ]; then
WH_CRIT=$3
else
WH_CRIT=25
fi;

# вывод для отладки
#echo "WH_CRIT=$WH_CRIT"
#echo "WH_WARN=$WH_WARN"
#echo "CUR_DATE=$CUR_DATE"

# запись в переменную результата
WH_RESULT=`whois $1 2>/dev/null`
#echo "WH_RESULT=$WH_RESULT"

# если в результате есть "No entries found for", то выдать на стандартный вывод сообщение и выйти с кодом 3. Насчет кодов выхода: Nagios plug-in development guidelines говорит использовать код 0 для статуса OK, 1 - WARNING, 2 - CRITICAL, 3 - UNKNOWN. Nagios от плагина получит код возврата и строку на стандартном выводе (код используется для определения состояния службы, а текст как информационное сообщение для отправки в почту, вывода на экран и т.п.)
if [ `echo "$WH_RESULT" | grep "No entries found for" | wc -l` -eq 1 ]; then
echo "Domain $1 not found in WHOIS_DB"
exit 3
fi;

# самая "страшная" часть. Положительный результат команды `whois DOMAIN` парсится на наличие строки status. Если строка найдена (в формате "status: OK-UNTIL 20110914000000"), из неё вырезается последняя часть с 8 цифрами - дата (YYYYMMDD) истечения срока действия домена.
tmp2=`echo "$WH_RESULT" | grep status`
#echo "$tmp"
if [ "$tmp2" ]
then
# собственно здесь последняя часть с 8 цифрами - дата (YYYYMMDD) истечения срока действия домена.
tmp0=`expr substr \`echo "$tmp2" | awk {'print $3'}\` 1 8`
# число секунд от 1970-01-01 00:00:00 UTC до определенной выше даты
WH_DATE=`date --date "$tmp0" +%s`
# echo "WHDATE=$WH_DATE"
else
# Если строка status не найдена - ищется строка expire в формате "Record expires: 2011-03-20"
tmp=`echo "$WH_RESULT" | grep -i expire`
# Если найдена такая строка - вырезается последняя часть, из которой удаляются знаки '-'
if [ "$tmp" ]
then
tmp0=`echo "$tmp" | awk {'print $3'} | tr -d -`
# число секунд от 1970-01-01 00:00:00 UTC до определенной выше даты
WH_DATE=`date --date "$tmp0" +%s`
# echo "WHDATE=$WH_DATE"
fi;

fi;

# если переменная пустая, т.е. НЕ содержит записей о статусе или сроке окончания действия домена - выходм с кодом UNKNOWN
if [ -z "$WH_DATE" ]; then
echo "Unknown data for $1 from whois server."
exit 3
fi;

# вычисление разницы во времени в секундах, а затем деление на 86400 (числосекунд в одном дне)
X=`expr $WH_DATE - $CUR_DATE`
X=`expr $X / 86400`
#echo "X=$X"
if [ $X -gt $WH_WARN ]; then
echo "Whois data is valid for $1. $X days to expire. See http://hostmaster.net.ua/?domadv"
exit 0
fi;
if [ $X -lt $WH_WARN ] && [ $X -ge $WH_CRIT ]; then
echo "Whois data is valid for $1. $X days to expire. See http://hostmaster.net.ua/?domadv"
exit 1
fi;
if [ $X -lt $WH_CRIT ] && [ $X -ge 0 ] ; then
echo "Whois data is steel valid for $1, but will be expired in `echo "$X" | tr -d -` days. See http://hostmaster.net.ua/?domadv"
exit 2
else
echo "Whois data is NOT valid for $1. Was expired for `echo "$X" | tr -d -` days. See http://hostmaster.net.ua/?domadv"
exit 2
fi;

PS: всегда welcome здравая критика и предложения.

Литература:
http://ru.wikipedia.org/wiki/WHOIS
http://jon.netdork.net/2009/03/09/nagios-and-monitoring-whois
http://nagiosplug.sourceforge.net/developer-guidelines.html
http://hostmaster.net.ua/?domadv