[comment]: # ({329cfecd-e49a61f3})
# 14 Descoberta de dispositivos de bloco

[comment]: # ({/329cfecd-e49a61f3})

[comment]: # ({b3342fcd-fe14cbff})
#### Visão geral

É possível descobrir dispositivos de bloco e suas propriedades:

-   nome e tipo do dispositivo de bloco
-   identificadores do dispositivo e propriedades como caminho, modelo, número de série, WWN e tamanhos de bloco
-   informações de partição
-   estatísticas do dispositivo de bloco

Para isso, você pode usar uma combinação de:

-   o item [`vfs.dev.get`](/manual/config/items/itemtypes/zabbix_agent#vfs.dev.get) como item mestre
-   uma regra de descoberta de baixo nível dependente
-   protótipos de item dependentes

[comment]: # ({/b3342fcd-fe14cbff})

[comment]: # ({5d32b87c-5d32b87c})
#### Configuração

[comment]: # ({/5d32b87c-5d32b87c})

[comment]: # ({ccd1bc1c-194f3d7a})
##### Item mestre

Crie um item do Zabbix agent usando a seguinte key:

```default
vfs.dev.get[device_stats,.*]
```

![](../../../../../assets/en/manual/discovery/low_level_discovery/dev_get_item.png){width="600"}

Defina o tipo de informação como *Text* para possíveis dados JSON grandes.

O histórico pode ser desativado para este item, pois ele é usado apenas como um item mestre.
Um intervalo de atualização relativamente curto, por exemplo `1m`, pode ser configurado para consultar os dados com frequência.

Os dados retornados por este item conterão algo semelhante ao seguinte para um dispositivo de bloco:

```java
{
  "config": [
    {
      "name": "sda",
      "devid": "ata-ST1000LM024_HN-M101MBB_S2R8NX0J123456",
      "type": "disk",
      "size_bytes": 1000204886016
    },
    {
      "name": "sda1",
      "devid": "ata-ST1000LM024_HN-M101MBB_S2R8NX0J123456-part1",
      "type": "partition",
      "size_bytes": 536870912
    }
  ],
  "values": [
    {
      "name": "sda",
      "stats": {
        "reads_completed": 1284,
        "writes_completed": 312,
        "bytes_read": 104857600,
        "bytes_written": 16777216,
        "io_time_ms": 204
      }
    },
    {
      "name": "sda1",
      "stats": {
        "reads_completed": 12,
        "writes_completed": 3,
        "bytes_read": 1048576,
        "bytes_written": 262144,
        "io_time_ms": 8
      }
    }
  ]
}
```

O array `config` contém o inventário e os metadados do dispositivo de bloco, que normalmente mudam com pouca frequência.
O array `values` contém as estatísticas do dispositivo de bloco, que são atualizadas a cada consulta.

[comment]: # ({/ccd1bc1c-194f3d7a})

[comment]: # ({bbca4e44-85b6a3b1})
##### Regra LLD dependente

Crie uma regra de descoberta em baixo nível do tipo *Dependent item*:

![](../../../../../assets/en/manual/discovery/low_level_discovery/dev_get_lld.png){width="600"}

Como item mestre, selecione o item `vfs.dev.get` que criamos.

Na aba *Preprocessing*, adicione um passo *JSONPath* com o parâmetro `$.config`.
Para evitar execuções desnecessárias da LLD, adicione um passo *Discard unchanged with heartbeat* com um heartbeat razoavelmente grande, por exemplo `1h`.
Isso permite que o item mestre seja consultado com frequência, enquanto a descoberta em baixo nível é executada somente quando `config` é alterado ou quando o período de heartbeat expira:

![](../../../../../assets/en/manual/discovery/low_level_discovery/dev_get_lld_b.png){width="600"}

Na aba *LLD macros*, defina macros personalizadas com o JSONPath correspondente.

Por exemplo, ao usar `vfs.dev.get[device_stats,.*]`, as seguintes expressões JSONPath podem ser usadas:

```default
{#DEVNAME} - $.name
```

![](../../../../../assets/en/manual/discovery/low_level_discovery/dev_get_lld_c.png){width="600"}

Na aba *Filters*, você pode adicionar uma expressão regular que filtre apenas dispositivos de disco.

![](../../../../../assets/en/manual/discovery/low_level_discovery/dev_get_lld_d.png){width="600"}

[comment]: # ({/bbca4e44-85b6a3b1})

[comment]: # ({17b1184e-481f2c83})
##### Protótipo de item dependente

Crie um protótipo de item com o tipo *Dependent item* nesta regra de LLD.
Como item mestre para esses protótipos, selecione o item `vfs.dev.get` que criamos.

![](../../../../../assets/en/manual/discovery/low_level_discovery/dev_get_prototype.png){width="600"}

Observe o uso de macros personalizadas no nome e na chave do protótipo de item.
A chave neste exemplo é personalizada e definida pelo usuário.

-   Name: Tamanho do dispositivo de bloco `{#DEVNAME}`
-   Key: `dev.block.size[{#DEVNAME}]`

Como tipo de informação, use *Numeric (unsigned)*.

Na aba *Preprocessing* do protótipo de item, selecione *JSONPath* e use a seguinte expressão JSONPath como parâmetro:

```default
$.config[?(@.name=='{#DEVNAME}')].size_bytes.first()
```

![](../../../../../assets/en/manual/discovery/low_level_discovery/dev_get_prototype_b.png){width="600"}

Protótipos de item adicionais podem ser criados da mesma forma, por exemplo:

-   Name: Bytes lidos em `{#DEVNAME}`
-   Key: `dev.block.read_bytes[{#DEVNAME}]`
-   Preprocessing: *JSONPath* `$.values[?(@.name=='{#DEVNAME}')].stats.bytes_read.first()`
-   Name: Tempo de I/O em `{#DEVNAME}`
-   Key: `dev.block.io_time_ms[{#DEVNAME}]`
-   Preprocessing: *JSONPath* `$.values[?(@.name=='{#DEVNAME}')].stats.io_time_ms.first()`

Quando a descoberta for iniciada, um item por cada dispositivo de bloco será criado.

[comment]: # ({/17b1184e-481f2c83})
