14 Descubrimiento de dispositivos de bloque

Resumen

Es posible descubrir dispositivos de bloque y sus propiedades:

  • nombre y tipo del dispositivo de bloque
  • identificadores del dispositivo y propiedades como la ruta, el modelo, el número de serie, el WWN y los tamaños de bloque
  • información de particiones
  • estadísticas del dispositivo de bloque

Para ello, puede usar una combinación de:

  • el item vfs.dev.get como item maestro
  • una regla de descubrimiento de bajo nivel dependiente
  • prototipos de item dependientes

Configuración

Master item

Cree un item de Zabbix agent usando la siguiente clave:

vfs.dev.get[device_stats,.*]

Establezca el tipo de información en Text para datos JSON potencialmente grandes.

El historial puede deshabilitarse para este item, ya que se usa solo como master item. Se puede configurar un intervalo de actualización relativamente corto, por ejemplo 1m, para consultar los datos con frecuencia.

Los datos devueltos por este item contendrán algo como lo siguiente para un dispositivo de bloque:

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

El array config contiene el inventario y los metadatos del dispositivo de bloque, que normalmente cambian con poca frecuencia. El array values contiene las estadísticas del dispositivo de bloque, que se actualizan en cada consulta.

Regla LLD dependiente

Cree una regla de descubrimiento de bajo nivel como tipo Dependent item:

Como master item seleccione el item vfs.dev.get que creamos.

En la pestaña Preprocessing añada un paso JSONPath con el parámetro $.config. Para evitar ejecuciones innecesarias de LLD, añada un paso Discard unchanged with heartbeat con un heartbeat suficientemente grande, por ejemplo 1h. Esto permite que el master item se consulte con frecuencia mientras que el descubrimiento de bajo nivel solo se ejecuta cuando cambia config o cuando expira el período de heartbeat:

En la pestaña LLD macros defina macros personalizadas con el JSONPath correspondiente.

Por ejemplo, al usar vfs.dev.get[device_stats,.*], se pueden utilizar las siguientes expresiones JSONPath:

{#DEVNAME} - $.name

En la pestaña Filters puede añadir una expresión regular que filtre solo los dispositivos de disco.

Prototipo de item dependiente

Cree un prototipo de item con el tipo Item dependiente en esta regla LLD. Como item maestro para estos prototipos, seleccione el item vfs.dev.get que creamos.

Observe el uso de macros personalizadas en el nombre y la clave del prototipo de item. La clave en este ejemplo es personalizada y definida por el usuario.

  • Nombre: Tamaño del dispositivo de bloque {#DEVNAME}
  • Clave: dev.block.size[{#DEVNAME}]

Como tipo de información, use Numérico (sin signo).

En la pestaña Preprocesamiento del prototipo de item, seleccione JSONPath y use la siguiente expresión JSONPath como parámetro:

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

Se pueden crear prototipos de item adicionales de la misma manera, por ejemplo:

  • Nombre: Bytes leídos en {#DEVNAME}
  • Clave: dev.block.read_bytes[{#DEVNAME}]
  • Preprocesamiento: JSONPath $.values[?(@.name=='{#DEVNAME}')].stats.bytes_read.first()
  • Nombre: Tiempo de E/S en {#DEVNAME}
  • Clave: dev.block.io_time_ms[{#DEVNAME}]
  • Preprocesamiento: JSONPath $.values[?(@.name=='{#DEVNAME}')].stats.io_time_ms.first()

Cuando comience el descubrimiento, se creará un item por cada dispositivo de bloque.