Plugin GPU Sensor Monitoring
Ten artykuł opisuje instalację i konfigurację pluginu GPU Sensor Monitoring w oprogramowaniu Nagios lub Icinga. Plugin umożliwia monitorowanie GPU firmy NVIDIA i dostarcza szczegółowych informacji odnośnie statusu danej karty graficznej. W konkretnym przypadku monitorowana może być np. temperatura, prędkość wentylatora lub wykorzystanie pamięci.
Ważne informacje wstępne
Uwaga: Na forum firmy NVIDIA zostało potwierdzone, że informacje dostarczane przez nvidia-smi/nvml nie pozwalają na stwierdzenie czy wentylator faktycznie pracuje - więcej informacji na ten temat znajduje się na NVIDIA-Forum.
Dlatego z reguły sensor temperatury służy jako dowód funkcjonowania wentylatora, gdy wzrasta temperatura ciągle i bez powodu to może to wskazywać na problemy z chłodzeniem.
Download
Plugin dostępny jest na GitHub: check_gpu_sensor_v1
Kopia pluginu możne zostać pobrana z
git clone git://github.com/thomas-krenn/check_gpu_sensor_v1.git
lub
git clone https://github.com/thomas-krenn/check_gpu_sensor_v1.git
Przydatne informacje i rady odnośnie korzystania z Git znajdują się w serii artykułów w kategorii: Git.
Instalacja pluginu check_gpu_sensor
Do instalacji i korzystania z pluginu potrzebne są następujące komponenty:
- GPU NVIDIA (np. CUDA GPUs)
- W zależności od modelu obsługiwane są różne sensory.
- NVIDIA Driver
- Sterownik producenta (vide Instalacja sterownika NVIDIA).
- lub sterownika NVIDIA z repozytorium
- NVML Perl Bindings (https://search.cpan.org/~nvbinding/)
- Odpowiedni do wersji sterownika
- Instalacja Icinga
- Icinga NRPE do monitoringu zdalnych hostów
- Do wizualizacji danych
- Za pośrednictwem PNP4Nagios mogą zostać przedstawione w formie wykresów wygenerowane dane (np. temperatura GPU).
- Debian: Wykresy Icinga z PNP pod Debianem 6.0 Squeeze
- Ubuntu: Wykresy Icinga z PNP pod Ubuntu 12.04 Precise
NVML
"NVIDIA Management Library" jest to API do zarządzania procesorami GPU firmy NVIDIA i opiera się o język programowania rodziny C.[1] Biblioteka uruchomieniowa (Runtime Library) NVML jest udostępniana przez sterownik kart graficznych NVIDIA ("libnvidia-ml"), NVML-SDK udostępnia bibliotekę Stub, pliki nagłówkowe i przykładowe aplikacje. Każda nowa wersja NVML jest wstecz kompatybilna i służy tworzeniu oprogramowania („firm trzecich") do zarządzania GPU. Szczególnie w przypadku produktów z serii Tesla dostępna jest kompletna funkcjonalność biblioteki NVML.
Miedzy innymi dzięki NVML mogą zostać ustalone następujące informacje:[1]
- status ECC (Error Counts)
- obciążenie GPU (Memory, Prozessor)
- temperatura, prędkość wentylatorów
- Aktive Compute Prozesse
- GPU Clock-Rate
- Power-Management
Do programowania w języku C może zostać pobrany Tesla Deployment Kits (developer.nvidia.com), w którym zawarte są wszystkie komponenty potrzebne do NVML. Aby móc korzystać z script bindings w pluginie GPU, te komponenty nie są konieczne. Języki skryptów Perl i Python są oficjalnie obsługiwane przez bindings (patrz poniżej). NVML API Reference Manual oferuje dalsze informacje o bibliotece NVML.
Wspierane OS i GPU
Według instrukcji wspierane są następujące systemy operacyjne i procesory graficzne:[2]
- OS Platform
- Windwos Server 2008 R2 64bit, Windows 7 64bit
- Linux 32bit und 64bit
- GPU
- Full Support
- NVIDIA Tesla TMLine: S1070, S2050, C1060, C2050/70/75, M2050/70/75/90, X2070/90
- NVIDIA Quadro ®Line: 4000, 5000, 6000, 7000, M2070-Q
- Limited Support
- NVIDIA Quadro ®Line: Wszystkie aktualne i poprzedzające Quadro GPU
- NVIDIA GeForce ®Line: Wszystkie aktualne i poprzedzające GeForce GPU
- Full Support
Do korzystania z NVML przez plugin wymagana jest instalacja perl bindings.
Instalacja Perl bindings
Zbiór oficjalnie wspieranych bindings dla Pythona i Perla dostępny jest na
Umożliwiają one programowanie aplikacji z pomocą NVML API w Pythonie i Perl.
Podczas instalacji Perl bindings należy zwrócić uwagę, aby były odpowiednie do zainstalowanej wersji sterownika. W Ubuntu 12.04 wykorzystywana jest np. wersja 295.40 z repozytorium:[3]
$ nvidia-smi -a|grep 'Driver Version' Driver Version : 295.40
Obecnie aktualną wersją producenta jest 295.41.[4] Obie wersje sterownika mogą być wykorzystywane z Perl bindings w wersji "nvidia-ml-pl-3.295.00".
Uwaga: W razie pojawienia się poniższego komunikatu podczas tworzenia makefiles (np. jeżeli nie jest wykorzystywany sterownik NVIDIA, lecz z repozytorium):
:~/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
musi zostać uzupełniona ścieżka ("-L/usr/lib/nvidia-current") do biblioteki "nvidia-ml":
$ 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 );
Następnie Perl bindings zostają bez komunikatu skompilowane i mogą zostać zainstalowane:
$ perl Makefile.PL $ make $ sudo make install
Kolejno następujące polecenie pokazuje, że moduły Perl zostały zainstalowane:
$ perldoc perllocal
Mon Apr 30 15:40:06 2012: "Module" nvidia::ml::bindings
• "installed into: /usr/local/share/perl/5.10.1"
• "LINKTYPE: dynamic"
• "VERSION: "
• "EXE_FILES: "
Instalacja pluginu
Instalacja pluginu wymaga, aby plik "check_gpu_sensor" został skopiowany do katalogu Nagios- lub Icinga-Plugins i następnie oznaczony jako wykonywalny:
$ sudo cp check_gpu_sensor /usr/lib/nagios/plugins/ $ sudo chmod +x /usr/lib/nagios/plugins/check_gpu_sensor
Konfiguracja pluginu check_gpu_sensor
Konfiguracja NRPE
Do pomocy w konfiguracji NRPE może zostać wykorzystany artykuł Plugin Icinga NRPE.
Na monitorowanym serwerze
Aby monitorowany host poprawnie wywoływał plugin GPU, jako pierwszy musi zostać utworzony plik konfiguracyjny NRPE (vide Klient Icinga):
$ sudo vi /etc/nagios/nrpe_local.cfg command[check_gpu_sensor]=/usr/lib/nagios/plugins/check_gpu_sensor
Następnie w pliku "/etc/nagios/nrpe.cfg" musi jeszcze zostać dodany adres IP serwera Nagios/Icinga (np. 10.0.0.3), aby zezwolić na połączenie NRPE:
sudo vi /etc/nagios/nrpe.cfg ... allowed_hosts=127.0.0.1,10.0.0.3 ...
Po restarcie serwera NPRE konfiguracja NRPE jest na monitorowanym hoście zakończona:
$ sudo /etc/init.d/nagios-nrpe-server restart
Na serwerze Icinga
Na serwerze Icinga wymagana jest:
- instalacja Icinga
- oraz do monitoringu zdalnych hostów NRPE-Plugin (Plugin Icinga NRPE#Serwer Icinga).
Jeżeli obie części zostały pomyślnie zainstalowane i skonfigurowane to dla GPU hosta może zostać utworzona nowa Service-Konfiguration:
:~# 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 }
Aby serwis był również aktywny musi zostać dodana w konfiguracji Icinga ścieżka do pliku konfiguracyjnego:
:~# vi /usr/local/icinga/etc/icinga.cfg [...] cfg_file=/usr/local/icinga/etc/objects/gpu-host.cfg [...]
Następnie połączenie NRPE z pluginem GPU możne zostać przetestowane:
:~# /usr/lib/nagios/plugins/check_nrpe -H 10.0.0.1 -c check_gpu_sensor OK - GeForce GTX 260 |nvmlUsedMemory=6.19;95;99; nvmlGpuTemperature=43.00;85;100; nvmlDeviceFanSpeed=40.00;80;95
Odnośniki
- ↑ 1,0 1,1 NVIDIA Management Library (NVML) (developer.nvidia.com)
- ↑ The NVML API Reference Manual (developer.download.nvidia.com)
- ↑ Ubuntu nvidia-current package (packages.ubuntu.com)
- ↑ Cuda Downloads (developer.nvidia.com)