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.
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, 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 variaveis
declare TOTAL=0
declare USADO=0
# Comunidade SNMP
COMUNIDADE=monitora
# Obtem o ID do disco na tabela SNMP contida na MIB
if [ "$3" == "linux" ]; then
ID=`/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`
else
ID=`/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.
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 de um servidor com o sistema operacional Linux, ela ficaria da seguinte forma: 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 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. 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 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.
Legal. Mas, como fazer para que o resultado seja o percentual de disco livre?
ResponderExcluirOlá! Conforme disse no artigo, o valor fornecido pela MIB é o número de clusters. Se deseja obter a porcentagem. Há duas saídas, creio eu. A primeira seria alterar o shell script acima de forma que ele forneça a porcentagem. Você poderia utilizar a expressão X = (100xLIVRE) / TOTAL. Onde X é o valor em porcentagem. Outro detalhe é que o item no Zabbix deve ser alterado retirando a unidade B e o multiplicador.
ResponderExcluirA segunda opção, que é mais simples, seria obter os valores do host utilizando o agente do Zabbix que possui funções de obter o valor em porcentagem do espaço em disco.
Man, eu fiz do mesmo jeito, testo no script e vem o valor ok. Porém no zabbix obtenho este erro:
ResponderExcluirReceived value [-] is not suitable for value type [Numeric (float)]
Opa! Desculpe a demora. Aparentemente o Zabbix não está interpretando o valor retornado pelo script como float. O sistema operacional é Windows ou Linux. O tamanho do cluster é 4 KB?
Excluir