Zabbix Items Daten per IMPI sammeln

Hardware überwachen mit IPMI

Mit dem Intelligent Platform Management Interface (IPMI) haben verschiedene Hardwarehersteller eine Schnittstelle geschaffen, um Server zu verwalten und zu warten. Das IPMI funktioniert unabhängig vom Betriebssystem mit einer eigenen Firmware. Das IPMI benutzt deshalb auch eine eigene IP-Adresse und kann auch bei ausgeschaltetem Server-Betriebssystem erreicht werden. Die Netzteile des Servers müssen ans Stromnetz angeschlossen sein, damit das Managementboard funktionieren kann. Neben Verwaltungsfunktionen wie Ein- und Ausschalten des Geräts kann das IPMI auch zu Abfragen des Hardwarestatus genutzt werden. Die Schnittstellen liefern in der Regel einen umfangreichen Bericht über den Zustand von Lüftern, Temperaturen und sonstigen Komponenten des Servers.

IPMI auf der Hardware aktivieren

IPMI muss ist bei fast allen Hardwareherstellern standardmäßig deaktiviert. Sie müssen IPMI erst aktivieren und die Netzwerkeinstellungen des Interface vornehmen, damit Sie die IPMI-Schnittstelle abfragen können. Bei einigen Herstellern können Sie die Einstellungen im BIOS vornehmen. Bei anderen Herstellern müssen Sie während des Bootvorgangs eine bestimmte Tastenkombination drücken, damit Sie in die Einstellungen des sogenannten Managementboards gelangen. Dort finden Sie in der Regel die Möglichkeit, IPMI zu aktivieren. Nachfolgend finden Sie einige Beispiele.

Beispiel 1: IPMI mit Dell-iDrac

Dell-Server verfügen in der Regel über den sogenannten Integrated Dell Remote Access Controller (iDrac). Dieser Controller liest den Status vieler Hardwarekomponenten aus. Per IPMI kann man so Temperaturen, Netzspannungen, Lüfterumdrehungen und vieles mehr mit Zabbix auslesen und überwachen.

IPMI aktivieren
Die IPMI-Schnittstelle ist standardmäßig im iDrac abgeschaltet. Melden Sie sich per Webbrowser am Controller an. Im Menü links wählen Sie iDRAC Einstellungen und über die Reiter rechts Netzwerk/Sicherheit|Netzwerk aus. Im Bereich IPMI-Einstellungen setzen Sie nun den Haken bei IPMI-Über-LAN aktivieren. Da zum Auslesen der Sensoren keine Administrationsrechte erforderlich sind, wählen Sie als "Beschränkung der Kanalberechtigungsebene" Benutzer aus. Aktivieren Sie die Konfiguration mit dem Button "Anwenden" rechts unten.

Aktivierung von IPMI bei einem Dell-Server mit iDrac6
Aktivierung von IPMI bei einem Dell-Server mit iDrac7 und englischer Oberfläche

Benutzer anlegen
Der Zugriff auf IPMI erfolgt immer mit einem Benutzernamen und einem Passwort. Aus Sicherheitsgründen sollte Zabbix nicht mit einem privilegierten Benutzer wie root auf das IPMI zugreifen. Legen Sie über das Menü Netzwerk/Sicherheit|Benutzer einen neuen Benutzer an. Als "Maximale LAN-Benutzerberechtigung gewährt" wählen Sie Benutzer aus. Als "iDRAC-Benutzerberechtigungen" sollten Sie "Keine" auswählen. Der neue Benutzer soll sich nicht am iDrac anmelden können.

Unprivilegierten Benutzer für Zabbix anlegen

Beispiel 2: Supermicro KVM

Bei den Mainboards von Supermicro sind die Standardeinstellungen bereits so gewählt, dass Sie den Hardwarestatus per IPMI abfragen können. Sie sollten aber einen unprivilegierten Benutzer einrichten. Es ist ein unnötiges Sicherheitsrisiko, wenn sich der Zabbix-Server mit dem Benutzer "ADMIN" verbindet.

Melden Sie sich auf dem Webfrontend der Remote-Management-Karte als Benutzer "ADMIN" an. Über das Menü Configuration|Users legen Sie einen neuen Benutzer an, zum Beispiel "zabbix". Bei den Network Privileges wählen Sie "User" aus. Mehr muss bei den Mainboards von Supermicro nicht gemacht werden.

Zabbix Benutzer für den IPMI Zugriff hinzufügen

Beispiel 3: Intel RMM3

Viele Server-Mainboards vom Hersteller Intel verfügen über ein sogenanntes „Remote Management Module“, welches eine IPMI-Schnittstelle integriert hat. Im Menü Configuration|Security Settings können Sie mit der Option „IPMI over LAN“ diese Schnittstelle „öffnen“. Anschließend sollten Sie im Menü Configuration|Users einen unprivilegierten Benutzer anlegen.
Wenn Sie das IPMI-Interface im Zabbix-Server anlegen, wählen Sie als „IPMI Authentication algorithm“ „straight“ aus.

Hinzufügen eines Benutzer „zabbix“ für das IPMI-Monitoring

IPMI-Poller starten

Damit Sie Ihre Hardware per IPMI abfragen können, muss der Zabbix-Server oder der Zabbix-Proxy mit der IPMI-Option kompiliert worden sein. Wenn Sie fertige RPM- oder DEB-Pakete verwenden, haben Sie das IPMI-Monitoring schon an Bord.

Wenn Sie den Zabbix-Server aus den Quellen übersetzt haben, stellen Sie sicher, dass der Zabbix-Server/Proxy mit der Option --with-openipmi kompiliert wurde.
Im Log sollten beim Starten des Zabbix-Servers/Proxy folgende Zeilen vermerkt werden:

4174:20111024:081346.118 ****** Enabled features ******
4174:20111024:081346.118 SNMP monitoring:           YES
4174:20111024:081346.118 IPMI monitoring:           YES

Wenn Sie eine Standardkonfiguration bei der Installation des Zabbix-Servers verwenden, dann ist die IPMI-Funktion, die sogenannten IPMI-Poller, mit Sicherheit abgeschaltet.

  • Öffnen Sie die Datei zabbix_server.conf oder zabbix_proxy.conf mit einem Editor.
  • Setzen Sie StartIPMIPollers=5 in der Konfiguration.
  • Starten Sie den Zabbix-Server neu.
### Option: StartIPMIPollers
#       Number of pre-forked instances of IPMI pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
StartIPMIPollers=5

IPMI-Item einrichten

Den Zugriff per IPMI testen

Bevor Sie die Überwachung per IPMI in Zabbix anlegen, sollten Sie testen, ob die Schnittstelle funktioniert und der für Zabbix angelegte Benutzer Zugriff hat. Außerdem müssen Sie die Bezeichnungen der Sensoren ermitteln. Der Zabbix-Server oder die Weboberfläche bieten keine Möglichkeit, eine Liste der Sensoren abzurufen.

Installieren Sie die IPMI-Tools, um zu testen, ob Daten über IPMI ausgelesen werden können. Alle Distributionen verfügen über fertige Pakete, die Sie unter dem Namen ipmitool (Debian,SUSE) bzw. OpenIPMI-tools (Red Hat) finden.

Wenn Sie ein grafisches Tool bevorzugen oder den IPMI-Zugriff mit einem Windows- oder MAC-Rechner testen, können Sie das kostenlose Java-Programm IPMI View von Supermicro verwenden. Das Programm verbindet sich auch mit Servern, die nicht von Supermicro stammen.

Testen Sie, ob Sie Ihr IPMI-Device erreichen und was es für Infos ausgibt.

ipmitool -H <IP_ADRESSE> -U <USERNAME> -P <PASSWORD> -L USER sdr
ipmitool -H <IP_ADRESSE> -U <USERNAME> -P <PASSWORD> -I lanplus -L USER sdr # For HP ilo

Sie sollten ähnliche Informationen wie diese erhalten (Ausgabe stammt von einem Dell PowerEdge R510).

Temp             | -42 degrees C     | ok
Temp             | -43 degrees C     | ok
Temp             | 41 degrees C      | ok
Temp             | 42 degrees C      | ok
Ambient Temp     | 22 degrees C      | ok
Planar Temp      | 45 degrees C      | ok
CMOS Battery     | 0x00              | ok
VCORE PG         | 0x01              | ok
VCORE PG         | 0x01              | ok
0.75 VTT PG      | 0x01              | ok
0.75 VTT PG      | 0x01              | ok
CPU VTT PG       | 0x01              | ok
1.5V PG          | 0x01              | ok
1.8V PG          | 0x01              | ok
5V PG            | 0x01              | ok
MEM CPU2 FAIL    | 0x01              | ok
5V Riser PG      | 0x01              | ok
MEM CPU1 FAIL    | 0x01              | ok
VTT CPU2 FAIL    | 0x01              | ok
VTT CPU1 FAIL    | 0x01              | ok
0.9V PG          | 0x01              | ok
CPU2 1.8 PLL PG  | 0x01              | ok
CPU1 1.8 PLL PG  | 0x01              | ok

Eine detailliertere Übersicht der verfügbaren IPMI-Sensoren und deren Status erhalten Sie mit den folgenden Kommandos:

ipmitool -H <HOST> -U zabbix -P geheim -L USER sensor
ipmitool -H <HOST> -U zabbix -P geheim -L USER sdr get "<SENSOR_NAME>"
Zabbix überwacht die Hardware eines Dell-Servers.

Als Alternative zum Ipmitool können Sie auch das Kommando ipmi-sensors aus dem Paket Freeipmi-Tools nutzen:

ipmi-sensors -h 192.168.0.2 -u zabbix -p geheim -l USER
Caching SDR repository information: /root/.freeipmi/sdr-cache/sdr-cache-localhost
Caching SDR record 123 of 123 (current record ID 123) 
1: Temp (Temperature): NA (NA/90.00): [NA]
2: Temp (Temperature): NA (NA/90.00): [NA]
3: Temp (Temperature): NA (NA/NA): [NA]
4: Temp (Temperature): NA (NA/NA): [NA]
5: Ambient Temp (Temperature): 22.00 C (3.00/50.00): [OK]
6: Planar Temp (Temperature): NA (3.00/95.00): [NA]
7: CMOS Battery (Battery): [OK]
8: VCORE PG (Voltage): [State Deasserted]
9: VCORE PG (Voltage): [State Deasserted]
10: 0.75 VTT PG (Voltage): [State Deasserted]
11: 0.75 VTT PG (Voltage): [State Deasserted]

IPMI-Überwachung für einen Host hinzufügen

Damit ein Host per IPMI überwacht werden kann, muss Zabbix die Zugangsdaten für das IPMI-Device kennen.

In den Zabbix-Versionen vor 2.0 setzen Sie in der Konfiguration des Hosts den Haken "Use IPMI". Daraufhin erweitert sich die Eingabemaske und Sie können die Zugangsdaten eingeben. Ab Version 2.0 fügen Sie einem Host ein weiteres Interface vom Typ IPMI hinzu. Über den Reiter IPMI geben Sie die Zugangsdaten an.

IPMI IP address
Die IP-Adresse des IPMI-Geräts, die in der Regel nicht dieselbe ist wie vom Host
IPMI Port
In der Regel 623
IPMI authentication algorithm
Verwenden Sie dieselbe Methode zum Authentifizieren, die Sie auch in Ihrem IPMI Gerät eingestellt haben. Wenn Sie zum Beispiel in einer Dell-iDrac- oder Supermicro-KVM-Karte einen User hinzugefügt haben, dann ist die Authentifizierungsmethode "Default". Probieren Sie notfalls verschiedene Möglichkeiten aus. Wenn Sie Fehlermeldungen wie "cannot connect to IPMI host: [22] Invalid argument" oder "cannot connect to IPMI host: [33554441] Unknown error 33554441" erhalten, kann ein falsch ausgewählter Authentifizierungsalgorithmus der Grund dafür sein.
IPMI privilege level
Auch diesen Wert müssen Sie so einstellen, wie Sie den User im Gerät angelegt haben. In der Regel sollten Sie "User" verwenden. Zabbix verbindet sich mit eingeschränkten Rechten zum Gerät.
IPMI username und IPMI password
Zugangsdaten, so wie Sie es im Gerät angelegt haben
Hinzufügen des IPMI-Interface für einen Host

Ein IPMI-Item einrichten

  • Legen Sie ein Item für einen Host oder ein Template wie gewohnt an.
  • Wählen Sie als Type "IPMI-Agent" aus.
  • Ab Version Zabbix 2.0 müssen Sie noch das Host-Interface auswählen, welches die Verbindung zum IPMI herstellt. Wenn Sie das Item für ein Template anlegen, wird das passende Interface automatisch ausgewählt.
  • Geben Sie als "IPMI Sensor" die Datenbezeichnung ein, die Ihnen mit ipmitool in der ersten Spalte ausgegeben wird. Wenn Sie das grafische Tool IPMI View verwenden, geben Sie die Sensorbezeichnung ein, so wie Sie unterhalb der Grafik steht.
  • Als Key können Sie eine beliebige Zeichenkette eingeben, zum Beispiel den Sensornamen, bei dem Sie Leerzeichen gegen Unterstriche ersetzen.
  • Alle restlichen Angaben treffen Sie wie bei jedem Item.
Hinzufügen eines IPMI-Items. Sensorname wird aus IPMI View übernommen.

Problemfall „Discrete Sensors“

Wenn Sie mit dem ipmitool die verfügbaren Sensoren auslesen, werden Sie feststellen, dass einige Sensoren anstatt einer Einheit das Wort "discrete" vermerken. Zum Beispiel:

ipmitool -H 10.35.209.37 -U zabbix -P zabbix -L USER sensor
Ambient Temp     | na         | degrees C  |
Ambient Temp     | na         | degrees C  |
vFlash           | 0x0        | discrete   |
iDRAC6 Upgrade   | na         | discrete   |
PS Redundancy    | 0x0        | discrete   |
Fan Redundancy   | 0x0        | discrete   |

In der IPMI-Spezifikation werden Sensoren in zwei Kategorien eingeordnet: „Threshold“ und „Discrete“. Grenzwertsensoren (Threshold) sind analoge Sensoren, die kontinuierlich Daten liefern, zum Beispiel Stromaufnahme in Ampere oder RPM eines Lüfters. Unstetige oder ganzzahlige Sensoren (discrete) können mehrere Statusinformationen in einem Binärcode zurückliefern. Beispielsweise kann der Sensor eines Netzteils in einem Rückgabewert sowohl den aktuellen Status als auch die Prognose für einen zu erwartenden Fehler „verschlüsseln“. Jedes Bit der Antwort gibt dabei den Status einzelner Subkomponenten oder Sensordetailbereiche an.

Sensoren, die als "discrete" markiert sind, kann Zabbix nur schwer auslesen. Laut der offiziellen Dokumentation ist das bitweise Auslesen und Auswerten der diskreten Sensoren möglich. Bevor Sie solche diskreten Sensoren mit dem „eingebauten“ IPMI-Monitoring überwachen, sollten Sie die Zuverlässigkeit der Items und Trigger gründlich testen. Das nachfolgende Beispiel zeigt einige Fallen auf.

Beispiel: Discrete Sensors in Dell-iDrac

Die Liste der verfügbaren Sensoren eines Dell T320, welcher per IPMI über iDrac7 abgefragt wird, listet u.a. folgende Sensoren zum Zustand der Netzteile auf:

PS Redundancy    | 0x0        | discrete   | 0x0180| 
PS1 PG Fail      | 0x0        | discrete   | 0x0180|
PS2 PG Fail      | 0x0        | discrete   | 0x0180|

Diese Sensoren kann der Zabbix-Server auslesen, und alle drei Items nehmen bei hergestellter Redundanz der Netzteile den Wert 1 an. Sobald zum Beispiel das zweite Netzteil von der Stromversorgung getrennt wird, wechseln die Items "PS Redundancy" und "PS2 PG Fail" in den Status "not supported (sensor data is not available)".

Diskete Sensoren sind angeblich nicht mehr vorhanden.

Im Logfile des Zabbix-Servers sind Einträge wie der folgende zu finden:

10386:20141012:124925.487 sensor 'PS Redundancy@[192.168.152.40]:623' deleted

Der Server meldet den Ausfall eines Netzteils aber korrekt, was die nachfolgende Ausgabe von impitool verdeutlicht.

Auslesen eines Netzteilausfalls

Diskrete Sensoren per ipmitool auslesen

Viele wichtige Informationen sind aber nur über diskrete Sensoren abzulesen, zum Beispiel der Status von redundanten Netzteilen. Eine zuverlässige Lösung ist ein externes Skript, welches das impitool aufruft, zum Beispiel:

ipmitool -H 10.35.209.37 -U zabbix -P zabbix -L USER sensor get "Fan Redundancy"|grep -o "\[.*\]"
[Fully Redundant]

Ein Skript namens ipmitool.get, welches den zu prüfenden Sensor übergeben bekommt, könnte beispielsweise wie folgt aussehen:

#!/bin/bash
ipmitool -H $1 -U $2 -P $3 -L USER sdr get "$4" 2>/dev/null\
|egrep -A1 "(Sensor Reading|States Asserted)"\
|xargs echo

Richten Sie ein Item vom Typ „External Script“ ein. Als Item-Key fügen Sie ipmitool.get[{HOST.CONN},zabbix,geheim,"PS Redundancy"] ein. Achten Sie beim Anlegen des Items auf die korrekte Auswahl des Host-Interface.

Ein externes Skript prüft die Redundanz des Netzteils.

Das Item muss den Datentyp "Text" haben. Mit einem Trigger prüfen Sie anschließend, ob die Zeichenketten „Sensor Reading : 0h“ und „Redundancy State [Fully Redundant]“ im Item-Wert enthalten sind. Andernfalls löst der Trigger aus und nimmt den Status „Problem“ an. Fügen Sie in den Trigger außerdem noch eine Prüfung ein, ob der Zabbix-Server regelmäßig Daten vom externen Skript enthält. Die Trigger-Expression könnte beispielsweise so aufgebaut sein:

{Dell ESX Server:ipmitool.get[{HOST.CONN},zabbix,geheim,"PS Redundancy"].str(Sensor Reading : 0h)}=0 or 
{Dell ESX Server:ipmitool.get[{HOST.CONN},zabbix,geheim,"PS Redundancy"].str(Redundancy State [Fully Redundant])}=0 or 
{Dell ESX Server:ipmitool.get[{HOST.CONN},zabbix,geheim,"PS Redundancy"].nodata(1800)}=1
Rückgabewerte von ipmitool in Zabbix