Nagios Plugin · 7 min read · Nov 18, 2025

Como Escrever um Plugin de Verificação Personalizado do Nagios

Este tutorial foi testado usando Nagios Core 4.3.4 no Debian 9.2

Mesmo que o Nagios Exchange tenha milhares de plugins disponíveis para download gratuito, às vezes o status que precisa ser verificado é muito específico para o seu cenário.

Considerações

Assume-se que:

  • Você tem o Nagios instalado e em execução (Você pode seguir este Tutorial se não).
  • Você conhece o básico sobre administração do Nagios.

O servidor Nagios neste exemplo está hospedado em 192.168.0.150 e um cliente de exemplo está hospedado no IP 192.168.0.200

Códigos de Saída

Para identificar o status de um serviço monitorado, o Nagios executa um plugin de verificação nele. O Nagios pode informar qual é o status do serviço lendo o código de saída da verificação.

O Nagios entende os seguintes códigos de saída:

  • 0 - Serviço está OK.
  • 1 - Serviço tem um AVISO.
  • 2 - Serviço está em um status CRÍTICO.
  • 3 - Status do serviço é DESCONHECIDO.

Um programa pode ser escrito em qualquer linguagem para funcionar como um plugin de verificação do Nagios. Com base na condição verificada, o plugin pode informar ao Nagios sobre um serviço com mau funcionamento.

Exemplo de Plugin

Vou usar um exemplo simples. Eu escrevi um plugin em um script bash para verificar os Avisos atuais. Vamos considerar que eu tenho o servidor Nagios configurado para alertar apenas sobre status críticos, então quero um alerta se eu tiver muitos serviços em um status de Aviso.

Considere o seguinte script (check_warnings.sh):

#!/bin/bash

countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)

if (($countWarnings<=5)); then
                echo "OK - $countWarnings serviços em estado de Aviso"
                exit 0
        elif ((6<=$countWarnings && $countWarnings<=30)); then
            # Este caso não faz sentido porque só adiciona um aviso.
            # É apenas para fazer um exemplo de todas as saídas possíveis.
                echo "AVISO - $countWarnings serviços em estado de Aviso"
                exit 1
        elif ((30<=$countWarnings)); then
                echo "CRÍTICO - $countWarnings serviços em estado de Aviso"
                exit 2
        else
                echo "DESCONHECIDO - $countWarnings"
                exit 3
fi

Com base nas informações fornecidas pela ferramenta nagiostats, assumo que tudo está ok se houver cinco ou menos serviços em estado de Aviso.

Vou deixar este script com todos os outros plugins do Nagios dentro de /usr/local/nagios/libexec/ (Este diretório pode ser diferente dependendo da sua configuração).

Como todo plugin do Nagios, você vai querer verificar a partir da linha de comando antes de adicioná-lo aos arquivos de configuração.

Lembre-se de permitir a execução do script:

sudo chmod +x /usr/local/nagios/libexec/check_warnings.sh

E então executá-lo como qualquer outro script:

O resultado é uma mensagem de texto e um código de saída:

Definir um Novo Comando de Verificação e Serviço

Esta etapa será a mesma com seus próprios plugins, e se você baixar um plugin de terceiros da internet também.

Primeiro você deve definir um comando no arquivo commands.cfg. A localização deste arquivo depende da configuração que você fez, no meu caso está em /usr/local/nagios/etc/objects/commands.cfg.

Então eu vou adicionar ao final do arquivo o seguinte bloco:

# Comandos de plugins personalizados...
define command{
    command_name check_warnings
    command_line $USER1$/check_warnings.sh
}

Lembre-se que a variável $USER1$ é uma variável local do Nagios definida no arquivo resource.cfg, no meu caso apontando para /usr/local/nagios/libexec.

Após definir o comando, você pode associar esse comando a um serviço, e então a um host. Neste exemplo, vamos definir um serviço e atribuí-lo ao localhost, porque esta verificação é no próprio Nagios.

Edite o arquivo /usr/local/nagios/etc/objects/localhost.cfg e adicione o seguinte bloco:

# Exemplo - Verificar avisos atuais...
define service{
    use local-service
    host_name localhost
    service_description Avisos do Servidor Nagios
    check_command check_warnings
}

Agora estamos prontos, a única coisa pendente é recarregar o Nagios para ler os arquivos de configuração novamente.

Sempre lembre-se, antes de recarregar o Nagios, verifique se não há erros na configuração. Você faz isso com o comando nagios -v como root:

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Você deve obter algo como isto:

Verificar Configuração do Nagios

Certifique-se de que retorna 0 erros e 0 avisos e prossiga para recarregar o serviço:

sudo systemctl reload-or-restart nagios.service

Após recarregar o serviço, você verá a verificação associada no localhost. Primeiro como pendente:

E após a execução com seu resultado:

Usar NRPE para executar em Clientes

Para executar um script em um cliente remoto, você precisará configurar o Executor de Plugin Remoto do Nagios (NRPE)

Como este tutorial é baseado no Debian 9, vou mostrar como instalá-lo como exemplo, mas você pode encontrar instruções para qualquer distribuição.

Instalação Genérica em Cliente Baseado em Debian

Observe que toda a configuração nesta seção é feita no cliente a ser verificado, não no servidor nagios.

Instale o NRPE e os plugins do Nagios:

sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends  
sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpe

Permita que o servidor Nagios execute comandos no cliente adicionando-o à entrada allowed_hosts em /etc/nagios/nrpe.cfg. A linha deve ser parecida com:

allowed_hosts=127.0.0.1,::1,192.168.0.150

Defina as verificações padrão que você realizará em cada cliente com o NRPE. Defina as verificações em /etc/nagios/nrpe_local.cfg. Por exemplo, um modelo para o arquivo poderia ser:

######################################
# Faça qualquer configuração local do nrpe aqui
######################################
#-----------------------------------------------------------------------------------
# Usuários
   command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10

# Carga
   command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
   command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
   command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

# Disco
   command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
   command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
   command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
   command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
   command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
   # Se você quiser adicionar um ponto de montagem não padrão:
   # command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
#-----------------------------------------------------------------------------------

A ideia de ter esse arquivo genérico é para que você possa verificar o mesmo em cada cliente.

Certifique-se de que o arquivo local e o diretório .d estão incluídos no arquivo de configuração principal com:

cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#

Reinicie o serviço:

sudo systemctl restart nagios-nrpe-server.service

Verifique se o serviço NRPE está em execução:

cat /etc/services | grep nrpe  
netstat -at | grep nrpe

Agora verifique um dos comandos NRPE definidos anteriormente a partir do servidor Nagios:

Observe que o comando check_users NRPE foi definido no arquivo /etc/nagios/nrpe_local.cfg para executar /usr/lib/nagios/plugins/check_users -w 5 -c 10.

Caso você não tenha o plugin no servidor Nagios, você pode instalá-lo com:

sudo apt-get install nagios-nrpe-plugin

Então, resumindo, o NRPE executará um script em um host remoto e retornará o código de saída para o servidor Nagios.

Configuração para Scripts Personalizados

Para usar um script personalizado como um plugin para ser executado remotamente através do NRPE, você deve primeiro escrever o script no servidor, por exemplo em /usr/local/scripts/check_root_home_du.sh:

#!/bin/bash

homeUsage=$(du -s /root/ | cut -f1)

if (($homeUsage<=$((1024*1024)))); then
                echo "OK - O uso do diretório home do root é $(du -sh /root/ | cut -f1)"
                exit 0
        elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
                echo "AVISO - O uso do diretório home do root é $(du -sh /root/ | cut -f1)"
                exit 1
        elif (($((3*1024*1024))<$homeUsage)); then
                echo "CRÍTICO - O uso do diretório home do root é $(du -sh /root/ | cut -f1)"
                exit 2
        else
                echo "DESCONHECIDO - Valor recebido: $homeUsage"
                exit 3
fi

Permita a execução do script:

sudo chmod +x /usr/local/scripts/check_root_home_du.sh

O script anterior é um exemplo muito simples, verificando o uso do disco do diretório /root e definindo um limite para considerá-lo OK, Aviso ou Crítico.

Adicione o comando ao arquivo de configuração do NRPE no cliente (/etc/nagios/nrpe_local.cfg):

# Personalizado
   command[check_root_home_du]=/usr/local/scripts/check_root_home_du.sh

E reinicie o listener do NRPE:

sudo systemctl restart nagios-nrpe-server.service

Agora podemos acessar o servidor e testá-lo como qualquer plugin padrão

Definir a Verificação NRPE nos Arquivos de Configuração do Servidor

Agora sabemos que o plugin personalizado está funcionando no cliente e no servidor, e que o NRPE está se comunicando corretamente, podemos prosseguir e configurar os arquivos do Nagios para verificar o dispositivo remoto. Então, no servidor, defina os arquivos:

/usr/local/nagios/etc/objects/commands.cfg:

#...
define command{
    command_name check_nrpe
    command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

/usr/local/nagios/etc/objects/nrpeclient.cfg:

define host{
    use          linux-server
    host_name    nrpeclient
    alias        nrpeclient
    address      192.168.0.200
}


define service{
    use                 local-service
    host_name           nrpeclient
    service_description Uso do Diretório Home do Root
    check_command       check_nrpe!check_root_home_du
}

Observe que o sinal ! separa o comando dos argumentos na entrada check_command. Isso define que check_nrpe é o comando e check_root_home_du é o valor de $ARG1$.

Além disso, dependendo da sua configuração, você deve adicionar este último arquivo ao arquivo principal (/usr/local/nagios/etc/nagios.cfg):

#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...

Verifique a configuração e, se não houver erros ou avisos, recarregue o serviço:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
sudo systemctl reload-or-restart nagios.service

E agora você tem uma nova verificação personalizada em um host:

Conclusão

O Nagios tem uma enorme biblioteca de plugins disponíveis no Nagios Exchange. No entanto, em um grande ambiente, é muito provável que você precise de algumas verificações personalizadas para usos específicos, por exemplo: Verificar o resultado de uma determinada tarefa, monitorar uma aplicação desenvolvida internamente, entre outros.

A flexibilidade fornecida pelo Nagios é perfeita para esses cenários.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.