Posts tagged ‘nsclient++’

Сага о Nagios: Написание плагинов для Nagios/NRPE/NSClient++

Вданной статье дается описание механизму написания собственных, нестандартных скриптов(сервисов/проверок) для Nagios.

Оригинал: Nagios Plugin API

Другие ресурсы

Если вы собираетесь писать собственные плагины для Nagios, ознакомтесь со следующими ресурсами:

Обзор плагинов

Скрипты и бинарные файлы должны выполнять две следующие функции (как минимум), чтобы считать их плагинами для Nagios:

  • При выходе вернуть один из возможных кодов возврата (см. ниже)
  • Вернуть как минимум одну строку текста в STDOUT

Внутренне устройство вашего плагина абсолютно безразлично для Nagios. Ваш плагин может проверять статус TCP порта, выполнять запрос к базе данных, проверять место на диске, или делать еще что-то, что вам необходимо проверять. Детали о будут зависеть только от того что вы хотите проверять.

Коды возврата

Nagios различает статус сервиса или хоста по возвращаемым плагином кодом возврата. Таблица ниже показывает список возможных кодов возврата, вместе с расшифровкой их значений.

Код возврата плагина Состояние сервиса Состояние хоста
0 OK UP
1 WARNING UP or DOWN/UNREACHABLE*
2 CRITICAL DOWN/UNREACHABLE
3 UNKNOWN DOWN/UNREACHABLE

Note Замечание: Если опция use_aggressive_host_checking включена, код 1 в возврате плагина проверки хоста будет означать DOWN или UNREACHABLE. Иначе 1 будет означает что хост в состоянии UP. The process by which О том как Nagios определяет находиться в состоянии DOWN или UNREACHABLE можно прочесть здесь here.

Описание вывода плагинов

Плагин должен вывести как минимум одну строку текста на консоль (STDOUT). Начиная с Nagios версии 3, плагины могут, пожеланию, выводить несколько строк текста. Плагин также может выдавать данные о динамике (perfomance) которые будут обработаны сторонними приложениями (к примеру программами ) Стандартные примеры вывода плагиноа привидены ниже:

TEXT OUTPUT | OPTIONAL PERFDATA
LONG TEXT LINE 1
LONG TEXT LINE 2

LONG TEXT LINE N
| PERFDATA LINE 2
PERFDATA LINE 3

PERFDATA LINE N

Performance данные (показаны оранжевым) не обязательны. Если скрипт возвращает perfomance данные в своем выводе, значит они должны отделятся от остального вывода вертикальной чертой (|). Дополнительные линии длинного вывода плагина (более 1й чтроки)(выделены синим) также не обязательны.

Примеры выводов плагинов

Давайте рассмотрим примеры возможных выводов плагинов…

Пример 1: Одна строка вывода(только текст)
Предполжим что у нас есть плагин который выводитодну строку как показано в примере:

DISK OK – free space: / 3326 MB (56%);

Если этот плагин будет использован для выполнения проверки, данная строка бкдет передана в переменную $SERVICEOUTPUT$.

Пример 2: Одна строка вывода(текст и perfdata)
Плагин может возвращать perfomance-данные которые могут использованы сторонними приложениями (к примеру построителем графиков в Centreon или NagiosGrapher). Не забывает отделять perfomance данные вертикальной чертой (|):

DISK OK – free space: / 3326 MB (56%);
|
/=2643MB;5948;5958;0;5968
Если плагин используется для предоставления данных о проверке,
красная
часть (левее вертикальной черты) будет сохранена в макрос $SERVICEOUTPUT$,
оранжевая
часть (правее разделителя) будет сохранена в макрос $SERVICEPERFDATA$.

Пример 3: Несколько строк вывода (текст и perfdata)
Плагин возвращает несколько строк основных и perfdata:

DISK OK – free space: / 3326 MB (56%); | /=2643MB;5948;5958;0;5968
/ 15272 MB (77%);
/boot 68 MB (69%);
/home 69357 MB (27%);
/var/log 819 MB (84%); | /boot=68MB;88;93;0;98
/home=69357MB;253404;253409;0;253414
/var/log=818MB;970;975;0;980

Красным помечен вывод проверки, помещается в макрос $SERVICEOUTPUT$. Оранжевым помеченыстроки (текст) который будет помещен в макрос $SERVICEPERFDATA$. Синим помечены 2 – 5 строки вывода будут соединены (с экранированием переводов строк) и помещены в макрос $LONGSERVICEOUTPUT$.

В итоге значения макросов будут следующими:

Макрос Значение
$SERVICEOUTPUT$ DISK OK – free space: / 3326 MB (56%);
$SERVICEPERFDATA$ /=2643MB;5948;5958;0;5968 /boot=68MB;88;93;0;98 /home=69357MB;253404;253409;0;253414 /var/log=818MB;970;975;0;980
$LONGSERVICEOUTPUT$ / 15272 MB (77%);\n/boot 68 MB (69%);\n/var/log 819 MB (84%);

[…]

Требования к длинне вывода плагинов

Nagios читает первые 4 KB данных возвращаемых плагином. Это сделано для предотвращения ситуаций, когда плагин будет отдавать мегабайты и гигабайты данных обратно Nagios`у. Лимит в 4 KB можно легко изменить если необходимо. Просто измените значение MAX_PLUGIN_OUTPUT_LENGTH в файле include/nagios.h.in исходных кодов и пересоберите Nagios. Ничего больше изменять ненужно!

Примеры

Если вам нужны примеры плагинов вы можете скачать официальные плагины для Nagios, там вы сможете найти примеры на C, Perl и shell. Информацию о получении официальных плагинов вы можете найти здесь.

Perl плагины

Одна и возможностей Nagios это встроенный интерпритатор Perl который позволяет выполнять плагины быстрее. Больше информации о том как писать плагины с использование встроенного Perl можно найти здесь.


Сага о Nagios: чекаем в труднодоступных местах (NSClient++)

NSClient++

В прошлой статье (http://stproject.blogspot.com/2009/02/nagios-nrpe.html) я рассказывал о том как можно проверять удаленные *nix хосты с помощью NRPE. С помощью NRPE можно проверять Unix системы, но как показывает практика мир не идеален и приходиться работать еще и с Windows.
Сегодня речь пойдет о мониторинге Windows серверов с помощью Nagios, NSClient++ и команды check_nrpe.

Немного истории

Изначально для проверки Windows серверов предлагалось использовать SNMP или утилиту NSclient. Запас возможностей NS был очень мал, его приходилось “подстраивать” под каждую конкретную версию/локализацию Windows, к тому же в мире *nix программа написанная на Delphi будет использоваться с подозрениям, из религиозных соображений :). В общем проект со временем заглох и перестал развиваться (последняя версия считает Windows 2000 новинкой).

Со временем появилась альтернатива: NSClient++, он был написан на C++, обладал внушительным арсеналом встроенных проверок и возможностью создания новых, работающим с несколькими протоколами и т.д.

Общая информация

На данный момент NSClient++ поддерживаются следующие ОС:

  • NT4 (SP5?)
  • Windows 2000 W2K
  • Windows XP
  • Windows 2003
  • Windows Vista

[мной протестирован на Windows Server 2008 x86/64 в основном работает]

Поддерживаемые архитектуры:

  • Win32
  • x64 (AMT64/EMT64)
  • IA64 (Itanium)

Поддерживаемые протоколы:

  • nsclient (устаревший)
  • NRPE

Установка NSClient++

Начинаем как всегда со скачки NSClient++ с официального сайта: http://trac.nakednuns.org/nscp/downloads
Будьте внимательны, выберите последнюю версию для своей архитектуры, лучше всего выкачивать MSI архивы, т.к. в будущем можно автоматизировать процесс установки.

Устанавливаем клиент со стандартными настройками, возможно вам стоит включить NSClient++-tray, этот модуль будет показывать в трее иконку по клику на которую можно посмотреть лог работы клиента.
В процессе установки по идее не должно быть ошибок или подводных камней, поэтому перейдем к самому интересному.

Настройка NSClient++

Если вы ставили NSClient++ со стандартными параметрами, то файл конфигурации должен находиться по адресу: C:\Program Files\NSClient++\SNC.ini

Для редакторования конфига лучше всего использовать какой-нибудь текстовый редактор с подсветкой синтаксиса, т.к. от количества коментариев может конфиг становиться почти нечитабельным.
Формат файла как у типичного ini файла Windows, конфиг разбит на категории [category name], параметры описываются по правилу “varible=value”.

[modules]
В этом разделе описывается какие модули будут включены в NSC++ (по умолчанию все выключены). Включить/выключить модуль можно убрав или поставив комментарий перед названием модуля.

Я не буду описывать все возможные модули, только те которые в первую очередь необходимы.

FileLogger.dll – модуль “пишущий” лог проверок
CheckSystem.dll – модуль для проверки основных параметров системы
CheckDisk.dll – модуль для проверки дисков
NRPEListener.dll – модуль “прослушивания” порта “NRPE” (позволяет проверять с помощью команды check_nrpe)
SysTray.dll – модуль который показывает иконку в трее для управления NSClient++
CheckEventLog.dll – модуль позволяющий проверять EventLog

эти модули можно включить убрав напротив них комментарии.

[Settings]

allowed_hosts – список хостов с которых будет производиться проверка (хосты прописываются через запятую).

use_file – если равен “1”, то конфигурацию для NSClient++ нужно брать из этого ini файла, если “0” то параметры будут перенесены в реестр (поверьте удобнее 1 :)).

[NRPE]

секция отвечает за настройки модуля прослушивания NRPE
port – порт который будет слушать NSClient++ (по умолчанию 5666)
allow_arguments – если >0 значит команды проверки млгут использовать аргументы, в виде $ARAG1, $ARG2…
use_ssl – если “1” то использовать SSL если “0”, то нет (если SSL выключен, то команда check_nrpe должна выполняться с опцией “-n”)

[NRPE Handlers]

здесь можно описать команды в стиле NRPE:

check_hello=scripts\hello.bat

Папка “scripts” должна должна быть создана в папке с установкой NSCleint++ (C:\program Files\NSClient++\).

После окончания настройки перезагрузите сервис NSClient++

net stop nsclientpp
net start nsclientpp

Настройка Nagios

Конфигурирование проверок хостов с NSClient++ ничем не отличается от NRPE.

Объявление команды для Nagios (“-n при выключенном SSL”):

define command{
command_name                    check_nsc_load
command_line                    $USER1$/check_nrpe -n -H $HOSTADDRESS$ -c checkCPU -a MaxWarn=89% MaxCrit=90% time=5m ShowAll
}

Описываем сервис:

define service{
host_name                               win-2008-server
service_description             LOAD
use                             LOAD-service
check_command                   check_nsc_load
}

Все можем пользоваться.

Вот список некоторых команд с параметрами (полный список)

Max – максимум
Min – минимум
Warn – предупреждение
Crit – критический
Free – свободно
Used – импользовано
ShowAll – если есть то выводиться более подробная информация о проверке

CheckDriveSize
Проверка диска/дисков.

Аргументы:

MaxWarnFree
MaxCritFree
MinWarnFree
MinCritFree
MaxWarnUsed
MaxCritUsed
MinWarnUsed
MinCritUsed
Drive – буква диска, если опустить то проверяются все диски
FilterType – занчения, FIXED, CDROM, REMOVABLE, REMOTE (по умолчанию FIXED)
CheckAll – проверить все диски
CheckAllOthers – проверить все диски в соответствии с Filter исключая те что были прописаны в Drive.

CheckCPU
Проверка загруженности CPU.

warn – процент загруженности
crit – процент загруженности
Time – время за которое считаеться загрузка (10m, 20s, 1h)
nsclient – режим совместимости с nsclient

CheckMem
Проверка памяти.

Показатели в %:
MaxWarn
MaxCrit
MinWarn
MinCrit

ShowAll – подробный вывод
type – (page, paged, virtual, physical), page – подкачка, physical – физической.

CheckServiceState
Проверка состояния системного сервиса.

ShowFail – если есть, то выводяться только те сервисы которые “не запустились”
service=state – поле “service” имя сервиса (лучше всего брать в ординарные кавычки ” ‘ “) можно взять и Start->Run->srevices.msc

CheckAll – проверить что все сервисы у которых тип запуска “Auto start” запущены
exclude – имя сервиса исключаемого из checkAll
ShowAll – подробный режим


Проверка состояния процесса в памяти.

ShowAll – подробный режим
process=state – process – имя процесса, state – состояние (notepad.exe=started)
ignore-perf-data – не выдавать performance-date
(Max|Min)(Warn|Crit)Count – количество процессов

Полный список команд и параметров http://trac.nakednuns.org/nscp/wiki/CheckCommands