[comment]: # ({1035fd30-b33b8329})
# 6 Sensor

[comment]: # ({/1035fd30-b33b8329})

[comment]: # ({752b9468-eaab320d})
#### Visão geral

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

As leituras dos sensores estão localizadas no diretório `/sys/class/hwmon/hwmon*/` para dispositivos virtuais, ou no diretório `/sys/class/hwmon/hwmon*/device` para dispositivos não virtuais.
Um arquivo chamado `name`, localizado dentro dos diretórios `hwmon*` ou `hwmon*/device`, contém o nome do chip, que corresponde ao nome do driver do kernel usado pelo chip do sensor.

Há apenas um valor de leitura do sensor por arquivo.
O esquema comum para nomear os arquivos que contêm leituras de sensores dentro de qualquer um dos diretórios mencionados acima é: `<type><number>_<item>`, onde

-   **type** - para chips de sensor é "in" (tensão), "temp" (temperatura), "fan" (ventilador), etc.
-   **item** - "input" (valor medido), "max" (limite superior), "min" (limite inferior), etc.
-   **number** - sempre usado para elementos que podem estar presentes mais de uma vez (geralmente começa em 1, exceto para tensões que começam em 0).
Se os arquivos não se referem a um elemento específico, eles têm um nome simples sem número.

As informações sobre os sensores disponíveis no host podem ser adquiridas usando as ferramentas **sensors-detect** e **sensors** ([pacote lm-sensors](https://docs.kernel.org/hwmon/sysfs-interface.html)).
**Sensors-detect** ajuda a determinar quais módulos são necessários para os sensores disponíveis.
Quando os módulos são carregados, o programa **sensors** pode ser usado para mostrar as leituras de todos os chips de sensores.
A rotulagem das leituras dos sensores, usada por este programa, pode ser diferente do esquema de nomenclatura comum (`<type><number>_<item>`):

-   se houver um arquivo chamado `<type><number>_label`, então o rótulo dentro deste arquivo será usado em vez do nome `<type><number><item>`;
-   se não houver arquivo `<type><number>_label`, então o programa procura dentro do `/etc/sensors.conf` (pode ser também `/etc/sensors3.conf`, ou diferente) pela substituição do nome.

Essa rotulagem permite ao usuário determinar que tipo de hardware está sendo usado.
Se não houver arquivo `<type><number>_label` nem rótulo dentro do arquivo de configuração, o tipo de hardware pode ser determinado pelo atributo name (`hwmon*/device/name`).
Os nomes reais dos sensores, que o `zabbix_agent` aceita, podem ser obtidos executando o programa **sensors** com o parâmetro `-u` (`sensors -u`).

No programa **sensors**, os sensores disponíveis são separados pelo tipo de barramento (adaptador ISA, adaptador PCI, adaptador SPI, dispositivo virtual, interface ACPI, adaptador HID).

[comment]: # ({/752b9468-eaab320d})

[comment]: # ({397aa635-0cb28aa9})
#### Obtendo identificadores de sensores

Os rótulos dos sensores, conforme impressos pelo comando `sensors`, nem sempre podem ser usados diretamente porque a rotulagem varia entre os fornecedores de chips.
Por exemplo, a saída do `sensors` pode conter as seguintes linhas:

```bash
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)
```

Desses, apenas um nome de exibição corresponde diretamente a um identificador interno:

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

Tentar usar outros rótulos de exibição (como `Vcore` ou `+12V`) não funcionará:

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

Para encontrar o identificador interno do sensor que o Zabbix aceita, execute `sensors -u`.
Na saída, o seguinte pode ser observado:

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

Portanto, o rótulo `Vcore` corresponde ao identificador `in1` e `+12V` corresponde a `in4`.
De acordo com a [especificação](https://docs.kernel.org/hwmon/sysfs-interface.html) do kernel hwmon sysfs, essas são tensões nos pinos do chip e, de modo geral, podem precisar de escala.

```bash
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 leituras de corrente (`curr`), temperatura (`temp`) e velocidade do ventilador (`fan`) podem ser recuperadas pelo Zabbix.

[comment]: # ({/397aa635-0cb28aa9})

[comment]: # ({5b2a0096-8c111a00})
#### Compatibilidade

[comment]: # ({/5b2a0096-8c111a00})

[comment]: # ({f66e4878-61bf6279})
##### Distribuições legadas

As leituras dos sensores são obtidas do diretório `/proc/sys/dev/sensors`:

-   **device** - nome do dispositivo (se <mode> for usado, é uma expressão regular)
-   **sensor** - nome do sensor (se <mode> for usado, é uma expressão regular)
-   **mode** - valores possíveis: `avg`, `max`, `min` (se este parâmetro for omitido, device e sensor são tratados literalmente)

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

[comment]: # ({/f66e4878-61bf6279})

[comment]: # ({9e54fe4b-2e1edda6})
##### Distribuições atuais

As leituras dos sensores são obtidas do diretório `/sys/class/hwmon`:

-   **device** - nome do dispositivo (não é uma expressão regular).
O nome do dispositivo pode ser o nome real do dispositivo (por exemplo, `0000:00:18.3`) ou o nome adquirido usando o programa de sensores (por exemplo, `k8temp-pci-00c3`).
Cabe ao usuário escolher qual nome usar.
-   **sensor** - nome do sensor (não é uma expressão regular).
-   **mode** - valores possíveis: `avg`, `max`, `min` (se este parâmetro for omitido, o dispositivo e o sensor são tratados literalmente).

Exemplos de chaves:

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

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

[comment]: # ({/9e54fe4b-2e1edda6})
