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
Clique no item Discovery rules
Clique no item Create discovery rules
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]
Após salvo será aberto a tela conforma a imagem abaixo. Clique em Item prototypes.
Clique no botão Create item prototype
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
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
Depois clique em Add prototype, selecione o item Used space on {#DIRPATH}.
Altere o Draw Style para Dashed Line e clique em Save
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"
- OSCE, OSED e eCXD: Certificações de desenvolvimento de Exploits - setembro 14, 2021
- Shellcoding – Encontrando endereço da função dinamicamente. Análise da biblioteca block_api - agosto 15, 2021
- OSWE – Uma história de insucessos! - dezembro 29, 2020
Ola, achei bem interessante seu post, mas nao consigo baixar o .exe parece estar corrompido, voce poderia em enviar por email?
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 .
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?
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é.
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!!