V tomto článku vám predstavím, akým spôsobom monitorovať isc-dhcp server, pomocou monitorovacieho systému Zabbix. Pôjde hlavne o monitorovanie veľkosti rozsahu a počtu pridelených IP. Pôvodný článok v portugalčine som objavil na blogu WERNECK COSTA.
Scenár :
- Server Ubuntu 14.04.4 LTS
- Zabbix Server a agent verzia 3.0.2
- ISC-DHCP
- Oba servery bežia na jednom stroji, preto budem používať IP 127.0.0.1
Sledované hodnoty:
- Kapacita IP rozsahu (pool)
- Počet pridelených IP z rozsahu
- Počet IP „touch“ v každom rozsahu
Ako Zabbix prečíta dáta z DHCP servera
Keďže „Lease“ súbor môže byť pomerne rozsiahly, akýkoľvek „cat + grep + cut“ by preto trval dlho a spotreboval by veľa zdrojov. Preto sa autor rozhodol použiť nástroj dhcpd-pools: http://dhcpd-pools.sourceforge.net/.
Postup:
Nainštalujeme si závislosti:
$ apt-get install -y -b xz-utils gnulib uthash-dev
Vytvoríme si adresár, stiahneme a rozbalíme dhcpd-pools:
$ mkdir /usr/src/dhcpd-pools $ cd /usr/src/dhcpd-pools $ wget https://sourceforge.net/projects/dhcpd-pools/files/dhcpd-pools-2.28.tar.xz/download -O dhcpd-pools-2.28.tar.xz $ tar xJf dhcpd-pools-2.28.tar.xz
Skompilujeme a nainštalujeme:
$ cd dhcpd-pools-2.28 $ ./configure && make && make install
Po inštalácii môžeme vykonať skúšku pomocou nasledovného príkazu:
$ dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases
Výstup príkazu by mal vyzerať nejako takto:
Ranges: shared net name first ip last ip max cur percent touch t+c t+c perc All networks 172.16.101.1 - 172.16.101.254 254 6 2.362 179 185 72.835 Shared networks: name max cur percent touch t+c t+c perc Sum of all ranges: name max cur percent touch t+c t+c perc All networks 254 6 2.362 179 185 72.835
Z výstupu môžeme vyčítať že, sieť má nakonfigurovaný rozsah 254 IP adries, z čoho 6 IP sa používa, čo je 2,362%, a 179 IP bolo už použitých. Väčšinou ale potrebujeme prideľovať IP adresy pre viaceré siete. Na to potrebujeme vykonať potrebné zmeny v etc/dhcp/dhcpd .conf. Treba pridať do config-u shared-network nazov_subnetu { subnet …}:
# cudzi 158.195.95.11 - 254 shared-network cudzi { subnet 158.195.95.0 netmask 255.255.255.0 { range 158.195.95.11 158.195.95.254; option subnet-mask 255.255.255.0; option broadcast-address 158.195.95.255; option routers 158.195.95.1; default-lease-time 43200; #12 hours (v sekundach) max-lease-time 86400; #172800 = 48 hours, 86400 = 24 hours } } # standartni 158.195.40.0/21 shared-network standartni { subnet 158.195.40.0 netmask 255.255.248.0 { range 158.195.40.31 158.195.47.254; option subnet-mask 255.255.248.0; option broadcast-address 158.195.47.255; option routers 158.195.40.250; default-lease-time 10368000; #120 dni max-lease-time 10368000; #120 dni } }
Potom bude výstup vyzerať nasledovne:
$ dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases
Ranges: shared net name first ip last ip max cur percent touch t+c t+c perc standartni 18.15.40.31 - 18.15.47.254 2016 566 28.075 17 583 28.919 cudzi 18.15.95.11 - 18.15.95.254 244 10 4.098 214 224 91.803 Shared networks: name max cur percent touch t+c t+c perc cudzi 244 10 4.098 214 224 91.803 standartni 2016 566 28.075 17 583 28.919 Sum of all ranges: name max cur percent touch t+c t+c perc All networks 2514 576 22.912 231 807 32.100
Teraz si výpis zjednodušíme, aby sme s nim mohli ďalej pracovať, pre lepšie pochopenie je možné zobraziť nápovedu (man dhcpd-pools):
-L, --limit=NR The NR will limit what will be printed. Syntax is similar to chmod(1) permission string. The NR limit string uses two digits which vary between 0 to 7. The first digit determines which headers to display, and the second digit determines which numeric analysis tables to include in the output. The following values are "OR'd" together to create the desired output. The default is 77. 01 Print ranges 02 Print shared networks 04 Print total summary 10 Print range header 20 Print shared network header 40 Print total summary header
Tu môžeme vidieť, že použitie parametra “ L “ obmedzuje výpis podľa vyššie uvedenej tabuľky, v závislosti na zvolenej kombinácii. Takže, ak by sme spustili príkaz vrátane “ -L22 „, vrátia sa iba dáta z “ Shared networks“ :
$ dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -L22
Výsledok:
Shared networks: name max cur percent touch t+c t+c perc cudzi 244 11 4.508 213 224 91.803 standartni 2016 566 28.075 17 583 28.919
Zachytávanie údajov pomocou Zabbixu
Pomocou rozšírenia Zabbix agenta je možné sledovať všetko, čo je možné získať zo servera príkazom alebo scriptom. Princíp je veľmi jednoduchý. V konfiguračnom súbore agenta /etc/zabbix/zabbix_agentd.conf pridáme (zmeníme) riadok:
# Include=/etc/zabbix_agentd.userparams.conf
Zmeníme na:
Include=/etc/zabbix_agentd.conf.d/
V tomto adresári (/etc/zabbix_agentd.conf.d/) vytvoríme súbor „userparameters_dhcpd.conf“ a skopírujeme do neho nasledujúce user parametre:
UserParameter=dhcp.pool.all,dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -L22 UserParameter=dhcp.pool.max[*],dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -L22|grep -i $1|sed 's/ \+/;/g'|cut -d';' -f2 UserParameter=dhcp.pool.use[*],dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -L22|grep -i $1|sed 's/ \+/;/g'|cut -d';' -f3 UserParameter=dhcp.pool.percent[*],dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -L22|grep -i $1|sed 's/ \+/;/g'|cut -d';' -f4 UserParameter=dhcp.pool.touch[*],dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -L22|grep -i $1|sed 's/ \+/;/g'|cut -d';' -f5
Po vytvorení súboru reštartujeme agenta:
$ sudo /etc/init.d/zabbix-agent restart
Každý UserParameter má dva prvky: položku a príkaz. Príklad:
Položka (Item):
dhcp.pool.all
Príkaz (Command):
dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -L22
A následne vyskúšame či Zabbix agent pracuje s našimi user parametrami:
$ zabbix_get -s 127.0.0.1 -k dhcp.pool.all
Ak je všetko v poriadku, výpis by mal vyzerať nasledovne:
Shared networks: name max cur percent touch t+c t+c perc cudzi 244 11 4.508 213 224 91.803 standartni 2016 566 28.075 17 583 28.919
Ďalej môžeme otestovať ostatné položky UserParameters:
$ zabbix_get -s 127.0.0.1 -k dhcp.pool.percent[cudzi]
V mojom prípade sa mi vrátila hodnota:
4.508
Ďalej budeme potrebovať skript, ktorý oznámi aké subnety sú zadefinované v DHCP serveri a vráti údaje vo formáte JSON.
Vytvoríme /etc/zabbix/scripts/dhcppolls.sh
#!/bin/bash pools_all=`dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases -L02|egrep -io "^[a-z]*(\-|\_)?[a-z]*"` pools_qtd=`echo $pools_all|wc -w` retorno=`echo -e "{\n\t\t"\"data\"":["` for p in $pools_all do if [ "$pools_qtd" -le "1" ] then retorno=$retorno`echo -e "\n\t\t{\"{#DHCPPOOL}\":\"$p\"}"` else retorno=$retorno`echo -e "\n\t\t{\"{#DHCPPOOL}\":\"$p\"},"` fi pools_qtd=$(($pools_qtd - 1)) done retorno=$retorno`echo -e "]}"` echo -e $retorno
Pridáme do súboru /etc/zabbix_agentd.conf.d/userparameters_dhcpd.conf ďalší riadok (UserParameter):
UserParameter=dhcp.pool.discovery,/etc/zabbix/scripts/dhcppolls.sh
A znovu reštartujeme agenta:
$ sudo /etc/init.d/zabbix-agent restart
Funkčnosť „discovery“ skriptu si overíme nasledovným príkazom:
$ zabbix_get -s 127.0.0.1 -k dhcp.pool.discovery
Výpis by mal vyzerať nasledovne:
{ "data":[ {"{#DHCPPOOL}":"cudzi"}, {"{#DHCPPOOL}":"standartni"}]}
Ak nám všetko funguje, môžeme prejsť k nastaveniu rozhrania Zabbixu. Pridáme objavovacie pravidlo cez „Configuration -> Hosts -> nas_dhcp_server -> Discovery rules -> Create discovery rule„
Ďalej pridáme Item prototypes:
Do Items pridáme všetky položky, ktoré chceme sledovať:
Funkčnosť si overíme cez Monitoring -> Overview
Prípadne môžeme z nazbieraných údajov vykresliť graf, ktorý sa automaticky vytvorí pre každý subnet: Configuration -> Hosts -> nas_dhcp_server -> Discovery rules -> Discovery DHCP Pools -> Graph prototypes
Prípadne môžeme vytvoriť graf pre všetky subnety súčasne, v tomto prípade však treba pridať každý subnet ručne: Configuration -> Hosts -> nas_dhcp_server -> Graphs -> Create graph
Pri reštartovaní servera mi nechcel tento monitoring nabehnúť a tak som našiel takéto, trocha primitívne riešenie.
Pridať do /etc/rc.local
zabbix_get -s 127.0.0.1 -k dhcp.pool.discovery > /dev/null sleep 120 sudo /etc/init.d/zabbix-agent force-reload
Zdroj: https://neckcosta.wordpress.com/2013/11/01/monitoramento-de-pools-isc-dhcp-com-zabbix/
0 komentárov