GPU Sensor Monitoring Plugin

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
Das GPU-Plugin zeigt detaillierte Informationen über die verbauten GPUs und liefert aktuelle Performance-Daten.

Dieser Artikel beschreibt die Installation und Konfiguration des GPU Sensor Monitoring Plugins in Nagios bzw. Icinga. Das Plugin ermöglicht die Überwachung von NVIDIA GPU Hardware und zeigt detaillierte Statusinformationen über den aktuellen Status der Grafikkarten. Im konkreten Fall sind z.B. Temperatur, Power Usage (Stromverbrauch), ECC Errors, Lüfterdrehzahl oder Speicherauslastung überwachbar.

Aktuelle Version

Wichtige Vorabinformation

Achtung: Auf Nachfrage im NVIDIA-Forum wurde bestätigt, dass sich von der nvidia-smi/nvml angezeigten Lüfterdrehzahl nicht darauf schließen lässt, ob sich der Lüfter tatsächlich dreht. Bei den angezeigten Prozentangaben handelt es sich um jene Drehzahl, mit der der Lüfter-Algorithmus versucht den Lüfter zu betreiben. Siehe dazu die Diskussion im NVIDIA-Forum.

Im Regelfall dient daher der Temperatursensor als Indiz für einen funktionstüchtigen Lüfter, steigt die Temperatur ohne Grund fortlaufend an, kann dies auf Kühlungsprobleme hindeuten. Bei einer GPU deren Temperatur über die spezifizierte Maximum-Temperatur ansteigt, kann der Lüfter defekt sein.

Download

Die Performance-Daten können via PNP4Nagios visualisiert und analysiert werden. Dadurch können erhöhte Temperaturen, Stromverbrauch und Lüfterdrehzahlen rechtzeitig erkannt und darauf reagiert werden.

Das Plugin wird über GitHub zur Verfügung gestellt: check_gpu_sensor_v1

Über

git clone git://github.com/thomas-krenn/check_gpu_sensor_v1.git

oder

git clone https://github.com/thomas-krenn/check_gpu_sensor_v1.git

kann eine Kopie des Plugins bezogen werden. Nützliche Informationen und Tipps für die Verwendung von Git finden sich auch in der Artikel-Reihe der Kategorie: Git.

Installation des check_gpu_sensor Plugins

Für die Installation und Verwendung des Plugins werden folgende Komponenten benötig:

NVML

Die "NVIDIA Management Library" ist eine C-basierende API für das Management und die Verwaltung von NVIDIA GPUs.[1] Die Runtime-Bibliothek von NVML wird mit dem NVIDIA-Grafiktreiber ausgeliefert ("libnvidia-ml"), das NVML-SDK liefert Stub Bibliotheken, die Header-Dateien und Beispiel-Applikationen. Jede neue Version von NVML bleibt abwärtskompatibel und dient zur Erstellung von 3rd Party Software für die Verwaltung von NVIDIA GPUs. Vor allem für Produkte der Tesla-Serie steht der komplette Funktionsumfang der NVML-Bibliothek zur Verfügung Unter anderem können folgende Informationen mit NVML ermittelt werden:[1]

  • ECC Status-Informationen (Error Counts)
  • GPU Auslastung (Memory, Prozessor)
  • Temperatur und Lüfter-Geschwindigkeit
  • Aktive Compute Prozesse
  • GPU Clock-Raten
  • Power-Management

Für eine Programmierung in C kann das Tesla Deployment Kits (developer.nvidia.com) heruntergeladen werden, in der sich alle benötigten Teile für die NVML befinden. Für die Verwendung der Script-Bindings, respektive für das GPU Plugin, sind die C-Teile aber nicht nötig. Die Skriptsprachen Perl und Python werden offiziell über Bindings unterstützt (siehe unten). Das NVML API Reference Manual bietet weitere Informationen über die NVML Bibliothek.

Unterstützte OS und GPUs

Laut Reference Manual werden folgende Betriebssysteme und GPUs unterstützt:[2]

  • OS Platform
    1. Windwos Server 2008 R2 64bit, Windows 7 64bit
    2. Linux 32bit und 64bit
  • GPUs
    • Full Support
      • NVIDIA Tesla ™Line: S2050, C2050, C2070, C2075, M2050, M2070, M2075, M2090, X2070, X2090, K10, K20, K20X
      • NVIDIA Quadro ®Line: 4000, 5000, 6000, 7000, M2070-Q, 600, 2000, 3000M and 410
      • NVIDIA GeForce ®Line: None
    • Limited Support
      • NVIDIA Tesla ™Line: S1070, C1060, M1060
      • NVIDIA Quadro ®Line: All other current and previous generation Quadro-branded parts
      • NVIDIA GeForce ®Line: All current and previous generation GeForce-branded parts

Damit die NVML-Aufrufe des Plugins verwendet werden können, wird eine Installation der Perl-Bindings benötigt.

Installation der Perl Bindings

Eine Sammlung von offiziell unterstützen Bindings für Python und Perl werden über

angeboten. Diese ermöglichen die Programmierung von Software unter Zuhilfenahme der NVML-API in Python und Perl.

Bei der Installation der Perl Bindings muss beachtet werden, dass diese auch zur installierten Treiber-Version passen. Auf einem Ubuntu 12.04 kommt z.B. die Version 304.88 aus den Repos zum Einsatz:[3] Beim folgenden System wurde der experimental Driver verwendet:

$ nvidia-smi -a|grep 'Driver Version'
Driver Version                  : 304.48

Beide Treiber können mit den aktuellen Perl-Bindings in der Version "nvidia-ml-pl-4.304.1" verwendet werden.

Achtung: Erscheint beim Erstellen des Makefiles (z.B. wenn nicht der proprietäre NVIDIA-Treiber verwendet wird, sondern jener aus den Repos) folgende Fehlermeldung:

:~/nvidia-ml$ perl Makefile.PL 
Note (probably harmless): No library found for -lnvidia-ml
Writing Makefile for nvidia::ml::bindings
Writing MYMETA.yml and MYMETA.json

muss der Pfad zur "nvidia-ml" Bibliothek ergänzt werden ("-L/usr/lib/nvidia-current", oder "-L/usr/lib/nvidia-experimental-304"):

$ chmod u+w Makefile.PL
$ vi Makefile.PL
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
    NAME              => 'nvidia::ml::bindings',
    PREREQ_PM         => {}, # e.g., Module::Name => 1.1
    LIBS              => ['-L/usr/lib/nvidia-current -lnvidia-ml'], # e.g., '-lm'
    DEFINE            => '', # e.g., '-DHAVE_SOMETHING'
    INC               => '-I.', # e.g., '-I. -I/usr/include/other'
    OBJECT            => '$(O_FILES)', # link all the C files too
);

Daraufhin kompilieren die Perl-Bindings ohne Warnung und können installiert werden:

$ perl Makefile.PL
$ make
$ sudo make install

Anschließend zeigt der folgende Befehl, dass die Perl-Module installiert wurden:

$ perldoc perllocal
   Mon Apr 22 09:11:08 2013: "Module" nvidia::ml::bindings
       ·   "installed into: /usr/local/share/perl/5.14.2"

       ·   "LINKTYPE: dynamic"

       ·   "VERSION: "

       ·   "EXE_FILES: "

Installation der Plugin-Datei

Für die Installation der Plugin-Datei selbst muss die Datei "check_gpu_sensor" in das Verzeichnis der Nagios- bzw. Icinga-Plugins kopiert und als ausführbar gekennzeichnet werden:

$ sudo cp check_gpu_sensor /usr/lib/nagios/plugins/
$ sudo chmod +x /usr/lib/nagios/plugins/check_gpu_sensor

Konfiguration des check_gpu_sensor Plugins

NRPE Konfiguration

Für die Konfiguration von NRPE kann auch der Artikel Icinga NRPE Plugin zur Hilfe genommen werden.

Am überwachten Server

Damit der überwachte Host das GPU-Plugin richtig aufruft, wird im ersten Schritt eine NRPE Konfigurationsdatei erstellt (s.a. Icinga NRPE Plugin#Nagios/Icinga Client). Über die Angabe eines PCI Bus Device Strings wird die zu überwachende GPU definiert. Dieser Device String kann über das nvidia-smi-Tool eruiert werden:

$ nvidia-smi -a |grep 'Bus Id'
        Bus Id                  : 0000:83:00.0

Der soeben ausgegebene String identifiziert die GPU des Systems:

$ sudo vi /etc/nagios/nrpe_local.cfg
command[check_gpu_sensor]=/usr/lib/nagios/plugins/check_gpu_sensor -db '0000:83:00.0'

Anstatt des PCI Bus Device Strings kann auch die Device ID verwendet werden. Der Nachteil der Device IDs ist, dass nicht garantiert ist, dass über Reboots hinweg die selben IDs an die selben GPUs vergeben werden. Die Angabe des PCI Strings ist daher den Device IDs vorzuziehen:

$ ./check_gpu_sensor -db 0000:83:00.0
Warning - Tesla K20 [persistenceMode = Warning]|ECCL2AggSgl=0;1;2; ECCTexAggSgl=0;1;2; memUtilRate=1 PWRUsage=31.61;150;200;
ECCRegAggSgl=0;1;2; SMClock=705 ECCL1AggSgl=0;1;2; GPUTemperature=37;85;100; memClock=2600 usedMemory=0.24;95;99; fanSpeed=30;80;95;
graphicsClock=705 GPUUtilRate=27 ECCMemAggSgl=0;1;2;
$ ./check_gpu_sensor -d 0
Warning - Tesla K20 [persistenceMode = Warning]|ECCL2AggSgl=0;1;2; ECCTexAggSgl=0;1;2; memUtilRate=0 PWRUsage=30.36;150;200;
ECCRegAggSgl=0;1;2; SMClock=705 ECCL1AggSgl=0;1;2; GPUTemperature=38;85;100; memClock=2600 usedMemory=0.24;95;99; fanSpeed=30;80;95;
graphicsClock=705 GPUUtilRate=0 ECCMemAggSgl=0;1;2;

Das obige Beispiel zeigt eine Warnung, da der Persistence Mode unter Linux nicht aktiviert wurde.

Zuletzt muss noch in der Datei "/etc/nagios/nrpe.cfg" die IP-Adresse des Nagios/Icinga-Servers (z.B. 10.0.0.3) eingetragen werden, um eine NRPE-Verbindung zu erlauben:

sudo vi /etc/nagios/nrpe.cfg
...
allowed_hosts=127.0.0.1,10.0.0.3
...

Nach einem Restart des NPRE-Servers ist die NRPE-Konfiguration am überwachten Host abgeschlossen:

$ sudo /etc/init.d/nagios-nrpe-server restart

Am Icinga Server

Am Icinga Server werden

vorausgesetzt. Wurden beide Teile erfolgreich installiert und konfiguriert, kann für den GPU-Host eine neue Service-Konfiguration angelegt werden:

:~# vi /usr/local/icinga/etc/objects/gpu-host.cfg
define host{
        use             linux-server
        host_name       GpuNode
        alias           GpuNode
        address         10.0.0.1
        }
define service{
        use     generic-service
        host_name       GpuNode
        service_description     GPU SENSOR
        check_command   check_nrpe!check_gpu_sensor
        }

Damit dieser Service auch aktiv wird, wird der Pfad der Service-Datei in die Icinga-Konfiguration eingetragen:

:~# vi /usr/local/icinga/etc/icinga.cfg
[...]
cfg_file=/usr/local/icinga/etc/objects/gpu-host.cfg
[...]

Daraufhin kann die NRPE-Verbindung mit dem GPU-Sensor-Plugin getestet werden:

:~# /usr/lib/nagios/plugins/check_nrpe -H 10.0.0.1 -c check_gpu_sensor
OK - Tesla K20 |ECCL2AggSgl=0;1;2; ECCTexAggSgl=0;1;2; memUtilRate=0 PWRUsage=49.81;150;200; ECCRegAggSgl=0;1;2; SMClock=705
ECCL1AggSgl=0;1;2; GPUTemperature=38;85;100; memClock=2600 usedMemory=0.24;95;99; fanSpeed=30;80;95; graphicsClock=705
GPUUtilRate=0 ECCMemAggSgl=0;1;2;

Einzelnachweise

  1. 1,0 1,1 NVIDIA Management Library (NVML) (developer.nvidia.com)
  2. The NVML API Reference Manual (developer.download.nvidia.com)
  3. Ubuntu nvidia-current package (packages.ubuntu.com)
Foto Georg Schönberger.jpg

Autor: Georg Schönberger

Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.


Das könnte Sie auch interessieren

Adaptec RAID Monitoring Plugin
Monitoring eines Proxmox Clusters mit checkmk
SNMP Grundlagen