Monitorando espaço em disco no Zabbix através do SNMP
Autor: RAFAEL OLIVEIRA | Publicado: 2010-05-27T15:59:00-03:00

Em outro artigo postado anteriormente, tratei acerca do monitoramento de serviços no Zabbix fazendo uso do protocolo SNMP. Continuando a série, vou tratar agora da verificação dos discos (partições) utilizando o mesmo protocolo.&nbsp;Vocês podem ser perguntar porque não utilizo o agente para tais tarefas. Afinal, tudo seria mais fácil. Bem, a resposta para a questão é o fato de no passado ter enfrentado problemas de performance em alguns servidores em razão do mal comportamento do agente da ferramenta que consumia muita CPU, em alguns casos, chegando a 100%.Como a MIB possui todos os dados que necessito para monitorar os servidores, apesar de dar um pouco mais de trabalho, os recursos consumidos pelo agente SNMP em um computador é mínimo e não prejudica sua performance.Bem, chega de história e vamos ao que interessa. Como fiz no meu outro artigo,&nbsp;Monitorando serviços no Zabbix através do SNMP, criei um shell script que consulta a MIB do sistema operacional, pois o índice da partição pode variar de um computador para outro.Assim, crie um arquivo no diretório o qual estão armazenado os scripts externos do Zabbix (parâmetro ExternalScripts do arquivo de configuração zabbix_server.conf), no exemplo colocarei discolivre.sh, com o conteúdo abaixo.


#!/bin/bash# Criado por Rafael Oliveira# Parametro 1 - Endereco do host# Parametro 2 - Letra que indica a particao# Parametro 3 - Sistema operacional# Inicializa as variaveisdeclare TOTAL=0declare USADO=0# Comunidade SNMPCOMUNIDADE=monitora# Obtem o ID do disco na tabela SNMP contida na MIBif [ "$3" == "linux" ]; thenID=`/usr/bin/snmpwalk -v 2c -c $COMUNIDADE $1 HOST-RESOURCES-MIB::hrStorageDescr | grep "STRING: $2$" | cut -d : -f 3 | cut -d " " -f 1 | cut -d . -f 2`elseID=`/usr/bin/snmpwalk -v 2c -c $COMUNIDADE $1 HOST-RESOURCES-MIB::hrStorageDescr | grep "STRING: $2" | cut -d : -f 3 | cut -d " " -f 1 | cut -d . -f 2`fi# Com o ID, realiza a consulta para obter o valor desejado. Primeiro o tamanho, em seguida, o usado.TOTAL=`/usr/bin/snmpget -v 2c -c $COMUNIDADE $1 HOST-RESOURCES-MIB::hrStorageSize.$ID | cut -d : -f 4 | cut -d " " -f 2`USADO=`/usr/bin/snmpget -v 2c -c $COMUNIDADE $1 HOST-RESOURCES-MIB::hrStorageUsed.$ID | cut -d : -f 4 | cut -d " " -f 2`expr $TOTAL - $USADO
Após salvar o arquivo, lembre-se de conceder permissão de execução e alterar o dono para o usuário zabbix.
# chmod a+x discolivre.sh# chown zabbix.zabbix discolivre.sh
Depois, no template ou host criados no Zabbix, crie um item conforme a imagem abaixo.

Em relação a figura acima, algumas observações precisam ser feitas.&nbsp;Na opção Key, os parâmetros do script precisam ser alterados de acordo com o nome da partição e o sistema operacional. Por exemplo, caso deseja-se verificar o volume /home&nbsp;de um servidor com o sistema operacional Linux, ela ficaria da seguinte forma:&nbsp;discolivre.sh[/home linux].O parâmetro Custom Multiplier pode variar, pois o valor contido na MIB SNMP para o disco não é em bytes e sim em unidades de alocação. Desta forma, antes de defini-lo, é necessário verificar nela o item&nbsp;HOST-RESOURCES-MIB::hrStorageAllocationUnits.[ÍndiceDaPartição]. Este valor é o tamanho do cluster definido na criação do sistema de arquivos.Depois criar o item para a coleta dos dados, vamos para a criação do trigger.&nbsp;Na criação dele ao inserir a expressão precisamos selecionar o item criado anteriormente com as opções exibidas na tela abaixo.





O valor N&nbsp;da figura acima é 2400000000, ou seja, 2,4 GB. Na criação do item utilizamos a unidade B (bytes). Como 1 GB equivale a 1000000000 (10^9), o valor da expressão precisa ser definido desta forma.Lembrando que ele pode ser alterado conforme a necessidade da sua empresa. Além disso, lembre-se de definir um nome sugestivo para o trigger como, por exemplo, "Espaço limitado na partição C:". Assim, fica mais fácil identificar o problema quando o mesmo aparecer na Dashboard ou no recebimento de alguma mensagem.&nbsp;