Als ich versuchte, den Status der IP-Adresszuweisung auf dem ISC-DHCP-Server mit ZABBIX zu überwachen, konnte ich aus irgendeinem Grund nur ein Beispiel für die Verwendung eines ziemlich großen Skripts finden, das in Perl usw. geschrieben wurde, und habe es daher selbst mit WAK implementiert Ich versuchte es.
In dem in / usr / local / bin / dhcpd_status
gespeicherten Shell-Skript wird der ISC-DHCP-Release-Datensatz (dhcpd.leases) von awk analysiert und verwendet (aktiv), freigegeben (kostenlos), nicht zugewiesen (noassign), Zeigt alle verfügbaren und die dem Pool zugewiesene Nummer an (Kontingent).
/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
Berechnet als Summe aller Subnetze bei Ausführung ohne Parameter
python
# /usr/local/bin/dhcpd_status
active: 55
free: 313
noassign: 328
available: 641
quota: 696
Berechnet den Wert des angegebenen Subnetzes anhand der Netzwerkadresse des Subnetzteils (einschließlich des Zeitraums) im 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
ist das zuvor erwähnte Shell-Skript so eingestellt, dass es mit Root-Rechten ausgeführt werden kann.
/etc/suders
zabbix ALL=(ALL) NOPASSWD: /usr/local/bin/dhcpd_status
Defaults!/usr/local/bin/dhcpd_status !requiretty
In / etc / zabbix / zabbix_agentd.conf
wird das zuvor vorbereitete Shell-Skript als Antwort auf die Anfrage von zabbix_server aufgerufen.
/etc/zabbix/zabbix_agentd.conf
UserParameter=isc.dhcpd[*],sudo /usr/local/bin/dhcpd_status $1 | grep $2 | cut -d' ' -f 2
Bestätigen Sie, dass der Wert mit dem Testbefehl von zabbix-agentd abgerufen werden kann
python
# zabbix_agentd -t isc.dhcpd[192.168.1.,active]
isc.dhcpd[192.168.1.,active] [t|72]
Fragen Sie auch bei zabbix-get nach
python
# zabbix_get -s 127.0.0.1 -k isc.dhcpd[192.168.1.,active]
isc.dhcpd[192.168.1.,active] [t|72]
Danach können Sie den gewünschten Wert erhalten, indem Sie DHCP-bezogene Elemente zu den Überwachungselementen des Hosts hinzufügen, auf dem der ISC-DHCP-Server auf dem ZABBIX-Server ausgeführt wird. Der Schlüssel des Elements ist "isc.dhcpd". Der Parameter ist "[IP des Subnetzes, Element, das Sie erhalten möchten]"
Recommended Posts