Script KIXTART pour générer une «template » ZABBIX pour switch manageable HP ProCurve 1800

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

 

A propos Olivier Olejniczak

Cofondateur de SynerGeek.fr. Passionné d'informatique, je m'intéresse plus particulièrement aux technologies de virtualisation et de stockage. J'apprécie la liberté et la quasi-absence de frontières à mon imagination qu'offre l'OpenSource et Linux. Professionnellement, je travaille exclusivement avec les outils Microsoft. Les pieds bien sur terre et ancrés dans le quotidien de l'entreprise, j'aime faire partager mes découvertes et contribuer à un meilleur usage des technologies. Vous aussi, rejoignez-nous sur Synergeek et partagez votre expérience!

Je vous propose également...

JSON dans les scripts Bash avec Ticktick

Je vais vous présenter l’ami du WGET par excellence. Imaginez le contexte suivant : sur …

Compiler un script PowerShell avec PS2EXE

J’utilise au quotidien le langage PowerShell pour gérer des serveurs Windows. Ce langage est à …

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.