Erkennung eingehängter Dateisysteme

Übersicht

Es ist möglich, eingehängte Dateisysteme und ihre Eigenschaften zu ermitteln:

  • Name des Einhängepunkts
  • Dateisystemtyp
  • Größe des Dateisystems
  • Inode-Statistiken
  • Einhängeoptionen

Dazu können Sie eine Kombination aus folgenden Elementen verwenden:

  • dem Agent-Datenpunkt vfs.fs.get als Master-Datenpunkt
  • einer abhängigen Low-Level-Discovery-Regel und Datenpunkt-Prototypen

Im Modus full (Standard) werden die Dateisystemstatistiken nur zurückgegeben, wenn der Benutzer des Zabbix Agent über die Berechtigung verfügt, jedes Verzeichnis im Pfad des Einhängepunkts zu durchqueren. Andernfalls wird das betroffene Dateisystem in der Ausgabe von vfs.fs.get ausgelassen. Damit solche Dateisysteme ermittelt und als nicht unterstützt gemeldet werden, anstatt stillschweigend übersprungen zu werden, verwenden Sie die Ermittlung im Kurzmodus.

Konfiguration

Master item

Erstellen Sie einen Zabbix-Agent-Datenpunkt mit dem folgenden Schlüssel:

vfs.fs.get

Setzen Sie den Informationstyp auf "Text" für möglicherweise große JSON-Daten.

Die von diesem Datenpunkt zurückgegebenen Daten enthalten für ein eingehängtes Dateisystem etwa Folgendes:

[
  {
    "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"
  }
]
Abhängige LLD-Regel

Erstellen Sie eine Low-Level-Discovery-Regel als Typ Abhängiger Datenpunkt:

Wählen Sie als Master-Datenpunkt den von uns erstellten vfs.fs.get-Datenpunkt aus.

Definieren Sie auf der Registerkarte LLD-Makros benutzerdefinierte Makros mit dem entsprechenden JSONPath:

Auf der Registerkarte Filter können Sie einen regulären Ausdruck hinzufügen, der nur read-write-Dateisysteme filtert:

Abhängigkeits-Datenpunkt-Prototyp

Erstellen Sie in dieser LLD-Regel einen Datenpunkt-Prototyp mit dem Typ "Dependent item". Wählen Sie als Master-Datenpunkt für diesen Prototyp den vfs.fs.get-Datenpunkt aus, den wir erstellt haben.

Beachten Sie die Verwendung benutzerdefinierter Makros im Namen und Schlüssel des Datenpunkt-Prototyps:

  • Name: Freier Speicherplatz auf {#FSNAME}, Typ: {#FSTYPE}
  • Key: Free[{#FSNAME}]

Verwenden Sie als Informationstyp:

  • Numeric (unsigned) für Metriken wie 'free', 'total', 'used'
  • Numeric (float) für Metriken wie 'pfree', 'pused' (Prozent)

Wählen Sie im Tab Preprocessing des Datenpunkt-Prototyps JSONPath aus und verwenden Sie den folgenden JSONPath-Ausdruck als Parameter:

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

Wenn die Erkennung startet, wird für jeden Mountpoint ein Datenpunkt erstellt. Dieser Datenpunkt gibt die Anzahl der freien Bytes für den jeweiligen Mountpoint zurück.

Discovery im Kurzmodus

Als Alternative zu einer abhängigen Discovery-Regel können Sie eine Discovery-Regel vom Typ Zabbix agent mit folgendem Schlüssel erstellen:

vfs.fs.get[short]

Im Modus short gibt der Datenpunkt die Liste der eingehängten Dateisysteme ohne Statistiken zum Speicherplatz und zu Inodes zurück, zum Beispiel:

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

Da der Agent die Dateisysteme nicht selbst abfragt, löst die Discovery kein Automounting aus und wird nicht durch nicht reagierende Netzwerkdateisysteme verzögert.
Sie kann außerdem seltener als die Datensammlung ausgeführt werden, zum Beispiel einmal pro Stunde.

Definieren Sie auf der Registerkarte LLD macros benutzerdefinierte Makros mit dem entsprechenden JSONPath, zum Beispiel {#FSNAME} - $.fsname und {#FSTYPE} - $.fstype.

Erstellen Sie anschließend einen Prototyp eines Datenpunkts vom Typ Zabbix agent, der die Statistiken eines erkannten Dateisystems zurückgibt:

  • Key: vfs.fs.get[full,{#FSNAME}]
  • Type of information: Text
  • Preprocessing: JSONPath $[0]

Verwenden Sie diesen Datenpunktprototyp als Master-Datenpunkt für abhängige Datenpunktprototypen, zum Beispiel mit dem JSONPath $.bytes.free, um die Anzahl der freien Bytes abzurufen.

Wenn der Agent keine Statistiken für ein erkanntes Dateisystem abrufen kann, beispielsweise aufgrund fehlender Berechtigungen, gibt vfs.fs.get[full,{#FSNAME}] ein leeres Array zurück, der Vorverarbeitungsschritt $[0] schlägt fehl und der Datenpunkt wird nicht unterstützt. Dadurch wird das Problem sichtbar, anstatt dass das Dateisystem stillschweigend übersprungen wird.
Beachten Sie, dass diese Konfiguration für jedes erkannte Dateisystem eine separate Agent-Prüfung ausführt.

Dieser Ansatz wird von den mit Zabbix ausgelieferten Vorlagen für Betriebssysteme verwendet und erfordert Zabbix agent 8.0 oder höher.