Découverte des systèmes de fichiers montés

Vue d’ensemble

Il est possible de découvrir les systèmes de fichiers montés et leurs propriétés :

  • nom du point de montage
  • type de système de fichiers
  • taille du système de fichiers
  • statistiques des inodes
  • options de montage

Pour cela, vous pouvez utiliser une combinaison des éléments suivants :

  • l’élément agent vfs.fs.get comme élément maître
  • une règle de découverte de bas niveau dépendante et des prototypes d’éléments

En mode full (par défaut), les statistiques du système de fichiers sont renvoyées uniquement si l’utilisateur de l’agent Zabbix dispose de l’autorisation de traversée sur chaque répertoire du chemin du point de montage ; sinon, le système de fichiers concerné est omis de la sortie de vfs.fs.get. Pour que ces systèmes de fichiers soient découverts et signalés comme non pris en charge plutôt que simplement ignorés, utilisez la découverte en mode court.

Configuration

Élément maître

Créez un élément d'agent Zabbix en utilisant la clé suivante :

vfs.fs.get

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

Les données renvoyées par cet élément contiendront quelque chose comme ce qui suit pour un système de fichiers monté :

[
  {
    "fsname": "/",
    "fstype": "ext4",
    "bytes": {
      "total": 249405239296,
      "free": 24069537792,
      "used": 212595294208,
      "pfree": 10.170306,
      "pused": 89.829694
    },
    "inodes": {
      "total": 15532032,
      "free": 12656665,
      "used": 2875367,
      "pfree": 81.487503,
      "pused": 18.512497
    },
    "options": "rw,noatime,errors=remount-ro"
  }
]
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.fs.get que nous avons créé.

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

Dans l'onglet Filtres, vous pouvez ajouter une expression régulière qui filtre uniquement les systèmes de fichiers lecture-écriture :

Prototype d'élément dépendant

Créez un prototype d'élément de type "Dependent item" dans cette règle LLD. Comme élément maître pour ce prototype, sélectionnez l'élément vfs.fs.get que nous avons créé.

Notez l'utilisation de macros personnalisées dans le nom et la clé du prototype d'élément:

  • Name: Free disk space on {#FSNAME}, type: {#FSTYPE}
  • Key: Free[{#FSNAME}]

Comme type d'information, utilisez:

  • Numeric (unsigned) pour des métriques comme 'free', 'total', 'used'
  • Numeric (float) pour des métriques comme 'pfree', 'pused' (percentage)

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

$.[?(@.fsname=='{#FSNAME}')].bytes.free.first()

Lorsque la découverte démarre, un élément par point de montage sera créé. Cet élément renverra le nombre d'octets libres pour le point de montage donné.

Découverte en mode court

Comme alternative à une règle de découverte dépendante, vous pouvez créer une règle de découverte de type Zabbix agent avec la clé :

vfs.fs.get[short]

En mode short, l’élément renvoie la liste des systèmes de fichiers montés sans les statistiques d’espace disque et d’inodes, par exemple :

[
  {
    "fsname": "/",
    "fstype": "ext4",
    "options": "rw,noatime,errors=remount-ro"
  },
  {
    "fsname": "/home",
    "fstype": "xfs",
    "options": "rw,relatime,attr2,inode64,noquota"
  }
]

Comme l’agent n’interroge pas directement les systèmes de fichiers, la découverte ne déclenche pas leur montage automatique et n’est pas retardée par des systèmes de fichiers réseau qui ne répondent pas. Elle peut également être exécutée moins souvent que la collecte des données, par exemple une fois par heure.

Dans l’onglet Macros LLD, définissez des macros personnalisées avec le JSONPath correspondant, par exemple {#FSNAME} - $.fsname et {#FSTYPE} - $.fstype.

Créez ensuite un prototype d’élément de type Zabbix agent qui renvoie les statistiques d’un système de fichiers découvert :

  • Clé : vfs.fs.get[full,{#FSNAME}]
  • Type d’information : Texte
  • Prétraitement : JSONPath $[0]

Utilisez ce prototype d’élément comme élément maître pour des prototypes d’éléments dépendants, par exemple avec le JSONPath $.bytes.free pour obtenir le nombre d’octets libres.

Si l’agent ne peut pas obtenir les statistiques d’un système de fichiers découvert (par exemple, en raison de permissions insuffisantes), vfs.fs.get[full,{#FSNAME}] renvoie un tableau vide, l’étape de prétraitement $[0] échoue et l’élément devient non pris en charge. Le problème est ainsi visible au lieu que le système de fichiers soit ignoré silencieusement. Notez que cette configuration effectue une vérification distincte par l’agent pour chaque système de fichiers découvert.

Cette approche est utilisée par les modèles de système d’exploitation fournis avec Zabbix et nécessite Zabbix agent 8.0 ou version ultérieure.