<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mysyslog.ru &#187; nagios</title>
	<atom:link href="http://mysyslog.ru/posts/tag/nagios/feed" rel="self" type="application/rss+xml" />
	<link>http://mysyslog.ru</link>
	<description>Всякая IT всячина</description>
	<lastBuildDate>Thu, 08 Jul 2010 13:51:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Пишем свой плагин nagios</title>
		<link>http://mysyslog.ru/posts/439</link>
		<comments>http://mysyslog.ru/posts/439#comments</comments>
		<pubDate>Mon, 10 May 2010 18:19:37 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[nagios]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=439</guid>
		<description><![CDATA[Плагины &#8211; это одна из самых сильных сторон системы мониторинга nagios. Для мониторинга базовых служб и параметров системы в комплекте установки уже есть большой набор плагинов. Если нужного плагина среди базовых нет, то можно поискать на сайтах exchange.nagios.org и monitoringexchange.org. Или написать свой плагин.

Теория работы плагинов nagios






Фактически плагин nagios &#8211; это обычная программа, которая взаимодействует [...]]]></description>
			<content:encoded><![CDATA[<p>Плагины &#8211; это одна из самых сильных сторон системы мониторинга nagios. Для мониторинга базовых служб и параметров системы в комплекте установки уже есть большой набор плагинов. Если нужного плагина среди базовых нет, то можно поискать на сайтах <a href="http://exchange.nagios.org/">exchange.nagios.org</a> и <a href="http://www.monitoringexchange.org/">monitoringexchange.org</a>. Или написать свой плагин.<br />
<span id="more-439"></span></p>
<h3>Теория работы плагинов nagios</h3>
<div style="float:left; width:265px; height:265px;">
<script type="text/javascript"><!--
google_ad_client = "pub-5926413875763738";
/* wp-post-250x250 */
google_ad_slot = "6534377323";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<p>Фактически плагин nagios &#8211; это обычная программа, которая взаимодействует с системой мониторинга через коды возврата и стандартного вывода. Коды возврата сообщают nagios о результате проверки, а из стандартного вывода формируется сообщение для web интерфейса. Со стандартным выводом все несколько сложнее, но сперва расскажу про коды возврата. Всего есть четыре кода возврата, которые может передать плагин в систему мониторинга:</p>
<p><span style="color: #339966;"><strong>0 &#8211; OK</strong></span>, т.е. проверка выполнена удачно и все работает как нужно.<br />
<span style="color: #ffff00;"><strong>1 &#8211; WARNING</strong></span>, проверка выполнена успешно, но проверяемая служба выдает показатели, превышающие порог нормальной работы.<br />
<span style="color: #ff0000;"><strong>2 &#8211; CRITICAL</strong></span>, проверка выполнена, но проверяемая служба не работает, или выдает значения, превышающие критический порог.<br />
<span style="color: #ff9900;"><strong>3 &#8211; UNKNOWN</strong></span>, такой код возврата говорит о невозможности плагином выполнить проверку. Причин для этого может быть несколько, например были введены неверные аргументы для плагина проверки или плагин не может создать какой-то дочерний процесс, открыть tcp сокет и т.п.</p>
<p>Один из этих кодов возврата плагин должен вернуть в любом случае. Кроме того плагин должен вывести что-то в стандартный вывод. Причем есть несколько вариантов. В самом простом варианте это должна быть просто одна строка, например:<br />
<span style="color: red;">DISK OK &#8211; free space: / 3326 MB (56%);</span><br />
Этот вывод будет показан в web интерфейсе. Кроме описания произведенной проверки и ее показателей, можно выводить статистику. для разделения вывода в web интерфейс и статистики используется символ | . Формат статистики:<br />
<span style="color: #ff9900;">&#8216;название&#8217;=значение[размерность];[warn];[crit];[min];[max]</span></p>
<p><strong>название</strong> &#8211; текстовое обозначение выводимой величины, например /, или &#8216;Disk /&#8217;. Замечу, что кавычки в названии требуются, только при использовании в нем пробела, знака равно или кавычек.<br />
<strong>значение</strong> &#8211; результат проверки.<br />
<strong>размерность</strong> &#8211; размерность не указывается для значений, показывающих число процессов, пользователей и т.п. Если значение в процентах, то и размерность нужно указать, как <strong>%</strong>. Аналогично для времени (<strong>s</strong>), размеров данных (<strong>B, KB, MB, TB</strong>). Для постоянно увеличивающихся счетчиков используется размерность <strong>c</strong>.<br />
<strong>warn</strong> &#8211; порог предупреждения<br />
<strong>crit</strong> &#8211; порог критического состояния<br />
<strong>min и max </strong>- допустимые минимальное и максимальное значения. Для размерности % указывать их не нужно понятно почему.</p>
<p>Можно выводить несколько параметров через пробел. Т.е. получается что-то такое:<br />
<span style="color: #ff0000;">DISKS OK &#8211; free space: / 3326 MB (56%); /home 184053 MB (27%)</span> | <span style="color: #ff9900;">/=2643MB;5948;5958;0;5968 /home=69357MB;253404;253409;0;253414</span><br />
Кроме того есть третий вариант, который работает в nagios 3.x. Помимо сообщения и статистики можно выводить длинное описание, еще несколько строк, как показано вот в этом примере:<br />
<span style="color: #ff0000;">DISK OK &#8211; free space: / 3326 MB (56%);</span> | <span style="color: #ff9900;">/=2643MB;5948;5958;0;5968</span><br />
<span style="color: #3366ff;">/ 15272 MB (77%);<br />
/boot 68 MB (69%);<br />
/home 69357 MB (27%);<br />
/var/log 819 MB (84%);</span> | <span style="color: #ff9900;">/boot=68MB;88;93;0;98<br />
/home=69357MB;253404;253409;0;253414<br />
/var/log=818MB;970;975;0;980</span><br />
Красным выделено сообщение, оранжевым статистика и синем длинное описание. Помните, я говорил, что сообщение выводится в web интерфейс, а тогда где используется статистика и длинное описание? На самом деле все несколько сложнее. Для обработка каждого из типов вывода используется отдельный макрос:</p>
<table border="1">
<tbody>
<tr>
<th>Макрос</th>
<th>Значение</th>
</tr>
<tr>
<td>$SERVICEOUTPUT$</td>
<td><span style="color: red;">DISK OK &#8211; free space: /  3326 MB (56%);</span></td>
</tr>
<tr>
<td>$SERVICEPERFDATA$</td>
<td><span style="color: #ffa500;">/=2643MB;5948;5958;0;5968 /boot=68MB;88;93;0;98 /home=69357MB;253404;253409;0;253414 /var/log=818MB;970;975;0;980</span></td>
</tr>
<tr>
<td>$LONGSERVICEOUTPUT$</td>
<td><span style="color: blue;">/ 15272 MB  (77%);\n/boot 68 MB (69%);\n/var/log 819 MB (84%);</span></td>
</tr>
</tbody>
</table>
<p>Например статистику можно использовать для построения графиков через команду <strong>service_perfdata_command</strong>.<br />
Теперь пожалуй с теории покончено, осталось только сказать, что в nagios есть механизм защиты от вывода слишком большого объема информации плагином, nagios прочитает только 4КБ данные, все остальное будет отброшено.</p>
<h3>Несколько советов о практике написания плагинов</h3>
<p>Чтобы запустить проверку, т.е. наш плагин, на удаленном сервере нужна некая служба, которая получает команды на запуск плагина от сервера nagios и отдает ему результат проверки. Различные варианты реализации такой службы я бы хотел вынести в отдельную статью, а сейчас давайте поговорим о другой проблеме.<br />
Многие проверки, например проверка состояния raid массива, требует прав суперпользователя. Т.е. у нас есть внешняя служба на сервер, которой с одной стороны очень не хочется давать права суперпользователя, а с другой проверки, которым эти права суперпользователя нужны!<br />
Есть два наиболее часто используемых варианта запуска на удаленном сервере плагина:<br />
1) Плагин check_by_ssh умеет запускать на удаленном сервере заданную команду, т.е. на сервере nagios запускается плагин check_by_ssh, которому в качестве параметров передается имя проверяемого хоста и команду, которую нужно запустить.<br />
2) Служба NRPE, на проверяемом сервере запускается служба NRPE, в ее настройках прописаны команды, которые может &#8220;попросить&#8221; выполнить сервера nagios. На стороне сервера проверка выполняется аналогично варианту с SSH, вызывается плагин check_by_nrpe с параметрами хоста и имени запускаемой команды.<br />
Теперь вернемся к нашей проблеме, нам нужно запустить проверку с правами суперпользователя.<br />
<strong>Вариант первый</strong> &#8211; путь камикадзе. Запускаем службу nrpe от имени root или разрешаем заход по ключу root с сервера nagios. Проблема решена, можно запускать любой плагин с правами суперпользователя. Теперь рассмотрим проблемы с безопасностью, который возникают при таком решении. Запуск любой внешней службы с правами суперпользователя всегда потенциально опасен, если в ней есть критическая уязвимость, то получить после удачного эксплойда права nobody и права root &#8211; это две большие разницы. В принципе при жесткой настройке правил фаервола для nrpe, такой вариант имеет права на жизнь, но с точки зрения системного подхода к обеспечению безопасности это явный fail. Для check_by_ssh вроде бы такой проблемы нет. Но подумайте вот о чем, если сервера nagios будет взломан, то с большой вероятностью злоумышленник получит доступ на все остальные ваши сервера!<br />
<strong>Вариант второй &#8211; sudo</strong>. Данный вариант уже намного лучше. На проверяемом сервере создается пользователь nagios, под которым запускается nrpe или по ключу которого заходит по ssh сервер nagios. В sudo в настройках прописаны правила запуска плагинов проверки для пользователя nagios. Такой вариант намного лучше с точки зрения безопасности, но в данном варианте атака может быть направлена на запускаемый плагин. Атака маловероятная, но возможная. При грамотной настройке фаервола и прочих мерах безопасности данный вариант наиболее часто используется на практике.<br />
<strong>Вариант третий</strong> &#8211; разделение логики проверки на собственно проверку и получение данных сервером nagios. Т.е. плагин, который мы пишем имеет два варианта запуска. В одном он выполняет проверку с правами root и сохраняет результат в какой-то файл. Права на файл выставляются так, чтобы пользователь, от имени которого запускаются проверки, мог прочитать этот файл. Эта проверка запускается через cron. Второй же вариант запуска нужен для чтения фала с результатами проверки. Из нюансов &#8211; нужно помнить, что плагин должен уметь проверять время создания файла, так чтобы не получилось, что проверка по какой-то причине давно не работает, а плагин раз за разом читает давно созданный файл и сообщает, что все ОК. Вариант с разделенной логикой наиболее безопасен, но распространен не очень сильно, так как под него придется переписывать все распространенные плагины.<br />
Вот наверное и все, что нужно для начала написания своего плагина.</p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/439/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Мониторинг загрузки процессора в nagios</title>
		<link>http://mysyslog.ru/posts/108</link>
		<comments>http://mysyslog.ru/posts/108#comments</comments>
		<pubDate>Sat, 21 Feb 2009 22:53:48 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[nrpe]]></category>
		<category><![CDATA[pnp4nagios]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=108</guid>
		<description><![CDATA[В состав плагинов nagios уже входит бинарная программа check_load, которая показывает текущую нагрузку на систему (load average). Но кроме того, есть распределение утилизации процессора между user space, system space, ожиданием io и бездействием. Это параметры тоже полезны при анализе нагрузки на сервер.
Готового решения я не нашел, так что сделаем все самостоятельно.

Для решения поставленной задачи нужно [...]]]></description>
			<content:encoded><![CDATA[<p>В состав плагинов nagios уже входит бинарная программа check_load, которая показывает текущую нагрузку на систему (load average). Но кроме того, есть распределение утилизации процессора между user space, system space, ожиданием io и бездействием. Это параметры тоже полезны при анализе нагрузки на сервер.<br />
Готового решения я не нашел, так что сделаем все самостоятельно.<br />
<span id="more-108"></span><br />
Для решения поставленной задачи нужно решить несколько отдельных подзадач:</p>
<ol>
<li>Собрать статистику утилизации CPU</li>
<li>Написать скрипт, который будет отдавать эту статистику в формате nagios</li>
<li>Настроить команды и сервисы nagios</li>
<li>Построить красивые графики</li>
</ol>
<div style="float:left; width:265px; height:265px;">
<script type="text/javascript"><!--
google_ad_client = "pub-5926413875763738";
/* wp-post-250x250 */
google_ad_slot = "6534377323";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<h3>Собираем статистику утилизации CPU</h3>
<p>Обязательным требованием при сборе любой статистики является время. Т.е. статистику нужно собирать в течение достаточно продолжительного периода времени, чтобы полученные данные отражали реально происходящие процессы, а не какие-то промежуточные состояния при одиночной проверке состояния. Или частота проверки должна примерно соответствовать частоте изменения данных. Для утилизации процессора это выглядит так: частота изменений утилизации процессора составляет доли секунд, частота проверки nagios &#8211; несколько минут. Обычный подход nagios &#8220;зайти и проверить&#8221; не подходит.</p>
<p>Можно подключиться к серверу по ssh/nrpe и запустить проверку, скажем на минуту. Такой вариант отвратителен. Остается другой способ &#8211; статистика уже должна быть на сервере, nagios только забирает ее. Для этого замечательно подходит утилита sar. Напишем небольшой скрипт, который будет создавать файл со статистикой. Скрипт запускаем через крон каждую минуту.</p>
<pre lang="bash">#!/bin/bash
LOCKFILE=/var/run/cpu-usage.sh.lock
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if [ -f $LOCKFILE ]; then
        exit 0;
fi
printf $$ &gt; $LOCKFILE
TIME=55
SARDATA=`sar -u $TIME | fgrep Average | awk '{print "user:" $3 ";system:" $5 ";iowait:" $6 ";idle:" $8}'`
SARFILE=/var/sar-cpu-usage
printf $SARDATA &gt; $SARFILE
rm $LOCKFILE</pre>
<p>В результате мы получим текстовый файл. Формат у файла очень простой, плагину nagios нужно будет только прочитать содержимое файла и вывести необходимые данные.<br />
<a href="http://mysyslog.ru/wp-content/uploads/2009/02/1.png"><img class="alignnone size-full wp-image-119" title="script output" src="http://mysyslog.ru/wp-content/uploads/2009/02/1.png" alt="script output" width="327" height="51" /></a></p>
<h3>Пишем плагин для nagios</h3>
<p>Сам скрипт достаточно прост, его нужно разместить на проверяемой машине.</p>
<pre lang="perl">#!/usr/bin/perl -w
use strict;
my $file = '/var/sar-cpu-usage';
my $line;                       

open FD, $file;
$line = ;
close FD;

my ($user, $system, $iowait, $idle, $nagios_data, $nagios_status, $exit_code);
my @arg;
@arg = split(/;/, $line);

# user
$arg[0] =~ /^user:(.*)$/;
$user = $1;
# system
$arg[1] =~ /^system:(.*)$/;
$system = $1;
# iowait
$arg[2] =~ /^iowait:(.*)$/;
$iowait = $1;
# idle
$arg[3] =~ /^idle:(.*)$/;
$idle = $1;

$nagios_data = sprintf("|user=%f;;; system=%f;;; iowait=%f;;; idle=%f;;; ",$user,$system,$iowait,$idle);
if ( $idle == 0 ) {
        $nagios_status = "CPU status: CRITICAL, idle $idle %";
        $exit_code = 2;
} elsif ( $idle &lt; 5 ) {
        $nagios_status = "CPU status: WARNING, idle $idle %";
        $exit_code = 1;
} else {
        $nagios_status = "CPU status: OK, idle $idle %";
        $exit_code = 0;
}

print $nagios_status . $nagios_data;
exit $exit_code;</pre>
<p>В результате получаем вот такой вывод скрипта:<br />
<a href="http://mysyslog.ru/wp-content/uploads/2009/02/cpu_usage.png"><img class="alignleft size-full wp-image-137" title="cpu_usage" src="http://mysyslog.ru/wp-content/uploads/2009/02/cpu_usage.png" alt="cpu_usage" width="723" height="36" /></a></p>
<h3>Настраиваем nrpe и nagios</h3>
<p>Первым делом нужно настроить nrpe на проверяемой машине, точнее добавить команду для проверки, так как я предполагаю, что сам nrpe уже был настроен. Добавляем в nrpe.cfg строчку:</p>
<pre>command[check_cpu_usage]=/usr/nagios/libexec/check_cpu_usage</pre>
<p>Теперь нужно настроить сервер nagios. Нужно добавить команду для проверки и сервис для проверяемого хоста.<br />
Добавляем в описание команды и сервиса:</p>
<pre>define command {
command_name check_nrpe_cpu_usage
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -p 5666 -t 60 -c check_cpu_usage
}

define service{
use template
host_name server.host-name.ru
service_description cpu usage
check_command check_nrpe_cpu_usage
}</pre>
<p>На этом настройка nagios закончена. Напомню только, что <strong>use  template</strong> требует определения шаблона под именем template. Но не спешите перегружать nagios.</p>
<h3>Строим графики при помощи pnp4nagios</h3>
<p>Я долгое время использовал nagios исключительно, как средство мониторинга текущего состояния, но в какой-то момент понял, что иногда хочу узнать что было с серверов в 5 часов утра. Из всех средств nagios предоставлял только логи алертов, чего, мягко говоря, мало. Пересмотрев несколько решений и попробовав написать свое, я остановился на php4nagios. Настройку его я пропущу здесь, расскажу только про настройку под рассматриваемую задачу.<br />
Первым делом нужно создать файл настройки rrd базы, которую создаст php4nagios по данным от плагинов nagios.  pnp ищет настройки в каталоге /etc/pnp/check_commands/ (так на gentoo). Файл настройки называется по имени команды (command_name) в настройках nagios. В нашем случае это check_nrpe_cpu_usage. Так что файл конфигурации будет называться /etc/pnp/check_commands/check_nrpe_cpu_usage.cfg :</p>
<pre>CUSTOM_TEMPLATE = 0
DATATYPE = GAUGE,GAUGE,GAUGE,GAUGE</pre>
<p>CUSTOM_TEMPLATE &#8211; определяет имя темплейта для построения графика из rrd файла. Цифры определяют имя темплейта. 0 &#8211; имя команды проверки, 1 &#8211; первый параметр команды. 2 &#8211; второй и так далее. Указываются через запятую.</p>
<pre>CUSTOM_TEMPLATE=0,1,2</pre>
<p>DATATYPE &#8211; определяет тип счетчика rrd, Счетчики передаются плагином nagios после пайпа (|)</p>
<pre>|user=15.810000;;; system=1.430000;;; iowait=1.380000;;; idle=81.380000;;;</pre>
<p>user &#8211; первый счетчик, system &#8211; второй и так далее. Плагин может возвращать данные и в таком формате <strong>user=15.810000;60;90;</strong>. 60 &#8211; значение для статуса проверки WARNING, 90 &#8211; для CRITICAL. Эти значения тоже могут быть использованы при построения графиков. Возвращаясь к DATATYPE. Каждое значение DATATYPE, которое тоже указывается через запятую,  определяет один за другим типы счетчиков.</p>
<pre>DATATYPE = GAUGE,GAUGE,GAUGE,GAUGE</pre>
<p>В нашем случае все счетчики имеют тип GAUGE (подробнее про типа <a href="http://bozza.ru/?c=230&amp;p=content">тут</a>). Первый шаг сделан. Теперь нужно создать темплейт для отображения. Темплейты &#8211; это php файлы, в которых описаны команды, передаваемые rrdtool для генерации графиков. Для Gentoo они находятся в каталоге /usr/share/pnp/templates . Имя темплейта определяется по имени команды для проверки в настройках nagios, в нашем случае это будет опять check_nrpe_cpu_usage, и полный путь до файла будет /usr/share/pnp/templates/check_nrpe_cpu_usage.php. Рассказывать про rrdtool я не буду, так как это совсем отдельная тема, приведу файл, который использую я:</p>
<pre lang="php">&lt;?php
$opt[1] = "--slope-mode --vertical-label % --title \"CPU usage for $hostname\"";

$def[1] = "DEF:var1=$rrdfile:$DS[1]:AVERAGE " ;
$def[1] .= "DEF:var2=$rrdfile:$DS[2]:AVERAGE " ;
$def[1] .= "DEF:var3=$rrdfile:$DS[3]:AVERAGE " ;
$def[1] .= "DEF:var4=$rrdfile:$DS[4]:AVERAGE " ;

$def[1] .= "AREA:var4#00FF00:\"idle  \" ";
$def[1] .= "GPRINT:var4:MAX:\"\t%.1lf  max \" ";
$def[1] .= "GPRINT:var4:AVERAGE:\"%.1lf  average \" ";
$def[1] .= "GPRINT:var4:LAST:\"%.1lf  last \\n\" ";

$def[1] .= "AREA:var3#FF0000:\"iowait\" ";
$def[1] .= "GPRINT:var3:MAX:\"\t%.1lf  max \" ";
$def[1] .= "GPRINT:var3:AVERAGE:\"%.1lf  average \" ";
$def[1] .= "GPRINT:var3:LAST:\"%.1lf  last \\n\" ";

$def[1] .= "AREA:var1#FFFF00:\"user  \" ";
$def[1] .= "GPRINT:var1:MAX:\"\t%.1lf  max \" ";
$def[1] .= "GPRINT:var1:AVERAGE:\"%.1lf  average \" ";
$def[1] .= "GPRINT:var1:LAST:\"%.1lf  last \\n\" ";

$def[1] .= "AREA:var2#0000FF:\"system\" ";
$def[1] .= "GPRINT:var2:MAX:\"\t%.1lf  max \" ";
$def[1] .= "GPRINT:var2:AVERAGE:\"%.1lf  average \" ";
$def[1] .= "GPRINT:var2:LAST:\"%.1lf  last \\n\" ";

$def[1] .= "LINE1:var4#00FF00: ";
$def[1] .= "LINE1:var1#FFFF00: ";
$def[1] .= "LINE1:var2#0000FF: ";
$def[1] .= "LINE1:var3#FF0000: ";
?&gt;</pre>
<p>Теперь перезапускаем nrpe на проверяемой машине и nagios на сервера мониторинга, ждем какое-то время. В результате получается вот такая картинка:</p>
<p style="text-align: center;"><a href="http://mysyslog.ru/wp-content/uploads/2009/02/cpu_usage_graph.png"><img class="size-medium wp-image-152 aligncenter" title="cpu_usage_graph" src="http://mysyslog.ru/wp-content/uploads/2009/02/cpu_usage_graph-300x111.png" alt="cpu_usage_graph" width="300" height="111" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/108/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>check_by_ssh VS check_nrpe</title>
		<link>http://mysyslog.ru/posts/105</link>
		<comments>http://mysyslog.ru/posts/105#comments</comments>
		<pubDate>Thu, 19 Feb 2009 12:00:16 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Советы]]></category>
		<category><![CDATA[nagios]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=105</guid>
		<description><![CDATA[Nagios и его система плагинов очень гибки. Для получения данных с удаленной машины можно использовать SNMP, запускать скрипты по SSH, или через NRPE. Можно даже написать web службу, которая будет отдавать xml, а плагин nagios считывать его по http&#8230; т.е. в качестве плагина к nagios можно прицепить почти все, что угодно. Но как правило &#8220;велосипеды&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Nagios и его система плагинов очень гибки. Для получения данных с удаленной машины можно использовать SNMP, запускать скрипты по SSH, или через NRPE. Можно даже написать web службу, которая будет отдавать xml, а плагин nagios считывать его по http&#8230; т.е. в качестве плагина к nagios можно прицепить почти все, что угодно. Но как правило &#8220;велосипеды&#8221; причиняют только лишнюю головную боль, когда есть проверенные стандартные средства. </p>
<p>Стандартные средства &#8211; это SNMP, ssh и nrpe. Посмотрим на них более внимательно.<br />
<span id="more-105"></span><br />
SNMP &#8211;  замечательный протокол для управления сетевыми устройствами и получения данных об их работе, но для мониторинга unix серверов не очень подходит. Поясню почему. SNMP позволяет получить обширный объем информации, но зачастую при мониторинге серверов нужно проверять какой-то специфичный сервис, для которого нет MIB-a. Это можно обойти, создав свой MIB и агента для него, вот в этой <a href="http://mysqldump.azundris.com/archives/63-Sysadmins-Nightly-Mental-Pain-SNMP.html">статье</a> рассказано, как это сделать для MYSQL. Судя по статье работы там не мало, а результат тот же самый, что и при использовании ssh или nrpe. Т.е. лучше SNMP оставить сетевым устройствам и сосредоточиться на написании скриптов для получения данных сервисов, а не на доставке этих данных nagios.</p>
<p>Плагины check_by_ssh и check_nrpe фактически выполняют одну и ту же функцию, запускают на удаленной машине другие плагины nagios для проверки служб сервера. При проверке через ssh используется достаточно много ресурсов, как проверяемого, так и проверяющего сервера. В первую очередь CPU. Это не будет минусом на сервера nagios с небольшим числом проверяемых хостов и сервисов. Но сервер для сервера, проверяющего сотни и сотни хостов, это может стать узким местом. Основной целью создания NRPE как раз и было получение более &#8220;легкого&#8221; механизма проверки ресурсов на уделенных серверах.</p>
<p>Минусом считается безопасность. Но мне это утверждение кажется достаточно надуманным, так как соединение между nagios и проверяемым сервером шифруется при помощи SSL. Более того, демон NRPE размещается на отдельном tcp порту, который нужно закрыть фаерволом от всех, кроме сервера nagios. Уже двух этих мер хватает, чтобы сделать NRPE таким же безопасным, как и ssh.<br />
Из минусов &#8211; необходимость установки демона на всех проверяемых серверах, раскидывание конфигов. Но это как раз и есть работа администратора, пусть и не самая приятная и интеллектуальная. Т.е. при выборе механизма удаленного запуска плагинов nagios лучше выбрать nrpe, чем ssh или snmp. </p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/105/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
