7 Czujnik
Każdy układ czujnika dostaje swój własny katalog w drzewie katalogów systemowych /sys/devices. Żeby znaleźć układy czujników, najlepiej jest sprawdzić linki symboliczne urządzeń z /sys/class/hwmon/hwmon*, gdzie * to liczba całkowita (0,1,2,...).
Odczyty czujników umieszczane są albo w katalogu /sys/class/hwmon/hwmon*/ dla urządzeń wirtualnych, albo w katalogu /sys/class/hwmon/hwmon*/device dla urządzeń rzeczywistych. Plik o nazwie name, znajdujący się w katalogach hwmon* lub hwmon*/device zawiera nazwę układu, odpowiadającą nazwie sterownika jądra używanego przez układ czujnika.
W każdym pliku znajduje się tylko jedna wartość odczytu czujnika. Podstawowy schemat nazywania plików zawierających odczyty czujnika wewnątrz dowolnego z powyższych katalogów jest następujący: <typ><numer>_<pozycja>, gdzie
- typ - dla układów czujników to "in" (napięcie), "temp" (temperatura), "fan" (wentylator), itd.,
- pozycja - "input" (wartość zmierzona), "max" (próg najwyższy), "min" (próg najniższy), itd.,
- numer - używany zawsze dla elementów, których może być więcej niż 1 (zwykle rozpoczyna się od 1, z wyjątkiem napięcia, które zaczyna się od 0). Jeżeli plik nie odnosi się do specyficznego elementu, to ma prostą nazwę bez liczby.
Informacje o dostępnych czujnikach dla hosta można uzyskać przy użyciu narzędzi sensor-detect i sensors (pakiet lm-sensors: http://lm-sensors.org/). Sensors-detect pomaga określić, które moduły są niezbędne dla dostępnych czujników. Po załadowaniu modułów, do odczytu wartości z wszystkich układów czujników można użyć programu sensors. Nazewnictwo odczytów czujników używane przez ten program może być inne niż ogólny schemat (<typ><numer>_<pozycja>):
- jeżeli istnieje plik o nazwie <typ><numer>_label, to zamiast nazwy <typ><numer><pozycja> zostanie użyta etykieta z tego pliku;
- jeżeli nie istnieje plik o nazwie <typ><numer>_label, to program poszuka substytutu nazwy w pliku /etc/sensors.conf (może to być również /etc/sensors3.conf, lub inny).
Takie nazewnictwo pozwala użytkownikowi na określenie typu używanego urządzenia. Jeżeli zarówno nie istnieje plik <typ><numer>_label ani nie ma etykiety w pliku konfiguracji, typ urządzenia może być określony na podstawie atrybutu name (hwmon*/device/name). Aktualne nazwy czujników akceptowane przez zabbix_agent, można uzyskać uruchamiając program sensors z parametrem -u (sensors -u).
W programie sensor dostępne czujniki są podzielone według typu szyny (ISA adapter, PCI adapter, SPI adapter, Virtual device, ACPI interface, HID adapter).
W Linux 2.4:
(Odczyty czujników są pobierane z katalogu /proc/sys/dev/sensors)
- urządzenie - nazwa urządzenia (jeżeli użyto <tryb>, jest to wyrażenie regularne);
- czujnik - nazwa czujnika (jeżeli użyto <tryb>, jest to wyrażenie regularne);
- tryb - możliwe wartości: avg, max, min (jeżeli parametr ten jest pominięty, urządzenie i czujnik są traktowane dosłownie).
Przykładowy klucz: sensor[w83781d-i2c-0-2d,temp1]
Do Zabbix 1.8.4, używany był format sensor[temp1].
W Linux 2.6+:
(Odczyty czujników są pobierane z katalogu /sys/class/hwmon)
- urządzenie - nazwa urządzenia (nie wyrażenie regularne). Nazwą urządzenia może być faktyczna jego nazwa (np. 0000:00:18.3) lub nazwa zwracana z programu sensors (np. k8temp-pci-00c3). Tylko od użytkownika zależy, która nazwa zostanie użyta;
- czujnik - nazwa czujnika (nie wyrażenie regularne);
- tryb - możliwe wartości: avg, max, min (jeżeli parametr ten jest pominięty, urządzenie i czujnik są traktowane dosłownie).
Przykładowy klucz:
sensor[k8temp-pci-00c3,temp, max] lub sensor[0000:00:18.3,temp1]
sensor[smsc47b397-isa-0880,in, avg] lub sensor[smsc47b397.2176,in1]
Pobieranie nazw czujników
Etykiety czujników wyświetlane poleceniem sensors nie zawsze mogą być użyte bezpośrednio, ze względu na to, że nazewnictwo etykiet może się różnić w zależności od dostawcy układu czujnika. Na przykład, wyjście sensors może zawierać następujące linie:
$ sensors
in0: +2.24 V (min = +0.00 V, max = +3.32 V)
Vcore: +1.15 V (min = +0.00 V, max = +2.99 V)
+3.3V: +3.30 V (min = +2.97 V, max = +3.63 V)
+12V: +13.00 V (min = +0.00 V, max = +15.94 V)
M/B Temp: +30.0°C (low = -127.0°C, high = +127.0°C)
Z powyższego, tylko jednej etykiety można użyć bezpośrednio:
$ zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,in0]
2.240000
Próba użycia innych etykiet (np. Vcore lub +12V) nie powiedzie się.
$ zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,Vcore]
ZBX_NOTSUPPORTED
Żeby odszukać prawdziwą nazwę czujnika, której Zabbix mógłby użyć do odczytu jego wartości, należy uruchomić sensors -u. W wyniku można zaobserwować np.:
$ sensors -u
...
Vcore:
in1_input: 1.15
in1_min: 0.00
in1_max: 2.99
in1_alarm: 0.00
...
+12V:
in4_input: 13.00
in4_min: 0.00
in4_max: 15.94
in4_alarm: 0.00
...
Zatem Vcore powinno być odczytywane przez in1, a +12V przez in4.[^1]
$ zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,in1]
1.301000
Oprócz Napięcia (in) Zabbix może odczytywać również natężenie (curr), temperaturę (temp) i prędkość wiatraczków (fan).
[^1]: Zgodnie ze specyfikacją są to napięcia na nóżkach układu i ogólnie rzecz biorąc można je regulować.