В
вычислительных сетях с большим количеством устройств (например, сеть
банкоматов или сетевых устройств) часто требуется мониторинг доступности
узлов с возможностью сбора и графического отображения статистической
информации по задержкам и потерям пакетов в канале до данных узлов.
Иногда список устройств для которого требуется мониторинг доступности
бывает динамическим, то есть может периодически меняться как сам список
устройств, так и их ИП-адреса или названия.
В данной статье мы решили описать решение этой задачи при помощи системы мониторинга 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. Графики по задержкам и потерям пакетов в канале до определенного узла.