When I tried to monitor the IP address allocation status on the ISC DHCP server with ZABBIX, for some reason I could only find an example of using a fairly large script written in Perl etc., so I implemented it myself using WAK I tried it.
In the shell script saved in / usr / local / bin / dhcpd_status
, ISC DHCP release record (dhcpd.leases) is analyzed by awk and used (active), released (free), unassigned (noassign), Shows each available and the number allocated to the pool (quota).
/usr/local/bin/dhcpd_status
#!/bin/sh
pattern=`echo -n "${1}"|sed -e 's/\./\\\\\\\\./g'`
active=`awk -v pattern="$pattern" '/^lease / { if ( $2 ~ pattern ) { curlease = $2; } else { curlease = "" } } /^ binding state / { if ( curlease != "" ) { lstates[curlease] = $3; } } END { for (curl in lstates) { tstates[lstates[curl]]++; } print tstates["active;"]; }' /var/lib/dhcpd/dhcpd.leases`
free=`awk -v pattern="$pattern" '/^lease / { if ( $2 ~ pattern ) { curlease = $2; } else { curlease = "" } } /^ binding state / { if ( curlease != "" ) { lstates[curlease] = $3; } } END { for (curl in lstates) { tstates[lstates[curl]]++; } print tstates["free;"]; }' /var/lib/dhcpd/dhcpd.leases`
pattern=`echo -n "^[\\t ]*range[\\t ]*${1}"|sed -e 's/\./\\\\\\\\./g'`
quota=`awk -F'[\t; ]*' -v pattern="$pattern" 'BEGIN { ttl = 0; } $0 ~ pattern { split($3, ip_from, "."); split($4, ip_to, "."); ttl += ip_to[4] - ip_from[4]; } END { print ttl; }' /etc/dhcp/dhcpd.conf`
noassign=$(($quota-$active-$free))
echo active: $active
echo free: $free
echo noassign: $noassign
available=$(($free+$noassign))
echo available: $available
echo quota: $quota
Calculated as the sum of all subnets when executed without parameters
python
# /usr/local/bin/dhcpd_status
active: 55
free: 313
noassign: 328
available: 641
quota: 696
Calculates the value of the specified subnet given the network address of the subnet part (including the period) in the parameter
python
[root@zeus ~]# /usr/local/bin/dhcpd_status 192.168.1.
active: 41
free: 128
noassign: 0
available: 128
quota: 169
In / etc / suders
, the shell script mentioned earlier is set to be able to be executed with root privileges.
/etc/suders
zabbix ALL=(ALL) NOPASSWD: /usr/local/bin/dhcpd_status
Defaults!/usr/local/bin/dhcpd_status !requiretty
/etc/zabbix/zabbix_agentd.conf
calls the shell script prepared earlier in response to the request from zabbix_server.
/etc/zabbix/zabbix_agentd.conf
UserParameter=isc.dhcpd[*],sudo /usr/local/bin/dhcpd_status $1 | grep $2 | cut -d' ' -f 2
Confirm that the value can be obtained by the test command of zabbix-agentd
python
# zabbix_agentd -t isc.dhcpd[192.168.1.,active]
isc.dhcpd[192.168.1.,active] [t|72]
Check with zabbix-get as well
python
# zabbix_get -s 127.0.0.1 -k isc.dhcpd[192.168.1.,active]
isc.dhcpd[192.168.1.,active] [t|72]
After that, you can get the desired value by adding DHCP related items to the monitoring items of the host running the ISC DHCP server on ZABBIX server.
The key of the item is ʻisc.dhcpdThe parameter is
[subnet IP, item you want to get]`
Recommended Posts