Nagios: Instalação do Nagios 3.3.x com Plugin 1.4.x no Debian Squeeze (Debian 6)

Por Fábio Gil - Criado em 23/11/2011

Instalando pacotes necessários (dependências)
apt-get install -y apache2 libapache2-mod-php5 build-essential apt-get install -y libgdchart-gd2-xpm libgdchart-gd2-xpm-dev apt-get install -y libgd2-xpm libgd2-xpm-dev

Baixando Fontes
Nagios-Core:

cd /opt wget -c http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.3.1.tar.gz tar xvzf nagios-3.3.1.tar.gz

Nagios-Plugin:

wget -c http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz tar xvzf nagios-plugins-1.4.15.tar.gz

Adicionando Usuários e Grupos do Nagios no S.O.
Os comandos a seguir são necessários para a criação do usuário e grupo padrão do Nagios, a fim de permitir que o usuário padrão do Apache 2 (normalmente o www-data) tenha permissão para execução de alguns comandos (Ex. ativar/desativar notificações de host e serviços), os quais são passados pelo Nagios:

/usr/sbin/useradd -m -s /bin/bash nagios passwd nagios /usr/sbin/groupadd nagios /usr/sbin/usermod -G nagios nagios /usr/sbin/groupadd nagcmd /usr/sbin/usermod -a -G nagcmd nagios /usr/sbin/usermod -a -G nagcmd www-data

Compilando o Nagios
Entre no diretório do codigo fonte:

cd /opt/nagios

Seguir com a compilação:

./configure --with-command-group=nagcmd

Antes de continuar a compilação do Nagios-Core, deve-se corrigir o Bug do nagios versão 3.3.1 (caso esteja utilizando esta versão) para resolver um problema que ocorre durante a instalação

sed -i 's:for file in includes/rss/\*;:for file in includes/rss/\*.\*;:g' ./html/Makefile sed -i 's:for file in includes/rss/extlib/\*;:for file in includes/rss/extlib/\*.\*;:g' ./html/Makefile

Seguir com a compilação e instalação:

make all make install make install-init make install-config make install-commandmode make install-webconf

Criando a senha de adminstrador e reinicializando o Apache 2
Configure a senha de administrador do Nagios com o comando abaixo:

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Reinicie o Apache 2:

/etc/init.d/apache2 reload

''Nota: Caso ocorrer o aviso do apache: &quot;apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName&quot;.. entao, deve-se configurar o nome do servidor para o apache2:''

echo &quot;ServerName ${HOSTNAME}&quot; >/etc/apache2/conf.d/servername

e reinicie o Apache 2 novamente:

/etc/init.d/apache2 reload

Compilando Nagios Plugins
Instale o os plugins padrão do Nagios, como segue:

cd /opt/nagios-plugins-1.4.15 ./configure --with-nagios-user=nagios --with-nagios-group=nagios make make install

Configuração da Inicialização Automática do Nagios
ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios

Verificando Erros no Arquivo de Configuração
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Se tudo correr bem, inicializar o Nagios:

/etc/init.d/nagios start

Neste momento, já é possivel acessar a página principal do Nagios em:

http:///nagios

Customização (Opcional)
Para realizar a customização básica dos icones do sistema, siga os seguintes passos:

Edite o arquivo nagios.cfg:

vi /usr/local/nagios/etc/nagios.cfg

Localize a tag cfg_file, e acrescente:

cfg_file=/usr/local/nagios/etc/objects/extinfo.cfg

este arquivo armazenará as configurações dos icones customizados.

Crie o arquivo extinfo.cfg:

vi /usr/local/nagios/etc/objects/extinfo.cfg

define hostextinfo { host_name nome_dos_servidores icon_image nome_do_arquivo_de_imagem.png icon_image_alt texto_a_exibir_no_textinfo vrml_image nome_do_arquivo_de_imagem.png statusmap_image nome_do_arquivo_de_imagem.png }

Localize o diretório /usr/local/nagios/share/images/logos/

Nele estarão contidos os arquivos de imagens descritos nas configurações acima (substituir os textos nomes de arquivo conforme sua conveniência). Então, apenas copie-os para lá.

Reinicie o serviço:

/etc/init.d/nagios restart

Configuração de Services e Hosts
As configurações de Host e Services obviamente deverao ser definidas no Host Monitor. O Nagios trabalha com templates tanto de hosts como de services. Você poderá encontrar templates prontos para uso em /usr/local/nagios/etc/objects/templates.cfg.

Mas aqui vamos utilizar apenas os templates padrão do Nagios, ficando a criacão de templates customizáveis para um capítulo.

Vamos criar a definição do host remoto.

'Nota: A execução de plugins do Nagios em hosts remotos podem e são normalmente realizadas através do Addon &quot;Nagios NRPE (Nagios Remote Plugin Executor)&quot;, ou &quot;NSClient++&quot;. Consulte o artigo &quot;Nagios: Instalação do Addon Nagios NRPE para Execução de Plugins em Máquinas Remotas com Debian Squeeze (Debian6)&quot; para hosts remotos com Sistemas com GNU/Linux, ou o artigo &quot;Nagios: Instalação do NSClient++ para Execução de Plugins em Máquinas Remotas com Windows Server 2008&quot; para hosts remotos com MS-Windows.'

Primeiramente, crie um diretório, poderá ser &quot;servers&quot;, como a seguir:

mkdir /usr/local/nagios/etc/servers

Edite o arquivo /usr/local/nagios/etc/servers/remotehost1.cfg, e adicione:

Nota: O nome do arquivo .cfg e sugestivo, podendo ser mudado conforme o administrador achar melhor.

define host{ use                    linux-server host_name              remotehost1 alias                  remotehost1 address                 }

Nota: Substituir  pelo endereco IP.

Em seguida, definir os services. Vamos adicionar os seguintes services:

define service{ use                            local-service         ; Name of service template to use host_name                      remotehost1 service_description            PING check_command                  check_ping!100.0,20%!500.0,60% }
 * 1) Service de echo

define service{ use                            local-service         ; Name of service template to use host_name                      remotehost1 service_description            CPU Load check_command                  check_nrpe!check_load }
 * 1) Service de uso de CPU

define service{ use                            local-service host_name                      remotehost1 service_description            /dev/hda1 Free Space check_command                  check_nrpe!check_hda1 }
 * 1) Service de Espaco Livre:

''Nota: Para o service &quot;Disk Free&quot; mencionado acima, verifique a partição a ser checada pelo NRPE. No exemplo acima, será checado a partição /dev/hda1, porém, poderá ser especificado outro tipo de partição, cujo comando é definido no final do arquivo de configuração do NRPE, em /usr/local/nagios/etc/nrpe.cfg.''

Feito isso, adicione em /usr/local/nagios/etc/nagios.cfg a linha:

cfg_file=/usr/local/nagios/etc/servers/remotehost1.cfg

Verifique a configuração do Nagios com o comando abaixo:

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

Se ocorrer algum erro durante esta checagem, verifique o arquivo de configuração de host criado logo acima.

Caso ocorrer tudo bem, então inicialize/reinicialize o Nagios:

/etc/init.d/nagios restart

Obs: Para verificar problemas com o Nagios, checar sempre o seu log principal, localizado em: /usr/local/nagios/var/nagios.log 

Configuração de Service Group (Host Monitor)
O Nagios fornece um recurso para agrupamento de serviços, o qual permite monitorar serviços por hosts, facilitando o monitoramento.

Existem duas formas de configurar &quot;Service Group&quot;. Na primeira, você pode configurar todos os &quot;services&quot; com seus respectivos &quot;hosts&quot; remoto em um único lugar. Veja logo abaixo:

I - Definir o &quot;Service Group&quot;, criando um arquivo &quot;.cfg&quot;, podendo ser em &quot;/usr/local/nagios/etc/objects/servicegroup.cfg&quot;, e adicione:

define servicegroup { servicegroup_name      Server Free Space alias                  Free Space members                remotehost1,service-remotehost1,remotehost2,service-remotehost2 [...] }

Onde:

servicegroup_name = Nome do grupo de serviços alias = apelido do grupo de serviços members = especificação do host (local ou remoto), seguido do nome de serviço - o mesmo que especificado em &quot;define service&quot;, com a diretiva &quot;service description&quot; previamente configurada para o host.

II - Na segunda forma, você define o &quot;Service Group&quot; conforme a forma (I), mas sem a diretiva &quot;members&quot;, e poderá então atribuir para cada &quot;services&quot; o seu &quot;Service Group&quot; correspondente, na própria configuração ou definição de &quot;services&quot;:

define service { use                            linux-service host_name                      remotehost1 service_description            /dev/xvda1 Free Space check_command                  check_nrpe!check_xvda1 servicegroups                  Server Free Space }

A diferença básica entre as formas (I) e (II) é que, com a forma (I), você tem a possibilidade de desabilitar o &quot;Service Group&quot; a hora que você precisar, bastando apenas comentar ou retirar sua definição. Já com a forma (II) isso não será possível de forma fácil, pois, para desabilitar o &quot;Service Group&quot; criado, você terá que comentar ou retirar todas as diretivas &quot;servicegroups&quot; definidas em cada &quot;service&quot;, e comentar ou retirar a definição de &quot;service group&quot;. Porém, com a forma (II) é mais fácil adicionar o &quot;service&quot; em seu respectivo &quot;Service Group&quot; - você faz isso diretamente sem recorrer ao arquivo de definição de &quot;Service Groups&quot;. Portanto, se sua intenção é desabilitar futuramente o &quot;Service Group&quot;, a forma (I) é a mais apropriada. Caso contrário, a forma (II) atenderá perfeitamente o seu propósito.

Logo após a definição de &quot;Service Groups&quot;, complete a configuração com os seguintes passos:

1. Adicione o arquivo &quot;.cfg&quot; criado em /usr/local/nagios/etc/nagios.cfg:

cfg_file=/usr/local/nagios/etc/objects/servicegroup.cfg

2. Verifique as configurações do Nagios:

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

3. Se tudo correr bem, reinicie o Nagios:

/etc/init.d/nagios restart

Configuração de Host Group (Host Monitor)
Assim como o &quot;Service Group&quot;, o Nagios fornece um recurso para agrupamento de &quot;hosts&quot;, o qual permite monitorar determinados grupos de &quot;hosts&quot;.

Também, assim como em &quot;Service Group&quot;, existem duas formas de configurar &quot;Host Group&quot;. Na primeira, você pode configurar todos os &quot;hosts&quot; em um &quot;Host Group&quot; num único lugar. Veja logo abaixo:

I - Definir o &quot;Host Group&quot;, criando um arquivo &quot;.cfg&quot;, podendo ser em &quot;/usr/local/nagios/etc/objects/hostgroup.cfg&quot;, e adicione:

define hostgroup { hostgroup_name linux-server ; The name of the hostgroup alias          Linux Servers ; Long name of the group members        host1, host2 }

Onde:

hostgroup_name = Nome do grupo de hosts alias = apelido do grupo de hosts members = especificação do host (local ou remoto).

II - Na segunda forma, você define o &quot;Host Group&quot; conforme a forma (I), mas sem a diretiva &quot;members&quot;, e poderá então atribuir para cada &quot;hosts&quot; o seu &quot;Host Group&quot; correspondente, na própria configuração ou definição de &quot;hosts&quot;:

define host { use                    linux-server host_name              host1 alias                  Host1 address                10.1.1.5 parents                hostparent1 hostgroups             linux-server }

A diferença básica entre as formas (I) e (II) é que, com a forma (I), você tem a possibilidade de desabilitar o &quot;Host Group&quot; a hora que você precisar, bastando apenas comentar ou retirar sua definição. Já com a forma (II) isso não será possível de forma fácil, pois, para desabilitar o &quot;Host Group&quot; criado, você terá que comentar ou retirar todas as diretivas &quot;hostgroups&quot; definidas em cada &quot;host&quot;, e comentar ou retirar a definição de &quot;Host Group&quot;. Porém, com a forma (II) é mais fácil adicionar o &quot;host&quot; em seu respectivo &quot;Host Group&quot; - você faz isso diretamente sem recorrer ao arquivo de definição de &quot;Host Groups&quot;. Portanto, se sua intenção é desabilitar futuramente o &quot;Host Group&quot;, a forma (I) é a mais apropriada. Caso contrário, a forma (II) atenderá perfeitamente o seu propósito.

Logo após a definição de &quot;Host Groups&quot;, complete a configuração com os seguintes passos:

1. Adicione o arquivo &quot;.cfg&quot; criado em /usr/local/nagios/etc/nagios.cfg:

cfg_file=/usr/local/nagios/etc/objects/hostgroup.cfg

2. Verifique as configurações do Nagios:

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

3. Se tudo correr bem, reinicie o Nagios:

/etc/init.d/nagios restart

Configuração de Contact Group (Host Monitor)
O Nagios dispõe de diversos mecanismos de notificações (através de pagers, Messengers, SMS, e e-mail), podendo enviar mensagens de alerta para o administrador sempre quando houver problemas com os &quot;services&quot; e &quot;hosts&quot; definidos.

As definições globais de &quot;Contact Group&quot; são definidas no arquivo de Templates do Nagios, em &quot;/usr/local/nagios/etc/objects/templates.cfg&quot;, na seção &quot;CONTACT TEMPLATES&quot;.

Configure-as conforme sua necessidade:

# # define contact{ name                           generic-contact         ; The name of this contact    template service_notification_period    24x7                    ; service notifications can be sent anytime host_notification_period       24x7                    ; host notifications can be sent anytime service_notification_options   w,u,c,r,f,s             ; send notifications for all service states, flapping events, and scheduled downtime events host_notification_options      d,u,r,f,s               ; send notifications for all host states, flapping events, and scheduled downtime events service_notification_commands  notify-service-by-email ; send service notifications via email host_notification_commands     notify-host-by-email    ; send host notifications via email register                       0                       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE! }
 * 1) CONTACT TEMPLATES
 * 1) Generic contact definition template - This is NOT a real contact, just a template!
 * 1) Generic contact definition template - This is NOT a real contact, just a template!
 * 1) Generic contact definition template - This is NOT a real contact, just a template!

Como mencionado acima, com o Nagios é possível configurar o envio de alertas para pagers, SMS etc. Vamos adotar o sistema de alerta padrão, que é o envio de notificações por e-mail (notify-host-by-email).

Uma vez configurada as definições globais, deve-se configurar o endereço de email do administrador. Para isso, edite o arquivo &quot;/usr/local/nagios/etc/objects/contacts.cfg&quot;, e configure e verifique as definições de &quot;contact&quot; e &quot;contactgroup&quot;, como segue:

define contact { contact_name                   nagiosadmin             ; Short name of user use                            generic-contact         ; Inherit default values from generic-contact template (defined above) alias                          Nagios Admin            ; Full name of user email                          admin@meudominio.com.br ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** }

define contactgroup{ contactgroup_name      admins alias                  Nagios Administrators members                nagiosadmin }

O arquivo &quot;/usr/local/nagios/etc/objects/contacts.cfg&quot; deve estar adicionado em &quot;/etc/local/nagios/etc/nagios.cfg&quot;:

cfg_file=/usr/local/nagios/etc/objects/contacts.cfg

Verifique as configurações do Nagios:

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

Se tudo correr bem, reinicie o Nagios:

/etc/init.d/nagios restart

Configuração de Contact Group para visualização de Host e Services específicos (Opcional)
Há vezes em que torna-se necessário a criação de um usuário para a monitoração de serviços de hosts específicos com o Nagios. Para isto, basta configurar o Nagios da seguinte forma:

Inicialmente, vamos definir um novo contato, editando o arquivo de configuração em &quot;/usr/local/nagios/etc/objects/contacts.cfg&quot;:

define contact{ contact_name                   monitor1                ; Short name of user use                            generic-contact         ; Inherit default values from generic-contact template (defined above) alias                          Monitor de Host1        ; Full name of user email                          monitor1@meudominio.com.br   ; }

Em seguida, criar um novo grupo de contatos, definindo os usuários membros:

define contactgroup{ contactgroup_name      monitor alias                  Grupo do Monitor de Host1 members                nagiosadmin,monitor1 }

Na definição do &quot;Host&quot; específico o qual será monitorado, configurar a diretiva &quot;contact_groups&quot; como segue:

define host{ use                    linux-server host_name              host1 alias                  Host1 address                10.1.1.5 parents                parenthost hostgroups             linux-server contact_groups         monitor }

O arquivo &quot;/usr/local/nagios/etc/objects/contacts.cfg&quot; deve estar adicionado em &quot;/etc/local/nagios/etc/nagios.cfg&quot;:

cfg_file=/usr/local/nagios/etc/objects/contacts.cfg

Verifique as configurações do Nagios:

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

Se tudo correr bem, reinicie o Nagios:

/etc/init.d/nagios restart

Htaccess: Para finalizar, configure o arquivo &quot;htpasswd.users&quot;, adicionando o usuário &quot;monitor1&quot;:

htpasswd /usr/local/nagios/etc/htpasswd.users monitor1

Referências
 * http://linuxsysadminblog.com/2009/05/setup-nagios-user-to-view-specific-host-and-services/
 * http://www.discipulosdopinguim.com.br/novidades/nagios-3-no-debian-5-lenny
 * http://library.nagios.com/library/products/nagioscore/manuals/
 * http://nagiosnapratica.wordpress.com/indice-do-site/
 * http://nagiosplug.sourceforge.net/developer-guidelines.html
 * http://www.nagios.org/download/addons
 * http://exchange.nagios.org/directory/image/93
 * http://www.nsclient.org/nscp/
 * http://www.nagios.org