DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической настройки узла) — сетевой протокол, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к так называемому серверу DHCP.
В качестве DHCP сервера на CentOS 6 как правило используется ISC DHCP 4.x.
Демон имеет массу «полезных» фич и достаточное количество недостатков, одним из которых является отсутствие мониторинга. С последней проблемой можно успешно справиться с помощью небольшого набора скриптов.
В мониторинге меня интересует два набора параметров:
- Мониторинг работы демона (количество dhcpdiscover, dhcpinform и т.д.)
- Состояние динамических пулов (Active leases, Pool size и т.д)
1. Мониторинг работы демона
Так как штатных средств для мониторинга у демона нет, мы будем парсить логи. Несмотря на явный костыль, решение показало свою эффективность при достаточно больших нагрузках.
- Для начала зарегистрируем логи в отдельный поток syslog.
[root@dhcp]# grep "log-facility" dhcpd.conf log-facility local5;
- В syslog, для удобства, направим поток в отдельный файл:
[root@dhcp etc]# grep "local5.*" /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none;local5.none /var/log/messages local5.* /var/log/dhcp/dhcpd.log
- Сразу добавим скрипт для ротации логов, иначе оно когда-нибудь кончится.
[root@dhcp logrotate.d]# cat /etc/logrotate.d/dhcpd /var/log/dhcp/dhcpd.log { rotate 4 missingok daily sharedscripts create 0644 root root postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
- В /etc/snmp/ создаем скрипт «dhcpd_stat» (с атрибутами 755), который будет заниматься непосредственно парсингом логов:
[root@dhcp snmp]# cat /etc/snmp/dhcpd_stat export LANG=n_US.UTF-8 FILENAME=$(find /var/log/dhcp/ -mmin -10 -type f -name "dhcp*") tail -n 150000 $FILENAME>/tmp/stat.log TIME=$(date -d '5 min ago' '+%b %e %H:%M'); TIME_NOW=$(date '+%b %e %H:%M'); awk "/$TIME/,/$TIME_NOW/" /tmp/stat.log > /tmp/stat.st DHCPDISCOVER=$(grep DHCPDISCOVER /tmp/stat.st|wc -l) DHCPREQUEST=$(grep DHCPREQUEST /tmp/stat.st|wc -l) DHCPACK=$(grep DHCPACK /tmp/stat.st|wc -l) DHCPOFFER=$(grep DHCPOFFER /tmp/stat.st|wc -l) DHCPINFORM=$(grep DHCPINFORM /tmp/stat.st|wc -l) DHCPNACK=$(grep DHCPNACK /tmp/stat.st|wc -l) DHCPDECLINE=$(grep DHCPDECLINE /tmp/stat.st|wc -l) DHCPRELEASE=$(grep DHCPRELEASE /tmp/stat.st|wc -l) echo DHCPDISCOVER:$DHCPDISCOVER DHCPREQUEST:$DHCPREQUEST DHCPACK:$DHCPACK DHCPOFFER:$DHCPOFFER DHCPINFORM:$DHCPINFORM DHCPNACK:$DHCPNACK DHCPDECLINE:$DHCPDECLINE DHCPRELEASE:$DHCPRELEASE
- В случае, если мы сделал все верно, скрипт должен показать примерно такой вывод:
[root@dhcp snmp]# ./dhcpd_stat DHCPDISCOVER:3331 DHCPREQUEST:2006 DHCPACK:1938 DHCPOFFER:3294 DHCPINFORM:7525 DHCPNACK:0 DHCPDECLINE:54 DHCPRELEASE:6
- Добавляем «exec» в snmpd.conf, перезапускаем snmpd и делаем проверку:
[root@dhcp snmp]# grep "exec dhcpd_stat" snmpd.conf exec dhcpd_stat /bin/sh /etc/snmp/dhcpd_stat [root@dhcpd snmp]# service snmpd restart Останавливается snmpd: [ OK ] Запускается snmpd: [ OK ] Проверяем с хоста мониторинга: [root@cacti scripts]# snmpwalk -v2c -c communiti dhcp_ip UCD-SNMP-MIB::extOutput.1 UCD-SNMP-MIB::extOutput.1 = STRING: DHCPDISCOVER:3810 DHCPREQUEST:1954 DHCPACK:1885 DHCPOFFER:3769 DHCPINFORM:7553 DHCPNACK:0 DHCPDECLINE:44 DHCPRELEASE:2
- Импортируем шаблон «cacti_graph_template_6_linux_dhcpd_daemon_-_server_stat.xml» в систему мониторинга, переносим «query_dhcpd_server.php» в «cacti/scripts» и добавляем шаблон «6 Linux DHCPD Daemon — server stat» к нужному хосту.
В итоге, в зависимости от схемы работы сервера, должен появиться примерно такой график:
2. Состояние динамических пулов.
Состояние динамических полов будем парсить из лиз, при помощи готового инструмента от net-track GmbH.
В частности, интересует лишь один перловый скрипт «dhcpd-snmp»
- Скачиваем скрипт, в dhcpd-snmp.conf прописываем по аналогии сети:
#cd /etc/snmpd/ #wget https://github.com/spions/cacti_isc_dhcp/raw/master/dhcpd-snmp #chmod 755 dhcpd-snmp #wget https://github.com/spions/cacti_isc_dhcp/raw/master/dhcpd-snmp.conf
- Вносим изменение в snmpd.conf, перезапускаем snmpd демона.
# grep "pass_persist" snmpd.conf pass_persist .1.3.6.1.4.1.21695.1.2 /etc/snmp/dhcpd-snmp /etc/snmp/dhcpd-snmp.conf
- Если все сделано верно, то с хоста мониторинга можно получить примерно такую статистику:
$ snmpwalk -v2c -c communiti host .1.3.6.1.4.1.21695.1.2 SNMPv2-SMI::enterprises.21695.1.2.1 = INTEGER: 3 SNMPv2-SMI::enterprises.21695.1.2.2.1.1 = INTEGER: 1 SNMPv2-SMI::enterprises.21695.1.2.2.1.2 = INTEGER: 2 SNMPv2-SMI::enterprises.21695.1.2.2.1.3 = INTEGER: 3 SNMPv2-SMI::enterprises.21695.1.2.2.2.1 = STRING: "pool: 10.0.0.0-10.255.255.255" SNMPv2-SMI::enterprises.21695.1.2.2.3.1 = INTEGER: 2031 SNMPv2-SMI::enterprises.21695.1.2.2.4.1 = INTEGER: 1486 SNMPv2-SMI::enterprises.21695.1.2.2.5.1 = INTEGER: 545 SNMPv2-SMI::enterprises.21695.1.2.2.6.1 = INTEGER: 545
Как мы делали ранее, добавляем в кактус шаблон cacti_graph_template_6_linux_dhcpd_pool_statistics.xml и создаем график для необходимого хоста.
Дополнительные материалы по посту, можно найти на https://github.com/spions/