Monitorando tamanho de diretórios com Zabbix

Este post mostra como listar todos os subdiretórios dentro de um diretório e monitorar o tamanho destes.

Para isso será necessário a utilização de um aplicativo (escrito por mim) que tem 2 funções: 1 – Listar todos os subdiretórios dentro de um diretório; 2 – Calcular o espaço em disco utilizado por estes diretórios. Este aplicativo chama-se ZabbixDirSize.exe e está disponível aqui (ZabbixDirSize), inclusive com código fonte.

Configurando o agente

Edite o arquivo de configuração do agente e adicione as linhas abaixo:

UnsafeUserParameters=1
UserParameter=ds.subdirs[*],C:\Zabbix\ZabbixDirSize.exe --sub-dirs "$1" "$2" "$3" "$4" "$5"
UserParameter=ds.subdirs.size[*],C:\Zabbix\ZabbixDirSize.exe --size "$1"

Nas linhas acima criamos 2 chaves ds.subdirs e ds.subdirs.size, a primeira lista todos os diretórios dentro de um diretório específico e a segunda retorna o tamanho utilizado por um diretório.

A chave ds.subdirs está passando até 5 diretórios (pai) para o executável. Caso deseje mais diretórios basta incluir as variaveis no final da linha ($6, $7, etc…)

Edite o caminho do executável ZabbixDirSize.exe conforme o seu ambiente. Para que este executável funcione corretamente é necessário estar instalado na maquina o .NET 2.0 ou superior.

Criando o Host no Zabbix, configuração a localização automática de subdiretórios dentro de um diretório específico e criando os itens de captura e gráficos.

Crie o host dentro do Zabbix

Inserindo Host

Clique no item Discovery rules

002

Clique no item Create discovery rules

003

Configure a regra de descoberta conforme a imagem abaixo, inserindo a chave ds.subdirs[] colocando entre colchetes o nome do diretório em que deseja listar todos os subdiretórios. Clique no botão Save.

Neste parâmetro pode ser passado mais de um diretório pai, bastando dentro dos colchetes colocar os diretórios separados por virgula, ficando desta forma: ds.subdirs[d:\dir1,c:\Dir3,d:\dir3]

004

Após salvo será aberto a tela conforma a imagem abaixo. Clique em Item prototypes.

005

Clique no botão Create item prototype

006

Configure o item conforme tela abaixo, observando os seguintes items, depois clique em Save

  • Name: Used space on $1
  • Type: Zabbix agent
  • Key: ds.subdirs.size[{#DIRPATH}]
  • Type information: Numeric (unsigned)
  • Data Type: Decimal
  • Units: B
  • Update interval: 21600
  • New application: Directory

007

Depois clique em Graph prototype e clique em Create graph prototype. Configure conforme os itens abaixo

  • Name: Used space on {#DIRPATH}
  • Width: 600
  • Height: 340

009

Depois clique em Add prototype, selecione o item Used space on {#DIRPATH}.

010

Altere o Draw Style para Dashed Line e clique em Save

011

Solução de problemas

Recentemente tivemos alguns reportes de erro no processo de busca e contagem do tamanho, sendo sim fiz algumas alterações na aplicação para melhorar a estratégia de busca bem como de identificação de erros.

Caso encontre algum erro na aplicação basta executa-la conforme o comando abaixo, deste modo será gerado um arquivo de log no mesmo local do executável, conendo o log de processamento e possíveis mensagens de erro.

C:\Zabbix\ZabbixDirSize.exe --sub-dirs --debug c:\diretorio_desejado
C:\Zabbix\ZabbixDirSize.exe --size --debug c:\diretorio_desejado

Timeout em diretórios grandes

Recebi um feedback bem legal de algumas pessoas que estão usando o aplicativo, de timeout em diretórios grandes. Como solução para este problema implementei uma execução em background onde o aplicativo faz um fork e fica executando até que faça a leitura de todo o diretório para calcular o tamanho. Por segurança o aplicativo controla os seus objetos filhos para evitar que se abra mais de um fork para o mesmo diretório. Após este objeto filho finalizar a leitura do diretório, ele armazena o tamanho em um arquivo texto, para que o aplicativo pai possa realizar a leitura deste valor para o Zabbix.

Para habilitar essa função basta adicionar o parâmetro –bg na linha de comando do aplicativo conforme exemplo abaixo. Esta opção só é válida juntamente com a opção –size.

UserParameter=ds.subdirs.size[*],C:\Zabbix\ZabbixDirSize.exe --size --bg "$1"
Helvio Junior

Helvio Junior

Gerente de Infraestrutura de TI e Telecomunicações em Fael, uma empresa do grupo Apollo Global
Especialista em redes e segurança de sistemas pela PUC-PR, consultor de redes e segurança da informação. CEO e CTO da SafeTrend, com um produto de single sign-on e gestão de identidades e acessos. Especialista em Segurança da Informação, Controle de Acesso, ambientes e ferramentas de segurança, telefonia VoIP com Asterisk, administração de redes em ambientes híbridos e realização de penetration test (pentest).
Helvio Junior

Últimos posts por Helvio Junior (exibir todos)

5 respostas
  1. helvio
    helvio says:

    Ola, te enviei por e-mail, mas testei o executável e ele está funcionando perfeitamente, lembre-se que precisa ter o .NET Framework instalado .

    Responder
  2. David
    David says:

    Olá, implementei esse controle de consumo de espaço por diretórios e ele está funcionando sem problemas em todos os diretórios, exceto em um específico que contem 60GB de espaço usado. Será que é por que o diretório consome uma alta quantidade de espaço e por isso não está ocorrendo coleta dos dados?

    Responder
  3. André Luiz
    André Luiz says:

    Helvio boa tarde,

    Muito bom seu post, gostaria de implementar o seu procedimento para listar extensões de arquivos e o seu tamanho sabe se é possível ?

    Att.

    André.

    Responder
  4. Fabio Rodrigues
    Fabio Rodrigues says:

    Gostei demais dos seus artigos, sobre esse de monitorar diretórios, tentei implantar no meu ambiente, tenho um fileserver e do nada está crescendo absurdamente, fiz um teste no meu pc monitorando o diretório de instalação do agente zabbix, vejo somente 5 diretório, criei outros e não apareceu nos meus gráficos, alterei a ds.subdirs[*] e coloquei 20 variáveis, mesmo assim não me trouxe os novos diretórios e nem o tamanho destes, reiniciei o agente, executo os comandos no terminal windows e me retorna corretamente o resultado, mas no server zabbix, não.

    O que posso estar fazendo errado??

    Seria possível buscar os atributos de cada arquivo criado e trazer quem o criou ou alterou?? Assim eu saberia ate qual usuário esta exagerando no uso do fileserver…

    Agradeço imensamente, seus artigos me ajudam muito!!

    Responder

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *