воскресенье, 1 августа 2010 г.

Следим за нагрузкой на сетевых интерфейсах с помощью Nagios, Nagiosgraph, check_iftraffic3, snmp на FreeBSD

Итак!

Нам необходимо наблюдать скорость на сетевых интерфейсах и наблюдать все это дело визуально с помощью nagiosgraph.

Про установку и настройку Nagios`a и Nagiosgraph писать смысла не вижу, интернет полон подробными HowTo, но к сожалению в них описана только базовая настройка с базовыми плагинами идущими вместе с nagios.

Все опыты проводились на:

#uname -a

FreeBSD xxxx.ru 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #3: Mon May 24 10:52:57 NOVST 2010 root@xxxx.ru:/usr/obj/usr/src/sys/GENERIC i386

Первым делом качаем сам плагин check_iftraffic3.pl.

После скачивания его нужно перенести в директорию /usr/local/libexec/nagios. Это директория является по умолчанию местом где лежат все плагины Nagios`a. У вас может быть по другому.

Меняем владельца и группу на этот плагин и делаем его исполняемым.

# chown nagios:nagios /usr/local/libexec/nagios/check_iftraffic3.pl

# chmod 744 /usr/local/libexec/nagios/check_traffic3.pl

Важное замечание! Данный плагин как и любой другой можно запустить с консоли ручками, но когда я тестил его, я натнулся на грабли, а именно, в консоли плагин срабатывал как нужно, но в nagios`e постоянно была ошибка. Я долго не мог понять в чем дело пока не посмотрел содержимое плагина. Там есть такая сторка my $TRAFFIC_FILE = "/tmp/traffic";. В этот временный файл плагин пишет всю собранную информацию. И так как плагин я вручную запускал с правами root`a соответственно и владельцем временного файла был root:wheel и nagios не мог получить доступ к нему. Лечилось это простым удалением файла из каталога tmp и при последующем вызове плагина nagios`om файл создавался с нужными правами.

Теперь немного про настройку конфигурационных файлов nagios`a:

После того как мы добавили плагин в соответствующую директорию его необходимо описать в файле /usr/local/etc/nagios/objects/commands.cfg

Я описал следующим образом:


define command{
command_name check_traffic
command_line $USER1$/check_iftraffic3.pl -H $ARG1$ -C $ARG2$ -i $ARG3$ -B -b 100
}

Сдесь $USER1$ это путь до папки с плагинами, $ARG1$ - аргумент передает имя хоста, $ARG2$ - аргумент передает SNMP коммунити, $ARG3$ имя интерфейса в системе. Ключ -B говорит об отбражении результатов в bits per seconds, -b 100 говорит о том что у нас интерфейс 100 мегабитный

Итак, команду мы описали, далее нам нужно её где то использовать. Я надеюсь у вас описание каждого хоста, за которым ведется наблюдение, описан в отдельном конфигурационном файле.

Для примера:

У меня есть файл /usr/local/et/nagios/object/localhost.cfg - этот конфигурационный файл описывает плагины для мониторинга только моего локального хоста, в него я и включил мониторинг за интерфейсами.

Вот так сделано у меня:


define service{
use local-service
host_name localhost
service_description IF_traffic_extIF
check_command check_traffic!localhost!vp5fDeTk!rl0
}

Мы описали сервис для локалхоста в котором команда проверки выглядит следующим образом:

check_command check_traffic!localhost!vp5fDeTk!rl0

Разберем строку 'check_traffic!localhost!vp5fDeTk!rl0'

check_traffic - это сама команда описаная ранее с файле commands.cfg, а localhost!vp5fDeTk!rl0 это передаваемые аргументы:

$ARG1$ это localhost

$ARG2$ это vp5fDeTk (мое SNMP коммунити, у вас другое!)

$ARG3$ это rl0 (название интерфейса в системе)

! - это разделитель меджу передаваемыми аргументами.

Итак. Все что нужно мы описали, пора проверить работу нашего плагина. Если мы все правильно сделали то после перезапуска nagios`a должны (не сразу) увидеть появившийся новый плагин в веб интерфейсе и его вывод:


Обратим внимание на строчку "Performance data:". Это данные нам и понадобятся для построения графика.

Переходим к настройке Nagiosgraph`a. Если он у вас не установлен тоу вас не будет строчки "Performance data:". Описывать установку его тут не буду все ставиться просто из портов,конфигурируется тоже не сложно, гуглите, информации полно.

Приступим!

Конфиги nagiosgraph`a находятся в /usr/local/etc/nagios/nagiosgraph.

Нас интересует файл map, и lables.conf. Эти конфиги должны быть раскомментированны в главном конфиг файле nagiosgrapf.conf.

Открываем файл map вашим любимым редактором, я использую встроенный редактор в mc, мне он удобнее всех.

В самом конце файла видим описание похожее на сбор данных с сетевого интерфейса:

# Service type: unix network
# output: Received 3956221475, Transmitted = 571374458
# perfdata: rbyte=3956221475 rpacket=36097353 rerr=0 rdrop=0 rmult=0 tbyte=571374458 tpacket=62062295 terr=6 tdrop=0 tmult=0
/perfdata:rbyte=([\d]+) rpacket=([\d]+) rerr=([\d]+) rdrop=([\d]+) rmult=([\d]+) tbyte=([\d]+) tpacket=([\d]+) terr=([\d]+) tdrop=([\d]+) tmult=([\d]+)/
and push @s, [ 'data',
[ 'byte_received', COUNTER, $1 ],
[ 'byte_transmitted', COUNTER, $6 ],
[ 'packet_received', COUNTER, $2 ],
[ 'packet_transmitted', COUNTER, $7 ],
[ 'error_received', COUNTER, $3 ],
[ 'error_transmitted', COUNTER, $8 ],
[ 'drop_received', COUNTER, $4 ],
[ 'drop_transmitted', COUNTER, $9 ],
[ 'multi_received', COUNTER, $5 ],
[ 'multi_transmitted', COUNTER, $10 ]];


Нас интересует строка /perfdata:rbyte=([\d]+) rpacket=([\d]+) rerr=([\d]+) rdrop=([\d]+) rmult=([\d]+) tbyte=([\d]+) tpacket=([\d]+) terr=([\d]+) tdrop=([\d]+) tmult=([\d]+).

Но в выводе плагина на веб интерфейс мы видим другую картину.

Performance Data: inUsage=0.93%;85;98 outUsage=0.08%;85;98 inBandwidth=955.04Kbs outBandwidth=79.2Kbs inAbsolut=3451393974 outAbsolut=1392289706.

То есть переменные описанные по дефолту не совпадают с тем что нам выдает плагин. Не беда, напишем описание сами!

Дефолтное описание оставляем так как есть, после него добавим:

/perfdata:inUsage=([.\d]+)%;(\d+);(\d+) outUsage=([.\d]+)%;(\d+);(\d+) inBandwidth=([.\d]+)Kbs outBandwidth=([.\d]+)Kbs inAbsolut=(\d+) outAbsolut=(\d+)/
and push @s, [ 'data',
[ 'Input_Bandwidth', GAUGE, $7 ],
[ 'Output_Bandwidth', GAUGE, $8 ]];

Меня интересует только скорость передачи на интерфейсе, поэтому для построения графика я выбрал 2 пункта :

[ 'Input_Bandwidth', GAUGE, $7 ],
[ 'Output_Bandwidth', GAUGE, $8 ]

Переменные $7 и $8 это значения inBandwidth=([.\d]+)Kbs outBandwidth=([.\d]+)Kbs 7ое и 8ое по счету слева направо, не ошибитесь каждое ([.\d]+) или (\d) считается за отдельное значение. Также будте внимательны при описании графика, лишний пробел и вы не получите никаких данных.

Итак, описание графика мы добавили, добавим леблы в конец файла labels.conf

Input_Usage = Input Usage
Output_Usage = Output Usage
Input_Bandwidth = Input Bandwidth
Output_Bandwidth = Output Bandwidth
Input_Absolut = Input Absolut
Output_Absolut = Output Absolut

На этом все. Если графики не создаются, то вы где то ошиблись в файле map. Если же вы все делали внимательно то у вас должно получиться что то вроде этого:

Данные идут в Kbs как подписать это на графике пока не придумал :)




3 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. доустановил, заработало:
    rpm -Uhv perl-Net-DNS-0.59-3.el5.i386.rpm
    rpm -Uhv perl-Net-IP-1.25-2.fc6.noarch.rpm

    ОтветитьУдалить
  3. а какие параметры должны быть при 10G интерфейсах? пробывал -b 10000 -u m, такую ерунду показывает ...

    ОтветитьУдалить