Recentemente comecei a usar o Nagios para monitorar cerca de 25 servidores (principalmente virtuais, com alguns autônomos). A maioria dos servidores (incluindo o próprio host Nagios) está executando o Ubuntu 14.04 LTS, com alguns executando o 12.04 LTS. Portanto, pensei que poderia simplesmente utilizar o NRPE e acabar com isso.
Configurar o NRPE provou ser bastante complexo para mim. Por exemplo, para um comando check_disk simples, tive que especificar manualmente qual partição verificar, excluindo todas as outras partições/sistemas de arquivos, conforme mostrado abaixo:
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 57% -x /dev -x /run -x /run/lock -x /run/shm -x /run/user -x /sys/fs/cgroup
Caso contrário, meus limites de aviso e crítico foram imediatamente acionados por sysfs, proc ou outras partições.
Então dei uma olhada no monitor de serviço básico que o host Nagios executa sozinho. Ele está listado em /usr/local/nagios/etc/localhost.cfg e contém o seguinte (sinto muito! Não entendo por que não formata corretamente!)
define service{
use local-service ; Name of service template to use
host_name localhost
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Root Partition
check_command check_local_disk!20%!10%!/
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Users
check_command check_local_users!20!50
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Total Processes
check_command check_local_procs!250!400!RSZDT
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Load
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Swap Usage
check_command check_local_swap!20!10
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description SSH
check_command check_ssh
notifications_enabled 0
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description HTTP
check_command check_http
notifications_enabled 0
}
O que resulta nisso no painel:
Isto é perfeito para mim. Isso é exatamente o que desejo que cada host que adiciono mostre. Em vez de mexer com comandos personalizados, como exatamente devo "copiar" isso para cada host por meio do arquivo conf NRPE para ver todos esses serviços específicos para cada host que adiciono? Está claro que isso já está aqui e já funciona no host local. Estou lutando para entender a organização necessária para que isso aconteça.
Obrigado por todo e qualquer conselho.
Responder1
Não faz muito tempo, escrevi um script de instalação automática NRPE muito bom que acredito que pode ajudá-lo se você editá-lo para atender às suas necessidades. O script inclui muitas verificações integradas que estão sendo adicionadas ao nrpe.cfg
arquivo de cada host. Ou seja, você pode configurar as verificações que são relevantes para você e garantir que cada host que está executando o script também as tenha, isso é sobre o lado do cliente.
Um link para o roteiro:Aqui.
No que diz respeito ao lado do servidor (Nagios), você pode instalar um Nagios-Configuration Manager como o NagioSQL por exemplo que o ajudará a gerenciar seus hosts e serviços de uma forma mais conveniente através de uma GUI.
Mais do que isso, para ter certeza de que todos os seus hosts possuem essas verificações que você mostrou, basta criar um grupo de serviços que inclua todos esses serviços (verificações) que você deseja monitorar e depois anexar esse grupo de serviços a cada host que você monitora.
Deixe-me contar o que fiz na minha empresa, queria ter certeza de que cada servidor fosse monitorado com a check_load
verificação, mas como não temos uma linha de base de hardware na empresa, o que significa que cada servidor tem especificações diferentes e check_load
é calculado por núcleos/cpu's na máquina, adicionei ao módulo "Nagios_client" em nosso servidor Puppet um custom_fact
que identifica quantos processadores existem em uma máquina e configura o Nagios check_load
de acordo.
Por exemplo, digamos que o servidor1 tenha 4 CPUs, o que significa que a carga de 2,8 é ideal (0,7 por CPU). O Puppet through facter
identifica o número de CPUs e depois edita o servidor nrpe.cfg
assim:
command[check_load]=/usr/local/nagios/libexec/check_load -w 2.9,3.0,3.1 -c 4.0,5.0,6.0
Então, no NagioSQL por exemplo, você pode usar o "recurso Importar" que permite importar *.cfg
arquivos que serão carregados no Nagios como Hosts e Serviços. Assim, você pode criar um host.cfg
arquivo e através de um script duplicá-lo por host que deseja monitorar e apenas alterar o nome do host/ip de cada máquina e isso levaria mais um passo para configurações mais automáticas.
No meu caso, por exemplo, o Puppet é capaz de entender que está rodando pela primeira vez em uma máquina e então também criou o host.cfg
arquivo relevante no Nagios.
Acredito que com o Puppet + NagioSQL sua administração do Nagios seria uma tarefa muito mais fácil.
Em relação à sua dificuldade em configurar quaisquer verificações... Você sempre pode escrever seu próprio script e configurar o Nagios para executá-lo para você. Por exemplo, vamos pegar o seu check_disk
comando, é um comando muito rico que permite exibir todos os tipos de dados que são desnecessariamente importantes para você.
Então, tive o mesmo problema com check_procs
outro comando muito rico que fornece todos os tipos de dados... dos quais eu não precisava, então escrevi um script de verificação simples que faz exatamente o que preciso e configurei-o no Nagios. Exemplo:
#!/bin/bash
# This script checks for running processes for mt.js and adb-server.js
# Script by Itai Ganot 2015 .
process="$1"
appname=$(basename $0)
if [ -z "$1" ]; then
echo "Please specify a process to check"
exit 1
fi
ps -ef | grep "$process" | egrep -v "grep|$appname" &>/dev/null
if [ "$?" -eq "0" ] ; then
stat="OK"
exitcode="0"
msg="Process $process is running"
else
stat="Critical"
exitcode="2"
msg="There are currently no running processes of $process"
fi
pid=$(ps -ef | grep "$process" | egrep -v "grep|$appname" | awk '{print $2}')
echo "$stat: $msg Process PID: $pid"
exit $exitcode
Isso me dá menos informações do que o real check_procs
, mas me dá apenas as informações de que preciso.
Então, para resumir, se o seu check_disk
comando dificulta a configuração, basta criar seu próprio script, essa é a beleza do Nagios.
Espero ter ajudado você.
Responder2
Você precisa de algum tipo de software de gerenciamento de configuração para configurar e instalar o daemon nrpe em cada host remoto, bem como implantar as configurações e, finalmente, seus plug-ins.
Posso sugerirAnsiblepara esta tarefa.
https://github.com/bobmaerten/ansible-role-nagios-nrpe-server