Je souhaitais suivre l’état de mon parc réseau avec l’outil OpenSource ZABBIX.
Mon coeur de réseau est constitué de switches manageables HP Procurve 1800. Chacun des 24ports de ce Switch sont interrogeables au travers du protocole SNMP.
Avec ZABBIX, je peux enregistrer le trafic réseau entrant/sortant pour chaque connexion et créer des graphiques montrant l’évolution de ces valeurs sur une année.
A la main, il faut compter une journée de configuration par Switch.
Fort heureusement, les versions récentes de ZABBIX (1.4 dans ce document) ajoutent la possibilité d’utiliser des « Template » ou « modèle ». Chaque modèle, une fois importé dans ZABBIX, peut-être utilisé autant de fois que requis. Chaque switch se verra doté d’un graphe par ports. Ce graphe détaillera l’évolution du débit entrant/sortant de chacun des ports du Switch.
Il existe un grand nombre de « template » en téléchargement depuis le forum de ZABBIX malheureusement, il n’y a pas de « modèle » pour le HP ProCurve 1800 .
Aussi, je me suis résolu à écrire un générateur de «templates »: “ template_generator.kix”. J’ai fait usage du langage de script KIXTART .
La structure du code est assez modulaire aussi l’adaptation à d’autres matériel ne devrait pas présenter de difficultés. Grace à ce petit script, vous pouvez désormais générer enquelques secondes des modèles pour une grande variété de switches manageables. Les trois premières lignes de code définissent:
- le nom du fichier résultant : $tempFileName
- le nombre de ports: $NbPorts
- l’OID SNMP de base: $BaseOID
Pour le lancer, il suffit de taper la commande:
kix32 template_generator.kix
break on
; name for template file
$tempFileName = "MyTemplate.xml"
; number of ports on switch
$NbPorts = 24
; base OID to collect data through SNMP
$BaseOID= "1.3.6.1.2.1.2.2.1"
; Build tempalte
Write_2_file()
exit
Function Write_2_file()
; if template already exist, then delete
del $TempFileName /h /c
; create new template file to write into
IF Open( 3 , $TempFileName , 5 ) = 0
; header
$x = writeline( 3 ,'< ?xml version="1.0"?>'+ @CRLF )
$x = writeline( 3 ,'< zabbix_export version="1.0" date="15.08.09" time="04.24">'+ @CRLF )
; header to hosts definition
$x = writeline( 3 ,'< hosts>'+ @CRLF )
; header to host definition
$x = writeline( 3 ,' < host name="Hp_ProCurve">'+ @CRLF )
$x = writeline( 3 ,' < useip>1< /useip>'+ @CRLF )
$x = writeline( 3 ,' 0.0.0.0'+ @CRLF )
$x = writeline( 3 ,' 10050'+ @CRLF )
$x = writeline( 3 ,' 3'+ @CRLF )
; declare host as part of the 'template' group
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' Templates'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
; header to items definition
$x = writeline( 3 ,' '+ @CRLF )
; define item to ping host admin IP
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' Ping to switch'+ @CRLF )
$x = writeline( 3 ,' 30'+ @CRLF )
$x = writeline( 3 ,' 90'+ @CRLF )
$x = writeline( 3 ,' 365'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' public'+ @CRLF )
$x = writeline( 3 ,' interfaces.ifTable.ifEntry.ifInOctets.1'+ @CRLF )
$x = writeline( 3 ,' 161'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
; add items for admin IP
AddItem(1)
; add items for every ports
For $Count = 1 To $NbPorts
AddItem(100+$Count)
Next
; footer to items definition
$x = writeline( 3 ,' '+ @CRLF )
; define trigger on fail to ping host admin IP
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' Fail to ping'+ @CRLF )
$x = writeline( 3 ,' {{HOSTNAME}:icmpping.last(0)}=0'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
; header to graphs definition
$x = writeline( 3 ,' '+ @CRLF )
; add graphs for admin IP
AddGraph(1)
; add items for every ports
For $Count = 1 To $NbPorts
AddGraph(100+$Count)
Next
; footer to items definition
$x = writeline( 3 ,' '+ @CRLF )
; footer to host definition
$x = writeline( 3 ,' '+ @CRLF )
; footer to hosts definition
$x = writeline( 3 ,''+ @CRLF )
; footer
$x = writeline( 3 ,""+ @CRLF )
IF Close(3)
Beep
? "Error closing file!"
ENDIF
Else
BEEP
? "Failed to Open "+ $TempFileName+": [" + @ERROR + "]"
ENDIF
EndFunction
; define item to measure input speed on port
Function ifInOctets($PortID)
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' ifInOctets.'+$PortID+''+ @CRLF )
$x = writeline( 3 ,' 30'+ @CRLF )
$x = writeline( 3 ,' 90'+ @CRLF )
$x = writeline( 3 ,' 365'+ @CRLF )
$x = writeline( 3 ,' bps'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 8.0'+ @CRLF )
$x = writeline( 3 ,' public'+ @CRLF )
$x = writeline( 3 ,' '+$BaseOID+'.10.'+$PortID+''+ @CRLF )
$x = writeline( 3 ,' 161'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
EndFunction
; define item to measure output speed on port
Function ifOutOctets($PortID)
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' ifOutOctets.'+$PortID+''+ @CRLF )
$x = writeline( 3 ,' 30'+ @CRLF )
$x = writeline( 3 ,' 90'+ @CRLF )
$x = writeline( 3 ,' 365'+ @CRLF )
$x = writeline( 3 ,' bps'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 8.0'+ @CRLF )
$x = writeline( 3 ,' public'+ @CRLF )
$x = writeline( 3 ,' '+$BaseOID+'.16.'+$PortID+''+ @CRLF )
$x = writeline( 3 ,' 161'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
EndFunction
; define item to measure link speed on port
Function ifSpeed($PortID)
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' ifSpeed.'+$PortID+''+ @CRLF )
$x = writeline( 3 ,' 30'+ @CRLF )
$x = writeline( 3 ,' 90'+ @CRLF )
$x = writeline( 3 ,' 365'+ @CRLF )
$x = writeline( 3 ,' bps'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' public'+ @CRLF )
$x = writeline( 3 ,' '+$BaseOID+'.5.'+$PortID+''+ @CRLF )
$x = writeline( 3 ,' 161'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
EndFunction
; define items on port
Function AddItem($PortID)
; get input speed
ifInOctets($PortID)
; get output speed
ifOutOctets($PortID)
; get line speed
ifSpeed($PortID)
EndFunction
; define graphs for port
Function AddGraph($PortID)
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 0.0000'+ @CRLF )
$x = writeline( 3 ,' 100.0000'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' 00FF00'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 2'+ @CRLF )
$x = writeline( 3 ,' 5'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' 00FF00'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 2'+ @CRLF )
$x = writeline( 3 ,' 5'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' 0000FF'+ @CRLF )
$x = writeline( 3 ,' 1'+ @CRLF )
$x = writeline( 3 ,' 2'+ @CRLF )
$x = writeline( 3 ,' 5'+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
$x = writeline( 3 ,' '+ @CRLF )
EndFunction
SynerGeek.fr Informatique & Veille Technologique
