понедельник, 20 мая 2013 г.

Автоматизация мониторинга доступности динамического списка серверов и сетевых устройств в системе мониторинга Zabbix


В вычислительных сетях с большим количеством устройств (например, сеть банкоматов или сетевых устройств) часто требуется мониторинг доступности узлов с возможностью сбора и графического отображения статистической информации по задержкам и потерям пакетов в канале до данных узлов. Иногда список устройств для которого требуется мониторинг доступности бывает динамическим, то есть может периодически меняться как сам список устройств, так и их ИП-адреса или названия.


В данной статье мы решили описать решение этой задачи при помощи системы мониторинга Zabbix.


В Zabbix-е начиная с версии 2.0 доступна новая функция: низкоуровневое обнаружение.
Низкоуровневое обнаружение предоставляет возможность автоматического создания элементов данных, триггеров и графиков для разных ресурсов на компьютере. Так, в дистрибутив включена возможность автоматического обнаружения сетевых интерфейсов и дисков на сервере. Рассмотрим, как ещё можно применять данную возможность.


Есть задача осуществлять мониторинг доступности серверов - порядка 200-300 единиц. Допустим, что требуется раз в 2 минуты с серверов клиента проверять их доступность по сети, время отклика и потери пакетов. По всем параметрам должна собираться и графически отображаться статистика. При этом список серверов обновляется динамически в текстовом файле выглядящем следующим образом::
имя_сервера1 192.168.1.11
имя_сервера2 192.168.2.22
и т.д.


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


#!/usr/bin/perl

$latest_file=`ip.servers.lst`;  # Текстовый файл с динамическим списком узлов

print "{\n";
print "\t\"data\":[\n\n";

for (`cat $latest_file`)
{
    ($clname, $clip) = m/\S_(\S+) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/; # $clname - имя сервера, $clip - его IP-адрес

   print "\t{\n";
   print "\t\t\"{#CLNAME}\":\"$clname\",\n";
   print "\t\t\"{#CLIP}\":\"$clip\"\n";
   print "\t},\n";
}

print "\t]\n";
print "}\n";


Вывод этого скрипта будет примерно таким:
{
       "data":[
       {
               "{#CLNAME}":"server_name1",
               "{#CLIP}":"192.168.1.11"
       },
       {
               "{#CLNAME}":"server_name2",
               "{#CLIP}":"192.168.2.22"
       },



       ]
}


Добавляем скрипт в конфигурацию агента Zabbix zabbix_agentd.conf  в разделе UserParameter:
UserParameter=cl.discovery,/home/zabbix/cl.discovery.pl


В web-интерфейсе Zabbix-сервера создаем правило “create discovery rule” (Рис. 1) для хоста, с которого осуществляется мониторинг серверов и сети:
  • Name discovery clients
  • Type zabbix agent
  • Key такой же, что указан в UserParameter (cl.discovery)
  • Keep lost resources period (in days) 0 (если не хотим хранить информацию о серверах, которые не требуется мониторить)

     
Рисунок 1. Правило “create discovery rule”


В разделе Item prototypes (Рис. 2) создаем прототипы требуемых элементов данных (create item prototype):
Для времени отклика:
  • Name ICMP ping response time to {#CLNAME} {#CLIP}
  • Type Zabbix trapper
  • Key cl.icmppingsec[{#CLIP}]
  • Type of information Numeric(float)
  • Units ms

Рисунок 2. Раздел Item prototypes.


Для потерь пакетов:
  • ICMP ping percentage of loss packets {#CLNAME} {#CLIP}
  • Type Zabbix trapper
  • Key cl.icmppingloss[{#CLIP}]
  • Type of information Numeric(float)
  • Units %


В разделе Graph prototypes (Рис. 3) создаем (create graph prototype) прототип графиков привязанные к созданным прототипаv элементов данных.


Рисунок 3. Разделе Graph prototypes.


В разделе Trigger prototypes создаём прототипы тригеров к созданным прототипам элементов данных.


Теперь при изменении списка с серверами в zabbix-сервере автоматически будут создаваться и удаляться соответствующие элементы данных и графики (Рис. 4).


Рисунок 4. Графики по задержкам и потерям пакетов в канале до определенного узла.

C уважением,
Компания ITRM