Мониторинг количества активных хостов в сети

Очередная удачная статья с Хабры, очень полезно, запишу себе на манжете... Далее излагает автор...
Недавно передо мной встала задача определения количества включенных компьютеров в нескольких подсетях нашей организации. Сеть ужасно запущена: нет ни домена, ни средств удаленной установки, поэтому поставить на все компьютеры агент мониторинга не было возможности. С другой стороны, на многих компьютерах был включен файрвол, из-за чего компьютеры не отвечали на ping-запрос.
Для решения этой задачи я использовал замечательную утилиту arping.

Arping работает на втором уровне модели OSI и не блокируется файрволом, т.к. компьютер должен отвечать на ARP-запросы, чтобы до него доходили IP-пакеты. Минусом arping по сравнению с ping является то, что arping работает в пределах одной локальной сети и не маршрутизируется. Однако это ограничение можно обойти с помощью проксирования ARP.

Для начала я написал простенький скрипт на PHP (это единственный язык, который я знаю ☺), использующий arping. Задаются сети и маски, и скрипт в цикле пингует каждый IP-адрес в них:

    


Но конечно, такой скрипт не годится для постоянного мониторинга. Во-первых, хотелось бы, чтобы он работал постоянно в фоновом режиме. Во-вторых, проверку нужно проводить в несколько потоков — так быстрее.

В итоге я переписал скрипт так:

  • Настройки и адреса сетей считываются из ini-файла.
  • «Папа»-скрипт запускает экземпляр дочернего скрипта для каждой сети и контролирует его работу.
  • Дочерний скрипт проверяет все адреса своей сети по кругу и обновляет информацию в Memcached. Помимо количества активных узлов запоминается их mac, dns и netbios имя.
  • Из memcached эти данные можно посмотреть на веб-странице или в zabbix.


Можно посмотреть список компьютеров в аскетичном веб-интерфейсе:

Просмотреть полностью

Также я добавил график в Zabbix.

Просмотреть полностью

Для этого необходимо дописать в файл zabbix_agentd.conf строчку для каждой сети:

UserParameter=network_count.net_name,/usr/local/bin/php /путь до скрипта/get_network_stats.php net_name


На сервере добавить соответствующие item'ы.

Просмотреть полностью

И настроить график.
Скрипт get_network_stats.php <имя_сети> выдает количество активных хостов по имени сети. Я думаю, пользователи других систем мониторинга смогут без труда прикрутить к ним этот скрипт.

Исходник приводить не буду, т.к. он большой. Скачайте его — readme прилагается.

Скрипт мониторинга количества сети

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




Вас также может заинтересовать:

Http-сервер nginx обслуживает более половины хостов рунета
Мониторинг Nginx с помощью MRTG
Мониторинг Sphinx с помощью MRTG
Простой мониторинг нагрузки на сервер в реальном времени с веб-интерфейсом
NRPE - мониторинг удаленных (недоступных извне) серверов средствами Nagios
Мониторинг загрузки многоядерного сервера по каждому ядру в отдельности в Linux