Descoberta de sistemas de arquivos montados

Visão geral

É possível descobrir sistemas de arquivos montados e suas propriedades:

  • nome do ponto de montagem
  • tipo de sistema de arquivos
  • tamanho do sistema de arquivos
  • estatísticas de inode
  • opções de montagem

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

  • o item de agent vfs.fs.get como item mestre
  • regra de descoberta de baixo nível dependente e protótipos de item

No modo full (padrão), as estatísticas do sistema de arquivos são retornadas somente se o usuário do Zabbix agent tiver permissão de travessia em todos os diretórios no caminho do ponto de montagem; caso contrário, o sistema de arquivos afetado será omitido da saída de vfs.fs.get. Para que esses sistemas de arquivos sejam descobertos e relatados como não suportados, em vez de serem ignorados silenciosamente, use a descoberta no modo short.

Configuração

Item mestre

Crie um item do Zabbix agent usando a seguinte key:

vfs.fs.get

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

Os dados retornados por este item conterão algo como o seguinte para um sistema de arquivos montado:

[
  {
    "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"
  }
]
Regra LLD dependente

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

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

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

Na aba Filters, você pode adicionar uma expressão regular que filtre apenas sistemas de arquivos read-write:

Protótipo de item dependente

Crie um protótipo de item com o tipo "Dependent item" nesta regra de LLD. Como item mestre para este protótipo, selecione o item vfs.fs.get que criamos.

Observe o uso de macros personalizadas no nome e na chave do protótipo de item:

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

Como tipo de informação, use:

  • Numeric (unsigned) para métricas como 'free', 'total', 'used'
  • Numeric (float) para métricas como 'pfree', 'pused' (percentage)

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

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

Quando a descoberta começar, um item por cada ponto de montagem será criado. Este item retornará o número de bytes livres para o ponto de montagem informado.

Descoberta no modo curto

Como alternativa a uma regra de descoberta dependente, você pode criar uma regra de descoberta do tipo Zabbix agent com a chave:

vfs.fs.get[short]

No modo short, o item retorna a lista de sistemas de arquivos montados sem as estatísticas de espaço em disco e de inodes, por exemplo:

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

Como o agent não consulta os próprios sistemas de arquivos, a descoberta não aciona a montagem automática e não sofre atrasos causados por sistemas de arquivos de rede que não respondem. Ela também pode ser executada com menos frequência do que a coleta de dados, por exemplo, uma vez por hora.

Na aba Macros de LLD, defina macros personalizadas com o JSONPath correspondente, por exemplo, {#FSNAME} - $.fsname e {#FSTYPE} - $.fstype.

Em seguida, crie um protótipo de item do tipo Zabbix agent que retorne as estatísticas de um sistema de arquivos descoberto:

  • Chave: vfs.fs.get[full,{#FSNAME}]
  • Tipo de informação: Texto
  • Pré-processamento: JSONPath $[0]

Use esse protótipo de item como o item mestre para protótipos de itens dependentes, por exemplo, com o JSONPath $.bytes.free para obter o número de bytes livres.

Se o agent não conseguir obter estatísticas de um sistema de arquivos descoberto (por exemplo, devido à falta de permissões), vfs.fs.get[full,{#FSNAME}] retornará uma matriz vazia, a etapa de pré-processamento $[0] falhará e o item ficará sem suporte. Dessa forma, o problema ficará visível, em vez de o sistema de arquivos ser ignorado silenciosamente. Observe que essa configuração executa uma verificação separada do agent para cada sistema de arquivos descoberto.

Essa abordagem é usada pelos templates de SO fornecidos com o Zabbix e requer o Zabbix agent 8.0 ou posterior.