6 Sensore

Panoramica

Ogni chip sensore ha una propria directory nell'albero sysfs /sys/devices. Per trovare tutti i chip sensore, è più semplice seguire i collegamenti simbolici dei dispositivi da /sys/class/hwmon/hwmon*, dove * è un numero reale (0,1,2,...).

Le letture dei sensori si trovano nella directory /sys/class/hwmon/hwmon*/ per i dispositivi virtuali, oppure nella directory /sys/class/hwmon/hwmon*/device per i dispositivi non virtuali. Un file denominato name, situato all'interno delle directory hwmon* o hwmon*/device, contiene il nome del chip, che corrisponde al nome del driver del kernel utilizzato dal chip sensore.

Esiste un solo valore di lettura del sensore per file. Lo schema comune per la denominazione dei file che contengono le letture dei sensori all'interno di una qualsiasi delle directory sopra menzionate è: <type><number>_<item>, dove

  • type - per i chip sensore è "in" (tensione), "temp" (temperatura), "fan" (ventola), ecc.
  • item - "input" (valore misurato), "max" (soglia alta), "min" (soglia bassa), ecc.
  • number - viene sempre utilizzato per gli elementi che possono essere presenti più di una volta (di solito inizia da 1, tranne che per le tensioni che iniziano da 0). Se i file non si riferiscono a un elemento specifico, hanno un nome semplice senza numero.

Le informazioni relative ai sensori disponibili sul host possono essere ottenute utilizzando gli strumenti sensors-detect e sensors (pacchetto lm-sensors). Sensors-detect aiuta a determinare quali moduli sono necessari per i sensori disponibili. Quando i moduli sono caricati, il programma sensors può essere utilizzato per mostrare le letture di tutti i chip sensore. L'etichettatura delle letture dei sensori, utilizzata da questo programma, può essere diversa dallo schema di denominazione comune (<type><number>_<item>):

  • se esiste un file chiamato <type><number>_label, allora l'etichetta all'interno di questo file verrà utilizzata al posto del nome <type><number><item>;
  • se non esiste un file <type><number>_label, allora il programma cerca all'interno di /etc/sensors.conf (può essere anche /etc/sensors3.conf, o diverso) la sostituzione del nome.

Questa etichettatura consente all'utente di determinare quale tipo di hardware viene utilizzato. Se non esiste né il file <type><number>_label né un'etichetta all'interno del file di configurazione, il tipo di hardware può essere determinato tramite l'attributo name (hwmon*/device/name). I nomi effettivi dei sensori, accettati da zabbix_agent, possono essere ottenuti eseguendo il programma sensors con il parametro -u (sensors -u).

Nel programma sensors i sensori disponibili sono separati in base al tipo di bus (adattatore ISA, adattatore PCI, adattatore SPI, dispositivo virtuale, interfaccia ACPI, adattatore HID).

Ottenere gli identificatori dei sensori

Le etichette dei sensori, come stampate dal comando sensors, non possono sempre essere usate direttamente perché la denominazione varia tra i diversi produttori di chip. Ad esempio, l'output di sensors potrebbe contenere le seguenti righe:

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)

Tra questi, solo un nome visualizzato corrisponde direttamente a un identificatore interno:

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

Il tentativo di usare altre etichette visualizzate (come Vcore o +12V) non funzionerà:

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

Per trovare l'identificatore interno del sensore accettato da Zabbix, eseguire sensors -u. Nell'output si può osservare quanto segue:

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

Quindi l'etichetta Vcore corrisponde all'identificatore in1, e +12V corrisponde a in4. Secondo la specifica hwmon sysfs del kernel, queste sono tensioni sui pin del chip e, in generale, potrebbero richiedere un ridimensionamento.

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

Zabbix può recuperare non solo letture di tensione (in), ma anche di corrente (curr), temperatura (temp) e velocità della ventola (fan).

Compatibilità

Distribuzioni legacy

Le letture dei sensori vengono ottenute dalla directory /proc/sys/dev/sensors:

  • device - nome del dispositivo (se viene usato <mode>, è un'espressione regolare)
  • sensor - nome del sensore (se viene usato <mode>, è un'espressione regolare)
  • mode - valori possibili: avg, max, min (se questo parametro viene omesso, device e sensor vengono trattati letteralmente)

Esempio di key: sensor[w83781d-i2c-0-2d,temp1].

Distribuzioni correnti

Le letture dei sensori vengono ottenute dalla directory /sys/class/hwmon:

  • device - nome del dispositivo (espressione non regolare). Il nome del dispositivo può essere il nome effettivo del dispositivo (ad es. 0000:00:18.3) oppure il nome ottenuto tramite il programma sensors (ad es. k8temp-pci-00c3). Spetta all'utente scegliere quale nome utilizzare.
  • sensor - nome del sensore (espressione non regolare).
  • mode - valori possibili: avg, max, min (se questo parametro viene omesso, device e sensor vengono trattati alla lettera).

Esempi di chiavi:

sensor[k8temp-pci-00c3,temp,max] oppure sensor[0000:00:18.3,temp1].

sensor[smsc47b397-isa-0880,in,avg] oppure sensor[smsc47b397.2176,in1].