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
fiCom 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.shE 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.cfgVocê deve obter algo como isto:

Certifique-se de que retorna 0 erros e 0 avisos e prossiga para recarregar o serviço:
sudo systemctl reload-or-restart nagios.serviceApó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_nrpePermita 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.150Defina 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.serviceVerifique se o serviço NRPE está em execução:
cat /etc/services | grep nrpe
netstat -at | grep nrpeAgora 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-pluginEntã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
fiPermita a execução do script:
sudo chmod +x /usr/local/scripts/check_root_home_du.shO 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.shE reinicie o listener do NRPE:
sudo systemctl restart nagios-nrpe-server.serviceAgora 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.cfgsudo systemctl reload-or-restart nagios.serviceE 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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.