14 Découverte des périphériques de bloc
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.getcomme élément maître - une règle de découverte de bas niveau dépendante
- des prototypes d'éléments dépendants
Configuration
Élément maître
Créez un élément d'agent Zabbix à l'aide de la clé suivante :
vfs.dev.get[device_stats,.*]

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 :
{
"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.
Règle LLD dépendante
Créez une règle de découverte de bas niveau de type Élément dépendant :

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 :

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 :
{#DEVNAME} - $.name

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

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

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:
$.config[?(@.name=='{#DEVNAME}')].size_bytes.first()

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