14 Erkennung von Blockgeräten

Übersicht

Es ist möglich, Blockgeräte und ihre Eigenschaften zu erkennen:

  • Name und Typ des Blockgeräts
  • Gerätekennungen und Eigenschaften wie Pfad, Modell, Seriennummer, WWN und Blockgrößen
  • Partitionsinformationen
  • Statistiken des Blockgeräts

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

  • den Datenpunkt vfs.dev.get als Master-Datenpunkt
  • eine abhängige Low-Level-Discovery-Regel
  • abhängige Datenpunkt-Prototypen

Konfiguration

Master item

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

vfs.dev.get[device_stats,.*]

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

Der Verlauf kann für diesen Datenpunkt deaktiviert werden, da er nur als Master item verwendet wird. Ein relativ kurzes Aktualisierungsintervall, zum Beispiel 1m, kann konfiguriert werden, um die Daten häufig abzufragen.

Die von diesem Datenpunkt zurückgegebenen Daten enthalten für ein Blockgerät etwa Folgendes:

{
  "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
      }
    }
  ]
}

Das Array config enthält das Inventar und die Metadaten des Blockgeräts, die sich in der Regel nur selten ändern. Das Array values enthält die Statistiken des Blockgeräts, die bei jeder Abfrage aktualisiert werden.

Abhängige LLD-Regel

Erstellen Sie eine Low-Level-Discovery-Regel als Typ Abhängiges Element:

Wählen Sie als Master-Element das von uns erstellte Element vfs.dev.get aus.

Fügen Sie auf der Registerkarte Preprocessing einen Schritt JSONPath mit dem Parameter $.config hinzu. Um unnötige LLD-Ausführungen zu vermeiden, fügen Sie einen Schritt Unveränderte verwerfen mit Heartbeat mit einem ausreichend großen Heartbeat hinzu, zum Beispiel 1h. Dadurch kann das Master-Element häufig abgefragt werden, während die Low-Level-Discovery nur ausgeführt wird, wenn sich config ändert oder wenn der Heartbeat-Zeitraum abläuft:

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

Wenn Sie beispielsweise vfs.dev.get[device_stats,.*] verwenden, können die folgenden JSONPath-Ausdrücke verwendet werden:

{#DEVNAME} - $.name

Auf der Registerkarte Filter können Sie einen regulären Ausdruck hinzufügen, der nur Festplattengeräte filtert.

Abhängigkeits-Datenpunktprototyp

Erstellen Sie in dieser LLD-Regel einen Datenpunktprototyp vom Typ Abhängigkeits-Datenpunkt. Wählen Sie als Master-Datenpunkt für diese Prototypen den von uns erstellten Datenpunkt vfs.dev.get.

Beachten Sie die Verwendung benutzerdefinierter Makros im Namen und Schlüssel des Datenpunktprototyps. Die Schlüssel in diesem Beispiel sind benutzerdefiniert und vom Benutzer definiert.

  • Name: Größe des Blockgeräts {#DEVNAME}
  • Schlüssel: dev.block.size[{#DEVNAME}]

Verwenden Sie als Informationstyp Numerisch (ohne Vorzeichen).

Wählen Sie auf der Registerkarte Vorverarbeitung des Datenpunktprototyps JSONPath aus und verwenden Sie den folgenden JSONPath-Ausdruck als Parameter:

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

Zusätzliche Datenpunktprototypen können auf die gleiche Weise erstellt werden, zum Beispiel:

  • Name: Gelesene Bytes auf {#DEVNAME}
  • Schlüssel: dev.block.read_bytes[{#DEVNAME}]
  • Vorverarbeitung: JSONPath $.values[?(@.name=='{#DEVNAME}')].stats.bytes_read.first()
  • Name: I/O-Zeit auf {#DEVNAME}
  • Schlüssel: dev.block.io_time_ms[{#DEVNAME}]
  • Vorverarbeitung: JSONPath $.values[?(@.name=='{#DEVNAME}')].stats.io_time_ms.first()

Wenn die Erkennung startet, wird für jedes Blockgerät ein Datenpunkt erstellt.