Lorsque j'ai essayé de surveiller l'état d'allocation d'adresse IP sur le serveur DHCP ISC avec ZABBIX, pour une raison quelconque, je n'ai pu trouver qu'un exemple d'utilisation d'un script assez volumineux écrit en Perl, etc., donc je l'ai implémenté moi-même en utilisant WAK Je l'ai essayé.
Dans le script shell enregistré dans / usr / local / bin / dhcpd_status
, l'enregistrement de version ISC DHCP (dhcpd.leases) est analysé par awk et utilisé (actif), libéré (gratuit), non attribué (noassign), Affiche chaque disponible et le nombre alloué au 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
Calculé comme la somme de tous les sous-réseaux lorsqu'ils sont exécutés sans paramètres
python
# /usr/local/bin/dhcpd_status
active: 55
free: 313
noassign: 328
available: 641
quota: 696
Calcule la valeur du sous-réseau spécifié en fonction de l'adresse réseau de la partie sous-réseau (y compris la période) dans le paramètre
python
[root@zeus ~]# /usr/local/bin/dhcpd_status 192.168.1.
active: 41
free: 128
noassign: 0
available: 128
quota: 169
Dans / etc / suders
, le script shell mentionné précédemment est défini pour pouvoir être exécuté avec les privilèges root.
/etc/suders
zabbix ALL=(ALL) NOPASSWD: /usr/local/bin/dhcpd_status
Defaults!/usr/local/bin/dhcpd_status !requiretty
Dans / etc / zabbix / zabbix_agentd.conf
, le script shell préparé précédemment est appelé en réponse à la requête de zabbix_server.
/etc/zabbix/zabbix_agentd.conf
UserParameter=isc.dhcpd[*],sudo /usr/local/bin/dhcpd_status $1 | grep $2 | cut -d' ' -f 2
Confirmez que la valeur peut être obtenue avec la commande de test de zabbix-agentd
python
# zabbix_agentd -t isc.dhcpd[192.168.1.,active]
isc.dhcpd[192.168.1.,active] [t|72]
Vérifiez également avec zabbix-get
python
# zabbix_get -s 127.0.0.1 -k isc.dhcpd[192.168.1.,active]
isc.dhcpd[192.168.1.,active] [t|72]
Après cela, vous pouvez obtenir la valeur souhaitée en ajoutant des éléments liés à DHCP aux éléments de surveillance de l'hôte exécutant le serveur DHCP ISC sur le serveur ZABBIX.
La clé de l'élément est ʻisc.dhcpdLe paramètre est
[IP du sous-réseau, élément que vous voulez obtenir]`
Recommended Posts