3.3 Monitorando Servidores do Ambiente de Produção

Uma vez instalado e em funcionamento é possível agora alterar as configurações do Nagios para monitorar os servidores de nosso interesse, ou seja, aqueles responsáveis por compor o nosso ambiente de produção.

A configuração do Nagios Core é feita por meio de arquivos de configuração que devem ser colocados em local específico e indicados ao Nagios a sua localização por meio do arquivo nagios.cfg.

Considerando o contêiner criado, a instalação do Nagios está localizada em /opt/nagios e a estrutura de diretórios de primeiro nível é dada abaixo

/opt/nagios
|-- bin
|-- etc
|-- libexec
|-- sbin
|-- share
`-- var

Dessa estrutura, nesse primeiro momento, o diretório mais importante para nós é o etc, o qual contém os arquivos de configuração, conforme detalhado na estrutura abaixo:

/opt/nagios/etc
|-- cgi.cfg
|-- conf.d
|-- htpasswd.users
|-- monitor
|-- nagios.cfg
|-- objects
|   |-- commands.cfg
|   |-- contacts.cfg
|   |-- localhost.cfg
|   |-- printer.cfg
|   |-- switch.cfg
|   |-- templates.cfg
|   |-- timeperiods.cfg
|   `-- windows.cfg
`-- resource.cfg

Uma forma simples de tentar compreender como são compostos os arquivos de configuração do Nagios é dando uma olhada nos exemplos presentes na pasta objects. Inclusive, um dos arquivos é chamado de templates.cfg e pode nos ajudar na criação dos nossos próprios arquivos .cfg.

Da mesma forma que fizemos com os servidores Web e de Banco de Dados, vamos criar um arquivo Dockerfile para personalizar a imagem padrão do Docker Hub para atender as nossas necessidades. Os arquivos referentes a esse capítulo, estão disponíveis no repositório do GitHub, indicado abaixo.

https://github.com/aurimrv/devops-extra/

Para fazer uso, basta fazer o git clone ou a atualização do nosso repositório local com o git pull, caso o repositório já exista.

Segue abaixo o conteúdo do Dockerfile e, em seguida, é apresentada a personalização necessária para incluir os servidores do ambiente de produção.

FROM jasonrivers/nagios:latest

LABEL maintainer="auri@ufscar.br, g4briel.4lves@gmail.com"

ENV NAGIOS_TIMEZONE="America/Sao_Paulo"

RUN apt update
RUN apt install -y vim nano

ADD lojacfg/loja_virtual.cfg /opt/nagios/etc/objects/lojacfg/

ADD nagios.cfg /opt/nagios/etc/

EXPOSE 80

Em relação ao que já aprendemos sobre Dockerfile nas outras seções, esse arquivo não apresenta novidades. Basicamente, a partir da imagem original, 1) fizemos uso de uma das variáveis de ambiente NAGIOS_TIMEZONE, declarada na documentação da imagem, para alterar o timezone do servidor, mostrando os horários no nosso fuso (linha 5); 2) executamos a instaçlação de editores de texto básicos (linhas 7 e 8); 3) incluímos na imagem um novo diretório e dentro dele um novo arquivo de configuração com as informações dos servidores desejados - ADD lojacfg/loja_virtual.cfg /opt/nagios/etc/objects/lojacfg/ (linha 10); 4) indicamos ao Nagios que há um novo arquivo de configuração a ser utilizado fornecendo para a imagem um novo arquivo nagios.cfg - ADD nagios.cfg /opt/nagios/etc/(linha 12); e 5) expomos a porta 80 para permitir a conexão externa com o contêiner.

Para obter o arquivo original da imagem, denominado nagios.cfg, seguiram-se os mesmos passos para a obtenção dos arquivos originais do servidor Tomcat, descritos na última parte da Seção 2.4. Tendo uma cópia desse arquivo no disco local, a única alteração feita foi a inclusão da linha abaixo no final do arquivo:

cfg_file=/opt/nagios/etc/objects/lojacfg/loja_virtual.cfg

Essa linha indica ao Nagios para que ele considere o arquivo de configuração localizado em /opt/nagios/etc/objects/lojacfg/loja_virtual.cfg.

Para facilitar nossa organização e não interferir no diretório padrão de configuração do Nagios, optamos pela criação de um subdiretório lojacfg, abaixo do diretório objects do Nagios e, dentro desse diretório incluímos, inicialmente, um arquivo denominado loja_virtual.cfg. Tudo isso é feito pelo comando ADD da linha 5 do Dockerfile acima.

E o que há dentro desse arquivo? É nesse arquivo lojalojacfg/loja_virtual.cfgque descrevemos, na notação do Nagios, quais hosts desejamos que sejam incluídos para serem supervisionados. Seu conteúdo básico é apresentado abaixo:

###############################################################################
# LOJA_VIRTUAL.CFG - OBJECT CONFIG FILE FOR MONITORING LOJA VIRTUAL CONTEINERES
###############################################################################

# HOST DEFINITION
define host{
        use					linux-server
        host_name 	mysql-server
        alias				mysql-server
        address			172.17.0.2
}

define host{
        use					linux-server
        host_name 	tomcat-server
        alias				tomcat-server
        address			172.17.0.3
}

O caractere # indica comentário. Em seguida há uma seção de definição de host (define host). Nessa seção, circundada por chaves, indicamos qual o uso do host (use), qual o seu nome (host_name), qual o seu apelido (alias) e qual o seu endereço IP (address). A única informação que pode ser diferente aqui entre usuários é o número IP, o restante deve ser idêntico para todos nós.

Todos os arquivos de configuração acima estão disponíveis no GitHub do conteúdo extra do livro, cujo endereço é: https://github.com/aurimrv/devops-extra. Tais arquivos estão localizados no subdiretório cap-03/docker-nagios-image.

Assim, assumindo que nossos Servidores Web e de Banco de Dados estão on-line nos IPs acima, utilizamos o comando abaixo para inicializar o Nagios e viabilizar o monitoramento dos mesmos.

Construindo a imagem do servidor personalizada

O primeiro passo é a construção da imagem personalizada por meio do Dockerfile. Para isso, iremos executar o comando abaixo:

$ cd ~/temp/devops-extra/cap-03/docker-nagios-image
$ docker build -t nagios-server-img .

O resultado da execução deve ser algo semelhante ao exibido abaixo:

Sending build context to Docker daemon  73.73kB
Step 1/5 : FROM jasonrivers/nagios:latest
 ---> 7c94280b661e
Step 2/5 : LABEL maintainer="auri@ufscar.br, g4briel.4lves@gmail.com"
 ---> Using cache
 ---> dfcb20e4e98e
Step 3/5 : ADD lojacfg/loja_virtual.cfg /opt/nagios/etc/objects/lojacfg/
 ---> 79440f97ab4e
Step 4/5 : ADD nagios.cfg /opt/nagios/etc/
 ---> 30d19f90c4f1
Step 5/5 : EXPOSE 80
 ---> Running in ceeedc241335
Removing intermediate container ceeedc241335
 ---> de57c2acad2e
Successfully built de57c2acad2e
Successfully tagged nagios-server-img:latest

Criando o contêiner a partir da imagem personalizada

Uma vez criada a imagem personalizada, o contêiner pode ser instanciado a partir dela com o comando abaixo:

docker run --name nagios-server \ 
-v /home/auri/temp/devops-extra/cap-03/docker-nagios-image/lojacfg/:/opt/nagios/etc/objects/lojacfg/ \
-p 80:80 nagios-server-img

Observe que, da mesma forma que fizemos para os demais contêineres, atribuímos um nome a ele (nagios-server), associamos o diretório local contendo o arquivo de configuração da loja virtual (/home/auri/temp/devops-extra/cap-03/docker-nagios-image/lojacfg/) com o diretório dentro do contêiner (/opt/nagios/etc/objects/lojacfg/). Isso irá nos permitir editar o arquivo de configuração no host local e, após a edição, reiniciarmos o processo do Nagios no contêiner para avaliar as alterações na configuração. Finalmente, mapeamos a porta 80 do contêiner para a porta 80 do host local, de modo que o servidor de monitoramento pode ser acessado por meio do endereço http://localhost:80/.

Parte da saída resultante do comando acima é apresentada abaixo. Ao final do processo, basta acessar o endereço http://localhost:80/ para ter acesso à instância do servidor de monitoramento.

Adding password for user nagiosadmin
Started runsvdir, PID is 10
checking permissions for nagios & nagiosgraph
rsyslogd: [origin software="rsyslogd" swVersion="8.16.0" x-pid="18" x-info="http://www.rsyslog.com"] start
postfix/master[16]: daemon started -- version 3.1.0, configuration /etc/postfix

Nagios Core 4.4.5
Copyright (c) 2009-present Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 2019-08-20
License: GPL

Website: https://www.nagios.org
Nagios 4.4.5 starting... (PID=17)
Local time is Wed Sep 23 01:39:47 UTC 2020
nagios: Nagios 4.4.5 starting... (PID=17)
nagios: Local time is Wed Sep 23 01:39:47 UTC 2020
nagios: LOG VERSION: 2.0
nagios: qh: Socket '/opt/nagios/var/rw/nagios.qh' successfully initialized
nagios: qh: core query handler registered
nagios: qh: echo service query handler registered
nagios: qh: help for the query handler registered
wproc: Successfully registered manager as @wproc with query handler
nagios: wproc: Successfully registered manager as @wproc with query handler
wproc: Registry request: name=Core Worker 37;pid=37
nagios: wproc: Registry request: name=Core Worker 37;pid=37
...
...
wproc: Registry request: name=Core Worker 41;pid=41
nagios: wproc: Registry request: name=Core Worker 41;pid=41
Successfully launched command file worker with pid 49
nagios: Successfully launched command file worker with pid 49

A figura abaixo ilustra a tela do Nagios incluindo agora os dois servidores do nosso ambiente de produção. O acesso aos mesmos foi feito clicando-se no item Hosts do menu lateral, conforme destacado na figura. Como pode ser observado, o status do servidor Tomcat ainda aparece como pendente. Após um tempo isso deve se regularizar e o status do mesmo deve aparecer como UP, conforme imagem em sequência.

Uma vez inicializados todos os hosts que compõem o ambiente de produção, é possível navegar pelas demais opções disponíveis para tentar entender um pouco melhor o potencial da ferramenta Nagios. Em seguida, vamos alterar e melhorar um pouco mais nosso arquivo de configuração fazendo uso de recursos adicionais do Nagios.

Para viabilizar que as alterações sejam visíveis imediatamente, vamos alterar o arquivo de configuração direto dentro do servidor Nagios conectando em seu prompt de comando. Após cada alteração realizada é necessário reinicializar o processo do Nagios, mas faremos isso de dentro a sua interface web conforme apresentado a seguir.

Agrupamento de hosts

No nosso arquivo de configuração original da loja virtual (loja_virtual.cfg) criamos apenas dois hosts para serem monitorados. A medida que o ambiente de produção cresce é interessante agruparmos os hosts por tipo de serviço oferecido e, desse modo, fica mais fácil atribuir o gerenciamento desse grupo de hosts para diferentes especialistas, por exemplo. Ou então, definir um conjunto de regras que não se aplica a um host individual, mas sim a todos os hosts de determinado tipo.

No momento, como não incluímos os hosts db-server e web-server em qualquer grupo, se entrarmos no menu lateral na opção de Host Groups, o resultado é semelhando ao exibido na figura abaixo:

A definição de um grupo de hosts no Nagios pode ser feita conforme ilustrada na imagem abaixo, entre as linhas 19 e 23, as quais definem um grupo para Servidores de Banco de Dados, e outro definido entre as linhas 25 a 29.. Observa-se que um hostgroup tem o seu nome (hostgroup_name), um apelido (alias) e uma lista de membros (members) formada por nomes de hosts separadas por vírgula. No caso abaixo estamos definindo dois grupo para conter os Servidores de Banco de Dados e os Servidores Web, respectivamente.

Adicionalmente, conforme ilustrado nas linhas 7 e 15, usamos a opção hostgroups dentro da definição do host para indicar que tanto mysql-server quanto tomcat-server pertencem ao grupo linux-servers já existente.

# HOST DEFINITION
define host{
        use					linux-server
        host_name 	mysql-server
        alias				mysql-server
        address			172.17.0.2
        hostgroups	linux-servers
        }

define host{
        use					linux-server
        host_name 	tomcat-server
        alias				tomcat-server
        address			172.17.0.3
        hostgroups	linux-servers
        }

# HOST GROUPS
define hostgroup {
	hostgroup_name    db-servers
	alias 		        Database Servers
	members 		      mysql-server
}

define hostgroup {
	hostgroup_name 	  web-servers
	alias 			      Web Servers
	members 		      tomcat-server
}

Alterando o arquivo local e reiniciando o servidor Nagios

Para alterar o arquivo loja_virtual.cfg conforme apresentado acima, podemos trabalhar com o arquivo mapeado no disco local e que está conectado com contêiner. Desse modo, ao alterarmos o arquivo localizado em devops-extra/cap-03/docker-nagios-image/lojacfg/loja_virtual.cfg , estamos na verdade também alterando o arquivo /opt/nagios/etc/objects/loja_virtual.cfg dentro do contêiner em execução.

No caso do nosso ambiente de produção, além do grupo linux-servers já existem na configuração padrão do Nagios, foram pensados nesses dois outros grupos de hosts: db-servers, e web-servers. Desse modo, optamos por incluir tanto o db-server quanto o web-server no grupo do linux-servers, e também, cada um deles de forma individual em seus respectivos grupos.

Para alterarmos o arquivo loja_virtual.cfg local, podemos utilizar o editor de texto de nossa preferência. No exemplo abaixo usou-se o Sublime. Substituindo o conteúdo do arquivo original pelo exibido abaixo, ao salvar, será solicitado acesso de super-usuário. Isso porque, quando fizemos a associação do diretório local com o diretório do contêiner, durante a execução do docker run, o proprietário do diretório local mudou de dono e, desse modo, para escrever dentro dele é necessário ser superusuário. As imagens a seguir ilustram o arquivo alterado e a tentativa de salvamento.

Após salvar o arquivo, é possível verificar se a alteração se refletiu dentro do contêiner. Para isso, basta usar o comando docker exec conforme abaixo:

docker exec -it nagios-server bash

Em seguida, o comando abaixo mostra o conteúdo do arquivo loja_virtual.cfg dentro do contêiner.

cat /opt/nagios/etc/objects/lojacfg/loja_virtual.cfg

Como será observado, o conteúdo será idêntico ao da tela do Sublime acima.

Resta agora aplicar as alterações no servidor Nagios. Para isso, basta reiniciarmos o processo que controla o Nagios e isso pode ser feito de forma mais fácil direto via a interface do servidor conforme ilustra a sequência de telas a seguir.

1) Navegar até o final do menu lateral e escolher a opção: Process Info.

2) Na tela que irá abrir, escolher a opção Restart the Nagios process, conforme destacado na figura.

3) Se tudo correr bem, os dados do arquivo loja_virtual.cfg serão recarregados e as informações sobre Host Groups serão atualizados, conforme ilustrado na tela a seguir.

IMPORTANTE: caso alterarmos nosso arquivo .cfg de forma indevida ou com algum erro de sintaxe, ao tentar reinicializar o servidor podemos não conseguir e, nesse caso, teremos que descobrir o que esta errado e tentarmos reiniciar o processo. Se não for possível pela interface do navegador, a solução é reiniciar desde a construção da imagem, descrito no início desta seção.

No caso acima, conforme pode ser observado, a reinicialização ocorreu com sucesso e os três grupos de hosts foram formados.

Last updated