[comment]: # ({329cfecd-e49a61f3})
# 14 Découverte des périphériques de bloc

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

[comment]: # ({b3342fcd-fe14cbff})
#### Vue d'ensemble

Il est possible de découvrir les périphériques de bloc et leurs propriétés :

-   nom et type du périphérique de bloc
-   identifiants du périphérique et propriétés telles que le chemin, le modèle, le numéro de série, le WWN et les tailles de bloc
-   informations sur les partitions
-   statistiques du périphérique de bloc

Pour ce faire, vous pouvez utiliser une combinaison de :

-   l'élément [`vfs.dev.get`](/manual/config/items/itemtypes/zabbix_agent#vfs.dev.get) comme élément maître
-   une règle de découverte de bas niveau dépendante
-   des prototypes d'éléments dépendants

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

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

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

[comment]: # ({ccd1bc1c-194f3d7a})
##### Élément maître

Créez un élément d'agent Zabbix à l'aide de la clé suivante :

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

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

Définissez le type d'information sur *Texte* pour d'éventuelles données JSON volumineuses.

L'historique peut être désactivé pour cet élément, car il est utilisé uniquement comme élément maître.
Un intervalle de mise à jour relativement court, par exemple `1m`, peut être configuré afin d'interroger les données fréquemment.

Les données renvoyées par cet élément contiendront quelque chose de similaire à ce qui suit pour un périphérique de bloc :

```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
      }
    }
  ]
}
```

Le tableau `config` contient l'inventaire et les métadonnées du périphérique de bloc, qui changent généralement peu fréquemment.
Le tableau `values` contient les statistiques du périphérique de bloc, qui sont mises à jour à chaque interrogation.

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

[comment]: # ({bbca4e44-85b6a3b1})
##### Règle LLD dépendante

Créez une règle de découverte de bas niveau de type *Élément dépendant* :

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

Comme élément maître, sélectionnez l'élément `vfs.dev.get` que nous avons créé.

Dans l'onglet *Prétraitement*, ajoutez une étape *JSONPath* avec le paramètre `$.config`.
Pour éviter une exécution LLD inutile, ajoutez une étape *Ignorer les valeurs inchangées avec heartbeat* avec un heartbeat suffisamment long, par exemple `1h`.
Cela permet d'interroger fréquemment l'élément maître, tandis que la découverte de bas niveau n'est exécutée que lorsque `config` change ou lorsque la période de heartbeat expire :

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

Dans l'onglet *Macros LLD*, définissez des macros personnalisées avec le JSONPath correspondant.

Par exemple, lors de l'utilisation de `vfs.dev.get[device_stats,.*]`, les expressions JSONPath suivantes peuvent être utilisées :

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

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

Dans l'onglet *Filtres*, vous pouvez ajouter une expression régulière qui ne filtre que les périphériques de disque.

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

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

[comment]: # ({17b1184e-481f2c83})
##### Prototype d'élément dépendant

Créez un prototype d'élément de type *Élément dépendant* dans cette règle de découverte à bas niveau.
Comme élément maître pour ces prototypes, sélectionnez l'élément `vfs.dev.get` que nous avons créé.

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

Notez l'utilisation de macros personnalisées dans le nom et la clé du prototype d'élément.
La clé dans cet exemple est personnalisée et définie par l'utilisateur.

-   Nom: Taille du périphérique de bloc `{#DEVNAME}`
-   Clé: `dev.block.size[{#DEVNAME}]`

Comme type d'information, utilisez *Numérique (non signé)*.

Dans l'onglet *Prétraitement* du prototype d'élément, sélectionnez *JSONPath* et utilisez l'expression JSONPath suivante comme paramètre:

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

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

Des prototypes d'éléments supplémentaires peuvent être créés de la même manière, par exemple:

-   Nom: Octets lus sur `{#DEVNAME}`
-   Clé: `dev.block.read_bytes[{#DEVNAME}]`
-   Prétraitement: *JSONPath* `$.values[?(@.name=='{#DEVNAME}')].stats.bytes_read.first()`
-   Nom: Temps d'E/S sur `{#DEVNAME}`
-   Clé: `dev.block.io_time_ms[{#DEVNAME}]`
-   Prétraitement: *JSONPath* `$.values[?(@.name=='{#DEVNAME}')].stats.io_time_ms.first()`

Lorsque la découverte démarre, un élément par périphérique de bloc sera créé.

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