Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:sysadmin:tools:hpilo-temperatur-cacti-input-script

HP ILO - Temperatur -> Cacti

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
1) Die XML-Push-Methode dauerte bei mir tatsächlich langsamer
de/sysadmin/tools/hpilo-temperatur-cacti-input-script.txt · Zuletzt geändert: 2009-08-12 16:12 von hella

Seiten-Werkzeuge