7 Sensores

Cada sensor do chip recebe seu próprio diretório na árvore 'sysfs' (/sys/devices). Para localizar todos so chips sensores, a forma mais fácil é seguir os links simbólicos de dispositivo de /sys/class/hwmon/hwmon*, onde * é um número real (0,1,2,...).

A leitura dos sensores de dispositivos virtuais está localizada /sys/class/hwmon/hwmon*/, enquanto para dispositivos reais se localiza e /sys/class/hwmon/hwmon*/device. Um arquivo, Um arquivo localizado de hwmon* ou hwmon*/device irá conter o nome do chip, que corresponderá ao nome do driver de kernel utilizado com ele.

Em cada arquivo ocorre a leitura de valor de um sensor. O padrão de nomenclatura dos arquivos em ambas as localizações é: <type><number>_<item>, onde

  • type - para chips sensores é "in" (voltagem), "temp" (temperatura), "fan" (fan), etc.,
  • item - "input" (valor medido), "max" (limite máximo), "min" (limite mínimo), etc.,
  • number - é sempre utilizado para elementos que podem aparecer mais de uma vez (normalmente começam com '1', exceto para voltagens que começam com '0'). Se os arquivos não se referem a um elemento específico então eles terão o nome sem o número.

A informação sobre os sensores disponíveis no host pode ser obtida usando ferramentas de sensor-detect e sensors (pacote lm-sensors: http://lm-sensors.org/). Sensors-detect ajuda a determinar qual são os módulos necessários para os sensores disponíveis. Quando os módulos são carregados o programa sensors pode ser utilizado para ler todos os chips. O padrão de nomenclatura utilizado pode ser diferente do padrão (<type><number>_<item> ):

  • se não tiver um arquivo chamado <type><number>_label, então o rótulo dentro do arquivo será utilizado ao invés de <type><number><item> ;
  • se não existir o arquivo <type><number>_label, então o programa irá procurar dentro de '/etc/sensors.conf' (também pode ser em /etc/sensors3.conf, ou outro) pelo substituto do nome.

Esta nomenclatura permite que o usuário determine qual o tipo de hardware está sendo utilizado. Se não for encontrado o arquivo <type><number>_label ou nenhum rótulo dentro do arquivo de configuração o tipo do hardware poderá ser determinado pelo atributo do nome (hwmon*/device/name). Os nomes atuais dos sensores, que o zabbix_agent aceita, podem ser obtidos através do programa sensors com o parâmetro '-u' (sensors -u).

Com o programa sensor os sensores disponíveis estarão separados pelo tipo "via" (bus) (adaptador ISA, PCI, SPI, dispositivo virtual, interface ACPI, adaptador HID).

No Linux 2.4:

(A leitura dos sensores pode ser obtida a partir do diretório /proc/sys/dev/sensors)

  • device - nome do dispositivo (se o <mode> for utilizado, será uma expressão regular);
  • sensor - nome do sensor (se o <mode> for utilizado, será uma expressão regular);
  • mode - valores possíveis: avg, max, min (se este parâmetro for omitido o dispositivo e o sensor serão tratados de forma textual).

Exemplo de chave: sensor[w83781d-i2c-0-2d,temp1]

Antes do Zabbix 1.8.4, o formato sensor[temp1] era utilizado.

No Linux 2.6+:

(A leitura dos sensores pode ser obtida a partir do diretório /sys/class/hwmon )

  • device - nome do dispositivo (expressão não regular). O nome do dispositivo pode ser o nome atual do dispositivo (ex. 0000:00:18.3) ou o nome obtido usando os programas de sensor (ex.. k8temp-pci-00c3). Cabe ao usuário escolher qual nome utilizar;
  • sensor - nome do sensor (expressão não regular);
  • mode - valores possíveis: avg, max, min (se este parâmetro for omitido o dispositivo e o sensor serão tratados de forma textual).

Exemplos de chave:

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

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

Obtendo os nomes de sensores

Os rótulos dos sensores, assim como o apresentado pelo comando sensors, não pode ser utilizado diretamente pois o padrão de nomenclatura de cada fabricante pode ser diferente. Observe o exemplo de saída do comando sensors apresentado:

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

Neste exemplo, somente um rótulo pode ser utilizado diretamente:

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

A tentativa de usar os outros rótulos (como Vcore ou +12V) não funcionarão.

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

Para descobrir o nome atual de cada sensor, que poderá ser utilizado pelo Zabbix para ler as informações, execute o comando sensors -u. A saída deverá ser algo similar ao exemplo a seguir:

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

Logo, Vcore pode ser consultado como in1, e +12V pode ser consultado como in4.1

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

Não apenas a voltagem (in), mas também a corrente (curr), temperatura (temp) e velocidade do ventilador (fan) podem ser obtidas pelo Zabbix.


  1. conforme a especificação estes são as voltagens nos pinos do chip.↩︎