HP iLO Hardware-Monitoring mit OMD Labs einrichten

Sieben Probleme. So viele Stolpersteine habe ich gezählt, bis das Hardware-Monitoring für drei HP ProLiant Server endlich lief. Dabei klang es in der Dokumentation so einfach: SNMP aktivieren, check_hpasm ausführen, fertig.

Oder: Wie ich lernte, dass “Community-Projekt” manchmal “bring dein eigenes Pflaster mit” bedeutet

Falls du gerade vor einem ähnlichen Setup stehst – HP ProLiant Server via iLO überwachen, OMD Labs als Monitoring-System – dann wird dir dieser Bericht einiges an Frust ersparen.

Die Ausgangssituation

Drei HP ProLiant DL360p Gen8 Server mit VMware ESXi 7.0.3. Jeder Server hat einen iLO4 Management-Controller mit eigenem Netzwerkinterface:

Server ESXi IP iLO IP
esxi-01 192.168.20.x 192.168.21.101
esxi-02 192.168.20.x 192.168.21.102
esxi-03 192.168.20.x 192.168.21.103

Ziel: Umfassendes Hardware-Monitoring – Lüfter, Temperaturen, Netzteile, RAM, RAID – über die iLO-Schnittstelle.

Monitoring-System: OMD Labs 5.60 (ConSol Edition) mit Naemon als Core und PNP4Nagios für Graphing.

Klingt straightforward? War es nicht.

Problem 1: “Failed to create new file: invalid path”

Beim allerersten Versuch, einen Host über das Thruk Web-Interface anzulegen, begrüßte mich sofort eine Fehlermeldung:

Failed to create new file: invalid path

Was ist passiert? Das Verzeichnis für Konfigurationsdateien existierte schlicht nicht. OMD Labs ist ein Community-Projekt – manche Grundfunktionen sind nicht perfekt out-of-the-box konfiguriert.

Die Lösung:

su - monitoring  # Als OMD-Site-User
mkdir -p ~/etc/naemon/conf.d/hosts
mkdir -p ~/etc/naemon/conf.d/services
mkdir -p ~/etc/naemon/conf.d/commands

Lesson Learned: Für produktive Setups empfiehlt es sich, Konfigurationen direkt per CLI zu erstellen. Das Web-Interface ist nett für Quick Wins, aber nicht immer zuverlässig.

Der Umweg über ESXi SNMP

Bevor wir uns dem iLO widmeten, haben wir zunächst ESXi selbst via SNMP überwacht.

SNMP auf ESXi aktivieren

Per SSH auf den ESXi-Host:

esxcli system snmp set --communities public
esxcli system snmp set --enable true
esxcli network firewall ruleset set --ruleset-id snmp --enabled true

Problem 2: SNMP MIBs nicht geladen

Beim ersten Test:

snmpwalk -v2c -c public esxi-01.example.com sysDescr

Kam die Meldung:

sysDescr: Unknown Object Identifier (Sub-id not found: (top) -> sysDescr)

Die SNMP MIBs waren auf dem OMD-Server nicht geladen. Kein Drama – numerische OIDs sind ohnehin universeller:

snmpwalk -v2c -c public esxi-01.example.com .1.3.6.1.2.1.1.1.0

Ergebnis:

iso.3.6.1.2.1.1.1.0 = STRING: "VMware ESXi 7.0.3 build-24411414 VMware, Inc. x86_64"

Lesson Learned: Für Nagios/Naemon Checks immer numerische OIDs verwenden – sie sind unabhängig von installierten MIB-Dateien und funktionieren überall.

Warum iLO statt ESXi?

ESXi SNMP liefert Basis-Informationen (Uptime, NICs), aber für echtes Hardware-Monitoring ist der iLO-Controller der bessere Weg:

  • Dedizierte Hardware-Management-Schnittstelle – genau dafür gebaut
  • Zugriff auch bei ausgeschaltetem Server – kritisch für Troubleshooting
  • Detailliertere Sensor-Daten – 41 Temperatursensoren statt einer Handvoll
  • HP-spezifische MIBs – CPQHLTH-MIB kennt jeden Sensor im System

Problem 3: SNMP auf iLO nicht aktiv

Erster Test gegen die iLO-IP:

snmpwalk -v2c -c public 192.168.21.101 .1.3.6.1.2.1.1.1.0

Timeout

SNMP war auf dem iLO4 nicht aktiviert bzw. keine Community konfiguriert.

Die Lösung: Im iLO4 Web-Interface:

  1. Browser öffnen: https://192.168.21.101
  2. Navigation: Administration → Management → SNMP Settings
  3. Read Community eintragen (z.B. public – oder besser was Sicheres)
  4. Apply klicken

Nach der Konfiguration:

snmpwalk -v2c -c public 192.168.21.101 .1.3.6.1.2.1.1.1.0

Ergebnis:

iso.3.6.1.2.1.1.1.0 = STRING: "Integrated Lights-Out 4 1.50"

check_hpasm: Das richtige Tool für den Job

Wir hätten einzelne SNMP-Checks für jeden Sensor schreiben können. Aber check_hpasm ist speziell für HP ProLiant Hardware entwickelt:

  • Automatische Erkennung aller Komponenten
  • Aggregierter Gesundheitsstatus
  • Performance-Daten für alle Sensoren
  • Menschenlesbare Ausgabe

Problem 4: Perl Locale-Warnung

Beim ersten Aufruf:

~/lib/nagios/plugins/check_hpasm -H 192.168.21.101 -C public

Erschienen Warnungen:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LANG = "en_US.UTF-8"
    are supported and installed on your system.

Die Locale-Einstellungen im OMD-Site-Environment waren nicht korrekt gesetzt.

Die Lösung:

echo 'export LC_ALL=C' >> ~/.profile
source ~/.profile

Danach lief der Check sauber:

WARNING - system fan overall status is degraded, fan 6 (system) degraded,
System: 'proliant dl360p gen8', S/N: 'XXXXXXXXXX', ROM: 'P71 07/01/2015'

Überraschung: Der Check hat sofort einen echten Hardware-Fehler gefunden – Fan 6 ist degradiert!

Problem 5: --perfdata Option funktioniert nicht

Wir wollten Performance-Daten für Graphen aktivieren:

~/lib/nagios/plugins/check_hpasm -H 192.168.21.101 -C public --perfdata

Fehlermeldung:

Option perfdata requires an argument

Die OMD-Version von check_hpasm wurde ohne --enable-perfdata kompiliert. Die Option erwartet einen Wert.

Die Lösung: Explizit --perfdata=short verwenden:

~/lib/nagios/plugins/check_hpasm -H 192.168.21.101 -C public --perfdata=short

Ergebnis mit Performance-Daten:

WARNING - system fan overall status is degraded... | pc_1=112;460;460 pc_2=99;460;460
fan_1=50% fan_2=50% ... temp_1=24;42;42 temp_2=40;70;70 ...

Naemon Konfiguration

Architektur-Entscheidung: Separate iLO-Hosts

Wichtige Design-Entscheidung: iLO-Hosts separat von ESXi-Hosts definieren:

  1. Unterschiedliche IPs – iLO hat eigenes Management-Netzwerk
  2. Zukunftssicher – Neue HP-Server ohne ESXi passen ins Schema
  3. Klare Trennung – Hardware-Monitoring vs. Virtualisierung

Datei: ~/etc/naemon/conf.d/hosts/ilo-hosts.cfg

# iLO Hostgroup
define hostgroup {
    hostgroup_name          ilo-servers
    alias                   HP iLO Management Interfaces
}

# iLO Host Template
define host {
    name                    ilo-host
    use                     generic-host
    check_command           check-host-alive
    check_interval          5
    register                0
}

# iLO Hosts
define host {
    use                     ilo-host
    host_name               ilo-esxi-01
    alias                   iLO ESXi-01 (DL360p Gen8)
    address                 192.168.21.101
    hostgroups              ilo-servers
}

define host {
    use                     ilo-host
    host_name               ilo-esxi-02
    alias                   iLO ESXi-02 (DL360p Gen8)
    address                 192.168.21.102
    hostgroups              ilo-servers
}

define host {
    use                     ilo-host
    host_name               ilo-esxi-03
    alias                   iLO ESXi-03 (DL360p Gen8)
    address                 192.168.21.103
    hostgroups              ilo-servers
}

Datei: ~/etc/naemon/conf.d/commands/check_hpasm.cfg

define command {
    command_name    check_hpasm
    command_line    $USER1$/check_hpasm -H $HOSTADDRESS$ -C $ARG1$ --perfdata=short
}

Datei: ~/etc/naemon/conf.d/services/hpasm-services.cfg

define service {
    use                     generic-service
    hostgroup_name          ilo-servers
    service_description     HP Hardware Health
    check_command           check_hpasm!public
    check_interval          5
}

Problem 6: Hostgroup nicht gefunden

omd check

Fehlermeldung:

Error: Could not find any hostgroup matching 'ilo-servers'

Die Hostgroup-Definition fehlte oder wurde nicht korrekt geladen.

Die Lösung: Sicherstellen, dass die Hostgroup im selben File oder vor den Services definiert ist. Nach Korrektur:

omd check && omd reload naemon

Status prüfen via Livestatus

echo "GET services
Filter: description = HP Hardware Health
Columns: host_name description state plugin_output" | unixcat ~/tmp/run/live

Ergebnis:

ilo-esxi-01;HP Hardware Health;1;WARNING - system fan overall status is degraded, fan 6 (system) degraded...
ilo-esxi-02;HP Hardware Health;2;CRITICAL - dimm module 0:12 (module 12 @ cartridge 0) needs attention (degraded)...
ilo-esxi-03;HP Hardware Health;0;OK - System: 'proliant dl360p gen8', hardware working fine...
Thruk Service-Übersicht mit drei iLO-Hosts: WARNING, CRITICAL und OK Status
Thruk Service-Übersicht: Alle drei iLO-Hosts auf einen Blick

PNP4Nagios Graphing

Nach einigen Check-Durchläufen:

ls ~/var/pnp4nagios/perfdata/ilo-esxi-01/
HP_Hardware_Health.xml
HP_Hardware_Health_fan_1.rrd
HP_Hardware_Health_fan_2.rrd
...
HP_Hardware_Health_temp_1.rrd
HP_Hardware_Health_temp_2.rrd
...

8 Lüfter, 41 Temperatursensoren, 2 Power Consumption Werte – perfekt!

Thruk Service-Detail mit Performance-Daten: Lüfter, Temperaturen, Power Consumption
Service-Detail: Alle Performance-Daten auf einen Blick

Problem 7: PNP4Nagios zeigt Fehler statt Graphen

Beim Aufruf von PNP4Nagios im Browser:

Please check the documentation for information about the following error.

Undefined array key 14

file [line]:
templates.dist/check_hpasm.php [35]:

Das mitgelieferte PNP4Nagios-Template für check_hpasm definiert nur 14 Farben:

$colors=array("CC3300","CC3333","CC3366",...); // nur 14 Einträge

Aber unser DL360p Gen8 hat 41 Temperatursensoren! Bei Sensor 15 gibt es keinen Farbeintrag mehr → Array-Index-Fehler.

Die Lösung: Angepasstes Template mit mehr Farben und zyklischer Verwendung:

Datei: ~/share/pnp4nagios/htdocs/templates/check_hpasm.php

<?php
#
# Fixed check_hpasm template with more colors
#
$colors=array(
    "CC3300","CC3333","CC3366","CC3399","CC33CC","CC33FF",
    "336600","336633","336666","336699","3366CC","3366FF",
    "33CC33","33CC66","33CC99","33CCCC","33CCFF","339900",
    "339933","339966","339999","3399CC","3399FF","993300",
    "993333","993366","993399","9933CC","9933FF","996600",
    "996633","996666","996699","9966CC","9966FF","999900",
    "999933","999966","9999CC","9999FF","00CC00","00CC33",
    "00CC66","00CC99","00CCCC","00CCFF","0099FF","0066FF"
);
$max_rpm=5400;
$col_f=0;
$col_t=0;
$num_colors=count($colors);

foreach($DS as $KEY => $VAL){
    if(preg_match('/^fan_/',$NAME[$KEY])){
        $ds_name[1] = "Fan Speed";
        $opt[1] = "-X0 --slope-mode -u $max_rpm --vertical-label \"RPMs\"  --title \"HPASM Fan Speed\" ";
        if(!isset($def[1])){
            $def[1] = "";
        }
        $def[1] .= "DEF:ovar$KEY=$RRDFILE[$KEY]:$DS[$KEY]:AVERAGE " ;
        $def[1] .= "CDEF:var$KEY=ovar$KEY,100,/,$max_rpm,* " ;
        // Modulo-Operator für zyklische Farbverwendung
        $def[1] .= "LINE:var$KEY#".$colors[$col_f % $num_colors].":\"$NAME[$KEY]\" " ;
        $def[1] .= "GPRINT:var$KEY:LAST:\"%6.0lf RPM LAST \" ";
        $def[1] .= "GPRINT:var$KEY:MAX:\"%6.0lf RPM MAX \" ";
        $def[1] .= "GPRINT:var$KEY:AVERAGE:\"%6.2lf RPM AVERAGE \\n\" ";
        $col_f++;
    }
    if(preg_match('/^temp_/',$NAME[$KEY])){
        $ds_name[2] = "Temperature";
        $opt[2] = "--slope-mode --vertical-label \"Grad Celsius\"  --title \"HPASM Temperature\" ";
        if(!isset($def[2])){
            $def[2] = "";
        }
        $def[2] .= "DEF:var$KEY=$RRDFILE[$KEY]:$DS[$KEY]:AVERAGE " ;
        // Modulo-Operator für zyklische Farbverwendung
        $def[2] .= "LINE:var$KEY#".$colors[$col_t % $num_colors].":\"$NAME[$KEY]\\t\" " ;
        $def[2] .= "GPRINT:var$KEY:LAST:\"%6.0lf $UNIT[$KEY] LAST \" ";
        $def[2] .= "GPRINT:var$KEY:MAX:\"%6.0lf $UNIT[$KEY] MAX \" ";
        $def[2] .= "GPRINT:var$KEY:AVERAGE:\"%6.2lf $UNIT[$KEY] AVERAGE \\n\" ";
        $col_t++;
    }
    // Zusätzlich: Power Consumption Graph
    if(preg_match('/^pc_/',$NAME[$KEY])){
        $ds_name[3] = "Power Consumption";
        $opt[3] = "--slope-mode --vertical-label \"Watts\"  --title \"HPASM Power Consumption\" ";
        if(!isset($def[3])){
            $def[3] = "";
        }
        $def[3] .= "DEF:var$KEY=$RRDFILE[$KEY]:$DS[$KEY]:AVERAGE " ;
        $def[3] .= "LINE:var$KEY#".$colors[$KEY % $num_colors].":\"$NAME[$KEY]\" " ;
        $def[3] .= "GPRINT:var$KEY:LAST:\"%6.0lf W LAST \" ";
        $def[3] .= "GPRINT:var$KEY:MAX:\"%6.0lf W MAX \" ";
        $def[3] .= "GPRINT:var$KEY:AVERAGE:\"%6.2lf W AVERAGE \\n\" ";
    }
}
?>

Nach dem Fix:

omd reload apache

Jetzt werden drei separate Graphen angezeigt:

  1. Fan Speed – Alle 8 Lüfter
  2. Temperature – Alle 41 Temperatursensoren
  3. Power Consumption – Stromverbrauch beider Netzteile
PNP4Nagios Graph: Power Consumption beider Netzteile über Zeit
Power Consumption
PNP4Nagios Graph: 41 Temperatursensoren über Zeit
Temperature (41 Sensoren)

Was haben wir gelernt?

Die sieben Stolpersteine im Überblick

Problem Ursache Lösung
“Failed to create new file” Verzeichnisse fehlen mkdir -p ~/etc/naemon/conf.d/{hosts,..}
SNMP OID “Unknown” MIBs nicht geladen Numerische OIDs verwenden
iLO SNMP Timeout Community nicht gesetzt Im iLO Web-UI “Read Community” eintragen
Perl Locale-Warnung LC_ALL nicht gesetzt export LC_ALL=C in ~/.profile
–perfdata ohne Argument Compile-Option fehlt --perfdata=short verwenden
Hostgroup nicht gefunden Definition fehlt Hostgroup im Config-File ergänzen
PNP “Undefined array key” Zu wenige Farben Eigenes Template mit 48+ Farben

Der eigentliche Gewinn

Ja, das Setup war aufwändiger als erwartet. Aber das Monitoring hat sich sofort bezahlt gemacht:

  • Fan 6 auf Server 1 ist degradiert – hätte ohne Redundanz zum Thermal-Shutdown geführt
  • DIMM 0:12 auf Server 2 ist defekt – ECC korrigiert noch, aber das Modul muss raus

Beide Probleme wären ohne aktives Hardware-Monitoring wahrscheinlich erst aufgefallen, wenn es zu spät gewesen wäre. (Ich wusste natürlich davon!)

Dateistruktur für die Nachwelt

~/etc/naemon/conf.d/
├── commands/
│   └── check_hpasm.cfg
├── hosts/
│   └── ilo-hosts.cfg
└── services/
    └── hpasm-services.cfg

~/share/pnp4nagios/htdocs/templates/
└── check_hpasm.php  # Angepasstes Template

Fazit

Sieben Probleme, sieben Lösungen. Ein langer Abend mit SNMP, Perl und zu vielen Temperatursensoren. Aber am Ende steht ein solides Hardware-Monitoring, das auch die bekannten Defekte gefunden hat (guter proof ;) ).

War es den Aufwand wert? Definitiv. Hardware-Probleme zu finden, bevor sie kritisch werden, ist unbezahlbar.

Referenzen