14 Descoberta de dispositivos de bloco

Visão geral

É possível descobrir dispositivos de bloco e suas propriedades:

  • nome e tipo do dispositivo de bloco
  • identificadores do dispositivo e propriedades como caminho, modelo, número de série, WWN e tamanhos de bloco
  • informações de partição
  • estatísticas do dispositivo de bloco

Para isso, você pode usar uma combinação de:

  • o item vfs.dev.get como item mestre
  • uma regra de descoberta de baixo nível dependente
  • protótipos de item dependentes

Configuração

Item mestre

Crie um item do Zabbix agent usando a seguinte key:

vfs.dev.get[device_stats,.*]

Defina o tipo de informação como Text para possíveis dados JSON grandes.

O histórico pode ser desativado para este item, pois ele é usado apenas como um item mestre. Um intervalo de atualização relativamente curto, por exemplo 1m, pode ser configurado para consultar os dados com frequência.

Os dados retornados por este item conterão algo semelhante ao seguinte para um dispositivo de bloco:

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

O array config contém o inventário e os metadados do dispositivo de bloco, que normalmente mudam com pouca frequência. O array values contém as estatísticas do dispositivo de bloco, que são atualizadas a cada consulta.

Regra LLD dependente

Crie uma regra de descoberta em baixo nível do tipo Dependent item:

Como item mestre, selecione o item vfs.dev.get que criamos.

Na aba Preprocessing, adicione um passo JSONPath com o parâmetro $.config. Para evitar execuções desnecessárias da LLD, adicione um passo Discard unchanged with heartbeat com um heartbeat razoavelmente grande, por exemplo 1h. Isso permite que o item mestre seja consultado com frequência, enquanto a descoberta em baixo nível é executada somente quando config é alterado ou quando o período de heartbeat expira:

Na aba LLD macros, defina macros personalizadas com o JSONPath correspondente.

Por exemplo, ao usar vfs.dev.get[device_stats,.*], as seguintes expressões JSONPath podem ser usadas:

{#DEVNAME} - $.name

Na aba Filters, você pode adicionar uma expressão regular que filtre apenas dispositivos de disco.

Protótipo de item dependente

Crie um protótipo de item com o tipo Dependent item nesta regra de LLD. Como item mestre para esses protótipos, selecione o item vfs.dev.get que criamos.

Observe o uso de macros personalizadas no nome e na chave do protótipo de item. A chave neste exemplo é personalizada e definida pelo usuário.

  • Name: Tamanho do dispositivo de bloco {#DEVNAME}
  • Key: dev.block.size[{#DEVNAME}]

Como tipo de informação, use Numeric (unsigned).

Na aba Preprocessing do protótipo de item, selecione JSONPath e use a seguinte expressão JSONPath como parâmetro:

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

Protótipos de item adicionais podem ser criados da mesma forma, por exemplo:

  • Name: Bytes lidos em {#DEVNAME}
  • Key: dev.block.read_bytes[{#DEVNAME}]
  • Preprocessing: JSONPath $.values[?(@.name=='{#DEVNAME}')].stats.bytes_read.first()
  • Name: Tempo de I/O em {#DEVNAME}
  • Key: dev.block.io_time_ms[{#DEVNAME}]
  • Preprocessing: JSONPath $.values[?(@.name=='{#DEVNAME}')].stats.io_time_ms.first()

Quando a descoberta for iniciada, um item por cada dispositivo de bloco será criado.