8 Sensor

Każdy chip sensora ma swój własny katalog w drzewie sysfs /sys/devices. Aby znaleźć wszystkie chipy sensorów, łatwiej jest skorzystać z dowiązań symbolicznych urządzenia z /sys/class/hwmon/hwmon*, gdzie * jest liczbą rzeczywistą (0,1,2,...).

Odczyty sensorów znajdują się albo w katalogu /sys/class/hwmon/hwmon*/ dla urządzeń wirtualnych, albo w katalogu /sys/class/hwmon/hwmon*/device dla urządzeń niewirtualnych. Plik o nazwie name, znajdujący się wewnątrz katalogów hwmon* lub hwmon*/device, zawiera nazwę chipa, która odpowiada nazwie sterownika jądra używanego przez chip sensora.

Istnieje tylko jedna wartość odczytu sensora na plik. Wspólny schemat nazewnictwa plików zawierających odczyty sensorów w każdym z wyżej wymienionych katalogów jest następujący: <type><number>_<item>, gdzie

  • type - dla chipów sensorów to "in" (napięcie), "temp" (temperatura), "fan" (wentylator), itp.,
  • item - "input" (wartość mierzona), "max" (górny próg), "min" (dolny próg), itp.,
  • number - zawsze używany dla elementów, które mogą występować więcej niż jeden raz (zazwyczaj zaczyna się od 1, z wyjątkiem napięć, które zaczynają się od 0). Jeśli pliki nie odnoszą się do konkretnego elementu, mają prostą nazwę bez numeru.

Informacje dotyczące dostępnych sensorów na hoście można uzyskać z użyciem narzędzi sensor-detect i sensors (pakiet lm-sensors: http://lm-sensors.org/). Sensors-detect pomaga określić, które moduły są potrzebne do dostępnych sensorów. Po załadowaniu modułów program sensors może być używany do pokazywania odczytów wszystkich sensorów chipów. Etykietowanie odczytów sensorów, używane przez ten program, może różnić się od wspólnego schematu nazewnictwa (<type><number>_<item> ):

  • jeśli istnieje plik o nazwie <type><number>_label, to zostanie użyta etykieta znajdująca się w tym pliku zamiast nazwy <type><number><item>;
  • jeśli nie ma pliku <type><number>_label, to program szuka wewnątrz /etc/sensors.conf (może być również /etc/sensors3.conf lub inny) w celu podstawienia nazwy.

To etykietowanie pozwala użytkownikowi określić, jaki rodzaj sprzętu jest używany. Jeśli nie ma pliku <type><number>_label ani etykiety wewnątrz pliku konfiguracyjnego, rodzaj sprzętu można określić przez atrybut name (hwmon*/device/name). Faktyczne nazwy sensorów, które akceptuje agent zabbix, można uzyskać uruchamiając program sensors z parametrem -u (sensors -u).

W programie sensors dostępne sensory są oddzielone według typu magistrali (adapter ISA, adapter PCI, adapter SPI, urządzenie wirtualne, interfejs ACPI, adapter HID).

Na Linux 2.4:

(Odczyty sensorów są uzyskiwane z katalogu /proc/sys/dev/sensors)

  • device - nazwa urządzenia (jeśli jest używany <mode>, jest to wyrażenie regularne);
  • sensor - nazwa sensora (jeśli jest używany <mode>, jest to wyrażenie regularne);
  • mode - możliwe wartości: avg, max, min (jeśli ten parametr jest pominięty, urządzenie i sensor są traktowane dosłownie).

Przykładowy klucz: sensor[w83781d-i2c-0-2d,temp1]

Przed wersją Zabbix 1.8.4 używany był format sensor[temp1].

Na Linux 2.6+:

(Odczyty sensorów są uzyskiwane z katalogu /sys/class/hwmon)

  • device - nazwa urządzenia (bez wyrażeń regularnych). Nazwa urządzenia może być rzeczywistą nazwą urządzenia (np. 0000:00:18.3) lub nazwą uzyskaną za pomocą programu sensors (np. k8temp-pci-00c3). Użytkownik może wybrać, którą nazwę chce używać;
  • sensor - nazwa sensora (bez wyrażeń regularnych);
  • mode - możliwe wartości: avg, max, min (jeśli ten parametr jest pominięty, urządzenie i sensor 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]

Pozyskiwanie nazw sensorów

Etykiety sensorów, tak jak są wyświetlane przez polecenie sensors, nie zawsze mogą być używane bezpośrednio, ponieważ nazewnictwo etykiet może się różnić w zależności od producenta chipa sensoru. Na przykład, wynik polecenia 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)

Spośród nich tylko jedna etykieta może być użyta bezpośrednio:

$ zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,in0]
       2.240000

Próba użycia innych etykiet (takich jak Vcore lub +12V) nie będzie działać.

$ zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,Vcore]
       ZBX_NOTSUPPORTED

Aby dowiedzieć się rzeczywistej nazwy sensora, która może być używana przez Zabbix do pobrania odczytów z sensora, należy uruchomić sensors -u. W wyniku, można zobaczyć następujący wynik:

$ 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
       ...

Więc Vcore powinno być zapytane jako in1, a +12V jako in4.1

$ zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,in1]
       1.301000

Nie tylko napięcie (in), ale również odczyty prądu (curr), temperatury (temp) oraz prędkości wentylatorów (fan) mogą być pobierane przez Zabbix.


  1. Zgodnie z specyfikacją są to napięcia na pinach chipa i zazwyczaj mogą wymagać skalowania.↩︎