www.thomas-krenn.com - der Server Spezialist

IPMI Sensor Monitoring Plugin

Aus Wiki Thomas-Krenn.AG

Wechseln zu: Navigation, Suche

Dieser Artikel beschreibt die Konfiguration des IPMI Sensor Monitoring Plugins in Nagios bzw. Icinga. Mit diesem Plugin kann der Hardware-Status eines Servers mit Nagios/Icinga überwacht werden. Konkret werden beispielsweise Lüfterdrehzahlen, Temperaturen, Spannungen, Stromaufnahme, Netzteilleistung etc. überwacht.

Inhaltsverzeichnis

Download

Das IPMI Sensor Plugin kann hier heruntergeladen werden:

Versionen

Version Datum Changelog
1.0 20091021 Initiale Version (stable)
1.1 20091204
  • added "-H localhost" option to execute ipmitool locally (localhost.patch), this allows:
    • to monitor the Nagios/Icinga server itself
    • to monitor hosts using NRPE/check_by_ssh for remote execution

(contributor: Ulrich Zehl, lagis Internet Serviceprovider GmbH)

1.2beta (na) geplante Erweiterungen für künftige Versionen (noch nicht verfügbar):
  • support of encrypted communication (IPMI 2.0 lanplus)
  • support of IPMI password files
  • error handling for creation of SDR cache file
  • query for other locations of ipmitool in case it is not in /usr/bin/ (e.g. in /bin, /usr/bin, /usr/local/bin) - e.g. using IPMITOOL=$(which ipmitool)
  • option to change performance data output to omit quotes and to use underscores instead, e.g. to return Fan_1=5432 instead of 'Fan 1'=5432 - this should allow Zenoss users to use this plugin (a Zenoss user reported that zenoss has issues with creating graphs for datasources with quotes)

Konfiguration

Die folgenden Schritte beschreiben die notwendige Konfiguration für die Verwendung des Plugins.

Softwareanforderungen

Das IPMI Sensor Monitoring Plugin benötigt folgende Software-Komponenten:

  • ipmitool
  • gawk

Plugin einspielen

Damit das Plugin verwendet werden kann muss es in Nagios eingespielt werden. Kommt etwa Nagios unter Debian Lenny zum Einsatz wird das Plugin an folgende Stelle kopiert:

  • /usr/lib/nagios/plugins/check_ipmi_sensor

host Definition

Die IP Adresse des IPMI Interface des betreffenden Servers kann als Custom Object Variable[1] _ipmi_ip definiert werden:

define host {
        host_name   host-sr2500-1
        alias       Host SR2500 1
        address     192.168.1.151
        use         generic-host
        _ipmi_ip    192.168.1.211
        }

command Definition

Das Kommando check_ipmi_sensor wird wie folgt definiert (unter Debian z.B. in /etc/nagios3/commands.cfg).

define command{
        command_name    check_ipmi_sensor
        command_line    $USER1$/check_ipmi_sensor -H $_HOSTIPMI_IP$ -U $ARG1$ -P $ARG2$ -T $ARG3$ -L user
        }

Hier wird auf die zuvor definierte Custom Object Variable als $_HOSTIPMI_IP$ zugegriffen.[1]

service Definition

Das folgende Beispiel zeigt einen Service zur Überwachung aller Sensoren vom Typ Fan:

define service{
        use                     generic-service
        host_name               host-sr2500-1
        service_description     IPMI Fans SR2500-6fans
        check_command           check_ipmi_sensor!$USER3$!$USER4$!Fan
        }

Anmerkung: Zum Testen können Sie zu Beginn normal_check_interval und retry_check_interval an dieser Stelle auf einen kleinen Wert stellen, um Statusänderungen schneller zu sehen - z.B.:

define service{
        use                     generic-service
        host_name               host-sr2500-1
        service_description     IPMI Fans SR2500-6fans
        normal_check_interval   1
        retry_check_interval    1
        check_command           check_ipmi_sensor!$USER3$!$USER4$!Fan
        }

Eine Liste der möglichen IPMI SDR Typen finden Sie hier: Liste der möglichen SDR Typen.

Mit ipmitool sdr elist full (zeigt die Liste aller Sensor Records) bzw. ipmitool sdr elist all (zeigt eine Liste aller Sensor und Locator Records) können Sie sich alle Sensoren Ihres Servers anzeigen lassen und so einen Überblick bekommen welche SDR Typen Sie überwachen möchten.

Hinweis: Alternativ können Sie auch anstelle eines bestimmten SDR Typs als Typ auch "full" angeben. Dadurch wird beim Check ipmitool sdr elist full verwendet. Auf diese Weise haben Sie nur einen Hardware-Server pro Server. Diese Methode ist hauptsächlich in größeren Umgebungen interessant.

IPMI Userdaten in resource.cfg

Der IPMI Benutzername und das zugehörige Password werden in der resource.cfg konfiguriert (bei Debian in /etc/nagios3/resource.cfg).

Hinweis: aus Sicherheitsgründen empfehlen wir für das Monitoring einen IPMI Benutzer vom Privilege Level 'USER' zu benützen. Dazu ist bei der command Definition auch der Parameter -L user angegeben. Weitere Informationen zu den unterschiedlichen IPMI Privilege Levels finden Sie im Absatz Channel Privilege Levels des Artikels IPMI Grundlagen. Informationen zum Erstellen eines IPMI Benutzers mittels ipmitool finden Sie im Artikel IPMI Konfiguration unter Linux mittels ipmitool. Dabei muss ipmitool entweder lokal auf dem Server aufgerufen werden, auf dem der IPMI Benutzer angelegt werden soll. Oder es ist schon ein anderer IPMI Benutzer mit Administrator Privilege Level vorhanden - dann kann die Konfiguration auch remote erfolgen. Alternativ bieten je nach Serverhersteller spezielle Management-Boot-CDs oder ein Webinterface des Remote Managements (KVM over IP) die Möglichkeit IPMI Benutzer zu verwalten.

Hier der Beispielinhalt einer resource.cfg:

###########################################################################
#
# RESOURCE.CFG - Resource File for Nagios 
#
# You can define $USERx$ macros in this file, which can in turn be used
# in command definitions in your host config file(s).  $USERx$ macros are
# useful for storing sensitive information such as usernames, passwords, 
# etc.  They are also handy for specifying the path to plugins and 
# event handlers - if you decide to move the plugins or event handlers to
# a different directory in the future, you can just update one or two
# $USERx$ macros, instead of modifying a lot of command definitions.
#
# The CGIs will not attempt to read the contents of resource files, so
# you can set restrictive permissions (600 or 660) on them.
#
# Nagios supports up to 32 $USERx$ macros ($USER1$ through $USER32$)
#
# Resource files may also be used to store configuration directives for
# external data sources like MySQL...
#
###########################################################################

# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/lib/nagios/plugins

# Sets $USER2$ to be the path to event handlers
#$USER2$=/usr/lib/nagios/plugins/eventhandlers

# Store some usernames and passwords (hidden from the CGIs)
# username for use in check_ipmi_sensors plugin
$USER3$=monitor
# password for use in check_ipmi_sensors plugin
$USER4$=relation

Nagios Konfiguration neu einlesen

Nun wird die Konfiguration neu eingelesen:

/etc/init.d/nagios3 reload

Darstellung in Nagios

Nagios 3.0.6 IPMI Plugin Fan Beispiel

Darstellung mit NagiosGrapher

NagiosGrapher 1.6.1 IPMI Plugin Fan Beispiel

Für die entsprechende Konfiguration siehe NagiosGrapher Konfiguration#Beispiel mit graph perf regex.

Beispielausgaben

Die folgenden Beispiele zeigen die unterschiedlich umfangreichen Ausgaben des Plugins (je nach verbose-Level). Die Ausgaben entsprechen dabei den Vorschlägen der Nagios plug-in development guidelines.[2]

Normale Abfrage

Status OK:

debian:/usr/lib/nagios/plugins# ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan
Fan Status: OK | 'Fan1'=6480 'Fan2'=7020 'Fan5'=5265 'Fan6'=5265 'Fan7'=6480 
debian:/usr/lib/nagios/plugins# echo $?
0
debian:/usr/lib/nagios/plugins# 

Status Warning:

debian:/usr/lib/nagios/plugins# ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan
Fan Status: Warning [Fan3 = ns, Fan4 = ns, Fan8 = ns] | 'Fan1'=6480 'Fan2'=7020 'Fan5'=5265 'Fan6'=5265 'Fan7'=6480 
debian:/usr/lib/nagios/plugins# echo $?
1
debian:/usr/lib/nagios/plugins# 

Status Warning (hier mit '-T full'):

debian:/usr/lib/nagios/plugins# ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T full
full Status: Warning [CPU2 Temp = ns, CPU2 Vcore = ns, CPU2 DIMM = ns, Intrusion = lnc] | 'System Temp'=31 'CPU1 Vcore'=0.98 'CPU1 DIMM'=1.51 '+1.5V'=1.50 '+3.3V'=3.24 '+3.3VSB'=3.24 '+5V'=5.12 '+12V'=12.19 'VBAT'=3.19 'Fan1'=6480 'Fan2'=7020 'Fan5'=5265 'Fan6'=5265 'Fan7'=6480 
debian:/usr/lib/nagios/plugins# 

Abfrage mit -v 1

Status OK: die Ausgabe ist in diesem Fall ident mit der normalen Abfrage oben.

Status Warning:

debian:/usr/lib/nagios/plugins# ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan -v 1
Fan Status: Warning [Fan3 = ns (No Reading), Fan4 = ns (No Reading), Fan8 = ns (No Reading)] | 'Fan1'=6480 'Fan2'=7020 'Fan5'=5265 'Fan6'=5265 'Fan7'=6480 
debian:/usr/lib/nagios/plugins# echo $?
1
debian:/usr/lib/nagios/plugins# 

Abfrage mit -v 2

Status OK:

debian:/usr/lib/nagios/plugins# ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan -v 2
Fan Status: OK | 'Fan1'=6480 'Fan2'=7020 'Fan5'=5265 'Fan6'=5265 'Fan7'=6480 
Fan1 = 6480 RPM (Status: ok)
Fan2 = 7020 RPM (Status: ok)
Fan5 = 5265 RPM (Status: ok)
Fan6 = 5265 RPM (Status: ok)
Fan7 = 6480 RPM (Status: ok)
debian:/usr/lib/nagios/plugins# echo $?
0
debian:/usr/lib/nagios/plugins# 

Status Warning:

debian:/usr/lib/nagios/plugins# ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan -v 2
Fan Status: Warning [Fan3 = ns (No Reading), Fan4 = ns (No Reading), Fan8 = ns (No Reading)] | 'Fan1'=6480 'Fan2'=7020 'Fan5'=5265 'Fan6'=5265 'Fan7'=6480 
Fan1 = 6480 RPM (Status: ok)
Fan2 = 7020 RPM (Status: ok)
Fan3 = No Reading (Status: ns)
Fan4 = No Reading (Status: ns)
Fan5 = 5265 RPM (Status: ok)
Fan6 = 5265 RPM (Status: ok)
Fan7 = 6480 RPM (Status: ok)
Fan8 = No Reading (Status: ns)
debian:/usr/lib/nagios/plugins# echo $?
1
debian:/usr/lib/nagios/plugins# 

Abfrage mit -v 3

Status OK:

debian:/usr/lib/nagios/plugins# ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan -v 3
------------- begin of debug output (-v 3 is set): ------------
  script was executed with the following parameters:
    ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan -v 3
  ipmitool was executed with the following parameters:
    /usr/bin/ipmitool -I lan -H 10.10.10.233 -U monitor -P relation -L user -S /tmp/ipmi-sdr-cache-10.10.10.233 sdr type "Fan"
  ipmitool return code: 0
  output of ipmitool:
Fan1             | 0Eh | ok  |  7.2 | 6480 RPM
Fan2             | 0Fh | ok  |  7.2 | 7020 RPM
Fan5             | 12h | ok  |  7.2 | 5265 RPM
Fan6             | 13h | ok  |  7.2 | 5265 RPM
Fan7             | 14h | ok  |  7.2 | 6480 RPM
--------------------- end of debug output ---------------------
Fan Status: OK | 'Fan1'=6480 'Fan2'=7020 'Fan5'=5265 'Fan6'=5265 'Fan7'=6480 
Fan1 = 6480 RPM (Status: ok)
Fan2 = 7020 RPM (Status: ok)
Fan5 = 5265 RPM (Status: ok)
Fan6 = 5265 RPM (Status: ok)
Fan7 = 6480 RPM (Status: ok)
debian:/usr/lib/nagios/plugins# echo $?
0
debian:/usr/lib/nagios/plugins# 

Status Warning:

debian:/usr/lib/nagios/plugins# ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan -v 3
------------- begin of debug output (-v 3 is set): ------------
  script was executed with the following parameters:
    ./check_ipmi_sensor -H 10.10.10.233 -L user -U monitor -P relation -T Fan -v 3
  ipmitool was executed with the following parameters:
    /usr/bin/ipmitool -I lan -H 10.10.10.233 -U monitor -P relation -L user -S /tmp/ipmi-sdr-cache-10.10.10.233 sdr type "Fan"
  ipmitool return code: 0
  output of ipmitool:
Fan1             | 0Eh | ok  |  7.2 | 6480 RPM
Fan2             | 0Fh | ok  |  7.2 | 7020 RPM
Fan3             | 10h | ns  |  7.2 | No Reading
Fan4             | 11h | ns  |  7.2 | No Reading
Fan5             | 12h | ok  |  7.2 | 5265 RPM
Fan6             | 13h | ok  |  7.2 | 5265 RPM
Fan7             | 14h | ok  |  7.2 | 6480 RPM
Fan8             | 15h | ns  |  7.2 | No Reading
--------------------- end of debug output ---------------------
Fan Status: Warning [Fan3 = ns (No Reading), Fan4 = ns (No Reading), Fan8 = ns (No Reading)] | 'Fan1'=6480 'Fan2'=7020 'Fan5'=5265 'Fan6'=5265 'Fan7'=6480 
Fan1 = 6480 RPM (Status: ok)
Fan2 = 7020 RPM (Status: ok)
Fan3 = No Reading (Status: ns)
Fan4 = No Reading (Status: ns)
Fan5 = 5265 RPM (Status: ok)
Fan6 = 5265 RPM (Status: ok)
Fan7 = 6480 RPM (Status: ok)
Fan8 = No Reading (Status: ns)
debian:/usr/lib/nagios/plugins# echo $?
1
debian:/usr/lib/nagios/plugins# 

Mögliche Sensortypen

Die folgende Tabelle zeigt beispielhaft welche Sensortypen (SDR Types) bei bestimmten Server abgefragt werden können:

SDR Type Intel SR2500 Supermicro Server mit X8DT3-F Mainboard
Temperature ja ja
Voltage ja ja
Current ja
Fan ja ja
Physical Security ja ja
Platform Security ja
Processor ja
Power Supply ja ja
Power Unit ja
Other ja (gibt Netzteil-Leistungsaufnahme an)
Memory ja
Drive Slot / Bay ja
Event Logging Disabled ja
System Event ja
Critical Interrupt ja
Button ja
Slot / Connector ja
System ACPI Power State ja
Entity Presence ja
Battery ja
Session Audit ja

Lüfter bei Supermicro Systemen

Bei den Supermicro Systemen hängt es vom jeweiligen Gehäuse welche Lüfter vorhanden sind. Für nicht vorhandene Lüfter können im IPMI BMC die SDR Einträge entfernt werden (siehe Supermicro Mainboards mit WPCM450 BMC IPMI Sensoren ausblenden).

Gehäuse Fan1 Fan2 Fan3 Fan4 Fan5 Fan6 Fan7 Fan8
SC823 ja ja ja ja - - - -
SC836 ja ja ja - ja ja - -
SR108 low noise ja ja - - ja - ja ja

Einzelnachweise

  1. 1,0 1,1 http://nagios.sourceforge.net/docs/3_0/customobjectvars.html
  2. Nagios plug-in development guidelines (Kapitel 2.2. Verbose output)

Weitere Informationen

Persönliche Werkzeuge