Artigo 12 – Criando plugin para o Nagios em Shell Script

Olá a todos, hoje vou mostrar como escrever um plugin para o Nagios em shell Script. Na verdade um simples plugin apenas para mostrar né 😛

O Nagios compreende 4 tipos de saída referente a status:

          • OK = 0
          • WARNING = 1
          • CRITICAL = 2
          • UNKNOWN = 3

Logo precisamos escrever as saídas com estes números (0,1,2,3) ou para casos mais simples com (0 e 2).

Para fazer isso em shell script é necessário escrever a saída com exit 0, exit 1, exit 2 e exit 3

Ok, Maioria de nós conhecemos o check_mailq que analisa a fila de e-mail e funciona muito bem, mas vamos imaginar que ele não exista pelo menos até o fim deste artigo ok? 🙂

Pessoal, este é apenas um exemplo de shell script, não sou expert em shell script mas me viro, então sem criticas ok?

## Vamos criar o arquivo com o conteúdo abaixo:

vim /usr/local/nagios/libexec/check_fila_mail.sh

#!/bin/sh

###############################################
##     Luciano Maia Cirilo                   ##
##     lucianosuper at hotmail.com           ##
##     http://www.nagiosnapratica.com.br     ##
###############################################

## Criando os arquivos temporarios
mailq > /tmp/fila.log
mailq > /tmp/fila-vazia.log

## Realizando as consultas
tail -n 1 /tmp/fila.log | cut -d " " -f 5 > /tmp/nfila.txt
cat /tmp/fila-vazia.log | grep "Mail queue is empty" > /dev/null

## Testando a ultima consulta para verificar se a fila esta vazia
if [ $? = 0 ]
then
echo "OK - A fila de E-mail esta vazia"
exit 0

         ## Fila menor ou igual a 50
         elif [ `cat /tmp/nfila.txt` -lt 50 ]
         then
               echo "OK - A fila tem `cat /tmp/nfila.txt` e-mails"
 exit 0

          ## Fila menor ou igual a 80
          elif [ `cat /tmp/nfila.txt` -lt 80 ]
          then
               echo "WARNING - A fila tem `cat /tmp/nfila.txt` e-mails"
 exit 1

          ## Fila maior que 80
          elif [ `cat /tmp/nfila.txt` -gt 80 ]
          then
                echo "CRITICAL - A fila tem `cat /tmp/nfila.txt` e-mails"
                exit 2
          else
                echo "UNKNOWN - Erro ao tentar ler a fila de e-mail"
                exit 3
fi

## Necessário alterar a permissão

chmod 755 check_fila_mail.sh

## Ok, agora vamos testar o plugin

./check_fila_mail.sh

OK – A fila tem 35 e-mails

## Vocês podem alterar os valores para teste, ja fiz aqui e esta funcionando 😛
Este é um plugin que funciona apenas local, logo para utiliza-lo em servidores remotos é necessário que utilize o NRPE já explicado aqui no artigo 6

Pessoal vou aproveitar e disponibilizar um plugin que verifica se um determinado IP esta listado em algumas blacklist publicas, como vocês perceberam como qualquer outro sysadmin não vivo só de Nagios. 😛 Espero que gostem e utilizem:

vim /usr/local/nagios/libexec/check_rbl.sh

#!/bin/sh

#########################################################################
##                                                                      #
##  check_rbl.sh - Verifica se o IP esta listado nas principais RBLs    #
##  Luciano Maia Cirilo - lucianosuper2 at gmail.com                    #
##        http://www.nagiosnapratica.com.br                             #
##                                                                      #
#########################################################################

iprbl () {

cat /tmp/$iplog | cut -d. -f 1 > /tmp/1$iplog
cat /tmp/$iplog | cut -d. -f 2 > /tmp/2$iplog
cat /tmp/$iplog | cut -d. -f 3 > /tmp/3$iplog
cat /tmp/$iplog | cut -d. -f 4 > /tmp/4$iplog

paste -d"." /tmp/4$iplog /tmp/3$iplog /tmp/2$iplog /tmp/1$iplog > /tmp/reverso2$iplog.log

}

nomeip () {
> /tmp/nslookup$iplog.log
nslookup "$iplog" > /tmp/nslookup$iplog.log
cat /tmp/nslookup$iplog.log | grep -v "#53" | grep "Address" | cut -c 10-900 > /tmp/$iplog
}

if [ $# = 0 ]
then
echo "Usage: $0 {IP} "
echo "Or"
echo "Usage: $0 200.0.0.10 "
exit 1
fi

iplog="$1"
echo "$iplog" > /tmp/$iplog

> /tmp/reverso2$iplog.log
> /tmp/nslookup$iplog.log
> /tmp/verifica2$iplog.log
> /tmp/saida$iplog.log
> /tmp/ips-listados2$iplog.log

grep "[0-9]\.[0-9]" /tmp/$iplog > /dev/null

if [ $? = 0 ]
then
iprbl
else
nomeip
iprbl
fi

##### verificando as rbls
for i in `cat /tmp/reverso2$iplog.log`;
do
host -t A $i.relays.mail-abuse.org     >> /tmp/verifica2$iplog.log
host -t A $i.b.barracudacentral.org     >> /tmp/verifica2$iplog.log
host -t A $i.rbl.smtpcheck.net         >> /tmp/verifica2$iplog.log
host -t A $i.zen.spamhaus.org         >> /tmp/verifica2$iplog.log
host -t A $i.bl.spamcop.net         >> /tmp/verifica2$iplog.log
done

#### Tratando a Saida do Arquivo
output () {

cat /tmp/ips-listados2$iplog.log | grep "relays.mail-abuse" > /dev/null
if [ $? = 0 ]
then
echo "$i.relays.mail-abuse.org" >> /tmp/saida$iplog.log
else
echo "IP not found" >> /dev/null
fi

cat /tmp/ips-listados2$iplog.log | grep "barracudacentral" > /dev/null
if [ $? = 0 ]
then
echo "$i.b.barracudacentral.org" >> /tmp/saida$iplog.log
else
echo "IP not found" >> /dev/null
fi

cat /tmp/ips-listados2$iplog.log | grep "rbl.smtpcheck" > /dev/null
if [ $? = 0 ]
then
echo "$i.rbl.smtpcheck.net" >> /tmp/saida$iplog.log
else
echo "IP not found" >> /dev/null
fi

cat /tmp/ips-listados2$iplog.log | grep "zen.spamhaus" > /dev/null
if [ $? = 0 ]
then
echo "$i.zen.spamhaus.org" >> /tmp/saida$iplog.log
else
echo "IP not found" >> /dev/null
fi

cat /tmp/ips-listados2$iplog.log | grep "spamcop.net" > /dev/null
if [ $? = 0 ]
then
echo "$i.bl.spamcop.net" >> /tmp/saida$iplog.log
else
echo "IP not found" >> /dev/null
fi

echo "CRITICAL - `cat /tmp/saida$iplog.log` "
exit 2
}

cat /tmp/verifica2$iplog.log | grep -v "not found" | grep -v "has no A" > /tmp/ips-listados2$iplog.log
if [ $? = 0 ]
then
output
else
echo "OK - `cat /tmp/$iplog` IP Not List RBLs Public"
exit 0
fi

### Alterando a permissão

chmod 755 check_rbl.sh

.
Espero que tenha sido esclarecedor para todos. Até a próxima!

.
.
.
🙂
Luciano Maia Cirilo
www.nagiosnapratica.com.br

Anúncios

, ,

  1. #1 por Marcelo Terres em dezembro 8, 2010 - 3:31 pm

    Ótimo plugin, parabéns pelo excelente trabalho.

    Adicionei a sorbs.net nele pois precisava monitorar tal lista também.

    []s

  2. #2 por Jamila em março 25, 2011 - 10:32 am

    Estou tentando criar um plugin para o nagios, mas parece que ele nao entende as saidas…
    Depois de criar o plugin como faço para usar, de fato, dentro do nagios?

    • #3 por Nagios na Prática! em março 25, 2011 - 10:39 am

      Olá Jamila,

      Você precisa verificar quais são os erros, como disse no artigo não sou expert em Shell Script, então sugiro que pesquise mesmo 😦

      Para usar o plugin sugiro que leia o artigo sobre o nrpe para monitorar os clientes linux, segue o link do artigo:


      https://nagiosnapratica.wordpress.com/2010/10/20/artigo6-monitorando-so-linux-com-nrpe-no-nagios/

      Espero ter ajudado.

      Att.
      Luciano Maia Cirilo

      LPIC-3
      http://www.nagiosnapratica.com.br

      • #4 por Jamila em março 25, 2011 - 11:05 am

        O script funciona, tanto que o utilizamos em outra ferramenta para monitorar. 😉
        Não chega a ser um caso de usar nrpe, pois é um ping.
        Oq o script faz é logar no router, realizar o ping e devolver o resultado.
        Mas como faço pra rodar dentro do nagios? Em que diretorio coloco?

        Obrigada pela atenção!

      • #5 por Nagios na Prática! em março 28, 2011 - 9:39 am

        Olá Jamila,

        Você deve colocar o script no diretorio /usr/local/nagios/libexec/
        criar o template dentro do arquivo: commands.cfg
        E utilizar este template nos arquivos hosts.cfg e services.cfg

        Caso queira envie depois o script para as listas do Nagios para o pessoal dar as opiniões.

        Att.
        Luciano Maia Cirilo

        LPIC-3
        http://www.nagiosnapratica.com.br

  3. #6 por Gabriel em dezembro 5, 2011 - 7:39 pm

    Boa Noite,

    pode me dizer como eu faço um scrip para o Nagios ver se um serviço esta rodando ou não??
    tipo, gostaria de criar um scrip para mostrar se alguns serviços meus estao rodando ou parado, como por exemplo, asterisk, openfire, mysql, etc…

    sei q existe alguns plugins prontos tanto q uso mtos, mas keria saber fazer algo bem basico q só mostre na tela se esta rodando ou não…

    tem como me ajudar??

    Obrigado

  4. #7 por Diego em julho 24, 2013 - 11:07 am

    Olá, tem alguma dica para fazer um plugin para monitorar Toner de impressora laser Brother todos os modelos ?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: