Monitoramento · 7 min read · Nov 18, 2025

Adicionar um novo Host e Serviços a serem Monitorados pelo Icinga 2

Neste tutorial, eu vou mostrar como adicionar um novo host a ser monitorado pelo Icinga 2 e como os serviços do host, como um servidor HTTP web, podem ser monitorados pelo Icinga. Eu também vou mostrar como criar seu próprio comando de plugin Icinga personalizado para monitorar serviços UDP em sua infraestrutura de rede.

Icinga 2 fornece uma infraestrutura de plug-in que permite implementar verificações de servidor e serviço, bem como notificações facilmente. Esse fato permite que administradores de sistema e programadores construam novas funcionalidades para o Icinga 2 e criem comandos especiais especializados em verificar diferentes aspectos de um host, um serviço de rede ou uma funcionalidade de rede.

Icinga 2 armazena definições de Host com atributos de objeto usados para regras de serviço, notificações, dependência e objetos de tempo de inatividade programado no arquivo hosts.conf, que está localizado no diretório /etc/icinga2/conf.d/. Neste arquivo, você pode adicionar uma nova definição de host para ser verificada pelo processo de monitoramento do Icinga2. No exemplo abaixo, adicionaremos uma nova definição para que nosso roteador de gateway padrão possa ser verificado periodicamente pelo Icinga2 para ver se está online via verificações ICMP.

nano /etc/icinga2/conf.d/hosts.conf

Vá até o final do arquivo e adicione as seguintes linhas para adicionar a nova definição de host.

object Host "Router" {  
  address = "192.168.1.1"  
  check_command = "hostalive"  
}

Por exemplo, no roteador principal, também queremos verificar o status do servidor HTTP web que é usado para autenticação e configurações. As linhas abaixo verificarão o servidor web no roteador para ver se o servidor HTTP está ativo e responde com os códigos HTTP apropriados.

object Service "http" {  
  host_name = "Router"  
  check_command = "http"  
}

Monitorar servidor web com Icinga 2

Para que o Icinga 2 reconheça as novas definições de Host e comece a monitorar periodicamente o novo recurso, você precisa reiniciar o processo emitindo o seguinte comando.

systemctl restart icinga2.service

Para verificar o estado do host recém-adicionado, neste caso, o roteador, faça login no painel Web do Icinga 2 e navegue até Visão Geral -> Hosts. No painel direito, você deve ver o status do host recém-adicionado, conforme ilustrado na imagem abaixo que descreve o status do nosso roteador. As verificações de hosts são basicamente realizadas via protocolo ICMP e o Icinga2 exibirá a média do tempo de ida e volta para um host no painel web.

Status do host Icinga 2

Se você quiser exibir o status das verificações de serviço HTTP do host, navegue até Visão Geral -> Grupos de Serviço e clique em Verificações HTTP. No painel direito, você deve ver o status do serviço HTTP do roteador, conforme ilustrado na captura de tela a seguir.

Status do serviço do host

O Icinga 2 vem com uma série de comandos pré-definidos que podem ser usados para monitorar uma ampla gama de serviços. Mas esses comandos padrão às vezes não são suficientes para verificar serviços personalizados. Nesse caso, uma abordagem é criar seu próprio script de comando personalizado que pode ser chamado pelo Icinga 2 para monitorar o serviço. No exemplo abaixo, mostraremos como adicionar um novo script de comando personalizado para verificar o estado de diferentes serviços UDP em sua rede. O comando personalizado deve ser parametrizado e deve conter pelo menos dois parâmetros, na forma de –H hostname ou IP e –p número da porta. O script de comando personalizado para verificar uma porta de serviço UDP deve ser colocado no diretório /usr/lib/nagios/plugins/ e deve ter o conteúdo conforme declarado no exemplo abaixo.

nano /usr/lib/nagios/plugins/check_udpport

trecho do arquivo check_udpport.

#!/bin/bash  
while getopts H:p: option  
do  
 case "${option}"  
in  
H) addr=${OPTARG};;  
p) port=${OPTARG};;  
esac  
done  
  
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1  
  
stat=`echo $?`  
  
if test $stat -eq 0; then  
echo "Port $port is opened on $addr"  
exit 0  
else  
echo "Port $port is not opened on $addr"  
exit 2  
fi

Plugin UDP personalizado do Icunga

Vamos tentar entender como esse script funciona. Como você pode ver, o plugin não é nada mais do que um simples script Bash. Usamos uma expressão de controle while para percorrer dois parâmetros definidos pelas letras H e p. As duas letras de variáveis de shell H e p são parametrizadas e analisadas como argumentos de linha de comando usando a declaração case. A declaração case testará se os parâmetros existem e os declarará para as variáveis addr e port. Em seguida, as variáveis $ addr e $ port serão adicionadas como opções de comando para o comando netcat, que, por sua vez, irá verificar se o número da porta, definido na $port variable, está aberto para o host com o endereço IP definido pela variável $addr. A saída do comando netcat e eventuais erros não são de interesse para este plugin, então serão descartados para o arquivo negro do Linux /dev/null. O que precisamos é do código de saída do comando netcat. Após o netcat verificar a porta no host, ele sempre retornará 0 como código de saída caso a porta UDP verificada esteja aberta. O restante do comando é bastante simples. Uma declaração condicional if-else imprimirá o seguinte: se a porta UDP estiver aberta no endereço IP especificado, imprimirá a string com o conteúdo ‘a porta está aberta’ para aquele endereço IP do host, juntamente com o código de saída 0. O código de saída 0 é sempre o código de sucesso ou código de retorno sem erro de um processo no Linux. Se a porta UDP não estiver aberta (o código de saída do netcat será diferente de 0), imprimirá a string que diz ‘a porta não está aberta’ para o host e anexará o código de saída 2. Os códigos de saída adicionados após cada string impressa neste script têm um grande significado para as verificações do Icinga2, conforme explicado abaixo.

Código de Retorno do Plugin de Comando para Estado de Serviço ou Estado de Host no Icinga 2:

0 = OK para serviços e UP para hosts

1 = WARNING para serviços e UP ou DOWN/UNREACHABLE para hosts (o host está flutuando ou muda seus estados com frequência)

2 = CRITICAL para serviços e DOWN/UNREACHABLE para hosts

3 = UNKNOWN DOWN/UNREACHABLE

Então, basicamente, o Icinga 2 executará este script com os parâmetros de host e porta e retornará dois estados: ou a porta UDP não é acessível e alertará que o serviço UDP do host é Crítico ou a porta UDP é acessível e informará que o serviço UDP está funcionando em boas condições e está OK.

Depois de editar o arquivo do script, salve e feche-o e certifique-se de que o arquivo pode ser executado adicionando as permissões de execução com o seguinte comando.

chmod +x /usr/lib/nagios/plugins/check_udpport

Em seguida, para testar se o script está funcionando como esperado, execute o comando contra uma porta UDP aberta e uma porta UDP fechada em um host em sua rede emitindo a sintaxe abaixo.

Aqui o servidor TFTP é verificado para o host 192.168.1.2.

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69  

Simule as verificações contra uma porta UDP que você sabe que está fechada

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68

Testar porta UDP

Para que este novo plugin personalizado seja amplamente utilizado no Icinga 2, adicione uma nova definição de comando no arquivo de configuração de comandos do Icinga 2, conforme mostrado no exemplo abaixo.

nano /etc/icinga2/conf.d/commands.conf

Vá até o final deste arquivo e adicione a definição de comando da seguinte forma:

object CheckCommand "myudp" {  
  command = [ PluginDir + "/check_udpport" ]  
    
    arguments = {  
    "-H" = "$addr$"  
    "-p" = "$port$"  
}  
  vars.addr = "$address$"  
}

Adicionar definição de comando Icinga

O nome do comando que será usado nas configurações do Icinga 2 para chamar o comando ckeck_udpport seria “ myudp ”. Não precisamos especificar o endereço ao chamar o comando para uma definição de serviço de host porque é codificado pela variável de macro do Icinga 2 $address$.

Para verificar se o comando está funcionando como esperado, adicione uma nova definição de serviço para um host a fim de verificar se um serviço UDP específico está aberto ou não sobre aquele host. Por exemplo, para verificar se a porta DHCP está aberta para o host 192.168.1.2, adicione a definição abaixo no arquivo hosts.conf do Icinga2.

object Service "dhcp" {  
  host_name = "Pi.hole"  
  check_command = "myudp"  
vars.port = "67"  
}

Adicionar verificação de porta UDP no Icinga 2

Depois, reinicie o Icinga 2 para refletir as mudanças e navegue até o painel Web do Icinga 2, Visão Geral -> Hosts, clique no seu host específico e verifique o status do serviço UDP, conforme mostrado na captura de tela abaixo.

Status do serviço UDP

Isso é tudo! Você adicionou com sucesso um host e seus serviços serão verificados periodicamente pelo aplicativo de monitoramento de rede Icinga 2. Para outras configurações personalizadas relacionadas ao mecanismo de monitoramento do Icinga 2 e script de comando personalizado, visite a página de documentação no seguinte endereço: https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.