(Stand ≤2009, python2)
Auf dem ILO-Interface von HP-Servern (hier im Beispiel waren das ProLiant DL380 G5) kann man als Sensorwert diverse Temperaturwerte abfragen.
Dieses Script macht das (mit SSH 1)) und bereitet die Daten so auf, dass man sie als Data Input Methode für Cacti verwenden kann.
#!/usr/bin/env python
"""
Cacti-Input-Script (you can use this also without cacti)
Usage:
hpilo-hw1-tempstatus-cacti.py server1.ilo.example.com
Typical Output:
IOBoardZone_Celsius:39 AmbientZone_Celsius:15 CPU1_Celsius:31 PowerSupplyZone_Celsius:42 CPU2_Celsius:31
Prerequisites:
you can log in to the HP-ILO Interface with SSH
ilouser on the ILO
attached SSH-Key to that user
-> the user running cacti poller.php can use this + the script
http://www.unixwitch.de, Hella Breitkopf, 2009-08-11
"""
import os
import sys
import re
sshuser="ilouser"
keyfile="/home/ilouser/.ssh/ilo_id_dsa"
def sshcmderr(server,cmd):
"""sshcmd(server,cmd) -> string
connect via ssh to server,
do command cmd on that server,
return output and error in tupple
"""
cmdsum= "ssh -o ConnectTimeout=9 -i %s %s@%s '%s'" % (keyfile,sshuser,server,cmd)
myin,myout,myerr=os.popen3(cmdsum)
txt=myout.read(99999)
myerror=myerr.read(99999)
return(txt,myerror)
if __name__ == '__main__':
scriptname=sys.argv[0]
zielserverliste=sys.argv[1:]
# depending on Hardware you might ask different Sensors
# this is for HP ProLiant DL380 G5
query="""
show system1/sensor3\n\r
show system1/sensor4\n\r
show system1/sensor5\n\r
show system1/sensor7\n\r
show system1/sensor8\n\r
"""
for zielserver in zielserverliste:
ausgabezeile=""
sshausgabe,fehler=sshcmderr(zielserver,query)
if len(fehler)>0:
sys.exit(fehler)
sensorliste=re.findall("(ElementName=.*\r\n.*\r\n.*\r\n.*)\r\n",sshausgabe)
for sensor in sensorliste:
try:
# von "ElementName=I/O Board Zone" -> IOBoard
bezeichnung=sensor.splitlines()[0].split('=')[1]
bezeichnung=re.sub('[^\w]','',bezeichnung)
einheit=sensor.splitlines()[2].split('=')[1]
wert=sensor.splitlines()[3].split('=')[1]
except:
continue
ausgabezeile="%s %s_%s:%s" % (ausgabezeile,bezeichnung,einheit,wert)
ausgabezeile=ausgabezeile.strip()
print ausgabezeile
gilt für alle Tipps, Tricks & Spickzettel:
dies sind einfache, teils banale Notizen für meinen persönlichen Gebrauch,
die hier eher zufällig auch öffentlich lesbar sind
(vielleicht hilft es ja jemandem weiter). Verwendung auf eigene Gefahr
Fehler-Hinweise, Dankesschreiben , etc. bitte an: web.25@unixwitch.de
weitere Tools / Spickzettel