Reading Time: 6 minutes

Para qualquer administrador de sistemas, é fulcral ter controlo sobre a sua infraestrutura. Depois do nosso primeiro tutorial sobre como instalar e configurar o Nagios, achamos que seria importante mostrar como tornar esta ferramenta ainda mais útil. Para tal, vamos configurar o nagios e incluir gráficos de performance, algo que pode ser muito útil na análise de um problema.

NOTA: Estes passos vão ser executados assumindo que está a ser instalado na mesma máquina que o Nagios e que a configuração é igual à disponibilizada no tutorial anterior.

 

Quando os testes são executados pelo Nagios, uma das respostas fornecidas pela ferramenta são dados de performance. O Nagios na versão OpenSource não possui um motor de análise destes dados, no entanto permite passar essa informação para uma ferramenta de análise externa — é isso que hoje vamos analisar neste artigo. Para tal, vamos usar quatro ferramentas:

  • InfluxDB – Base de dados de séries temporais que irá guardar os dados;
  • Nagflux – Conector que faz a ligação entre o Nagios e o InfluxDB;
  • Grafana – Plataforma web de análise que permite visualizar os dados contidos no InfluxDB; e
  • Histou – AddOn do Grafana que permite criar gráficos automaticamente a partir do Nagios.

 

Instalação das ferramentas

InfluxDB

Vamos começar por instalar o InfluxDB. Para tal, precisamos adicionar o repositório à lista da máquina e podemos fazê-lo da seguinte forma:

cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

 

Em seguida, é necessário colocar o serviço no arranque do sistema operativo:

yum install influxdb
systemctl start influxdb
systemctl enable influxdb

Nagflux

Para a instalação do Nagflux é necessário instalar a linguagem de programação Go e o Git (caso ainda não esteja instalado no sistema):

yum install golang git

 

De seguida, deve ser descarregado e compilado o Nagflux e definir as permissões nas pastas corretas para interação com o Nagios:

export GOPATH=$HOME/gorepo
mkdir $GOPATH
go get -v -u github.com/griesbacher/nagflux
go build github.com/griesbacher/nagflux
mkdir -p /opt/nagflux
cp $GOPATH/bin/nagflux /opt/nagflux/
mkdir -p /usr/local/nagios/var/spool/nagfluxperfdata
chown nagios:nagios /usr/local/nagios/var/spool/nagfluxperfdata

 

Por fim, podemos criar um serviço para nos ser mais fácil controlar o Nagflux, e colocá-lo no arranque do sistema:

cp $GOPATH/src/github.com/griesbacher/nagflux/nagflux.service /usr/lib/systemd/system/
chmod +x /usr/lib/systemd/system/nagflux.service
systemctl daemon-reload
systemctl enable nagflux.service

Grafana

O Próximo passo é a instalação da plataforma de visualização de gráficos. Para fazer a instalação vamos criar um novo repositório na máquina:

nano /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packagecloud.io/grafana/stable/el/7/$basearch
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

 

É necessário abrir o porto de serviço na firewall:

firewall-cmd --add-port=3000/tcp --permanent
firewall-cmd --reload

 

Instalar o grafana:

yum install grafana

 

E por fim, colocar o serviço a funcionar:

systemctl daemon-reload
systemctl start grafana-server
systemctl enable grafana-server

Histou

Nesta altura falta apenas instalar o Histou. Para tal, podemos correr os seguintes comandos:

cd /tmp
wget -O histou.tar.gz https://github.com/Griesbacher/histou/archive/v0.4.3.tar.gz
mkdir -p /var/www/html/histou
cd /var/www/html/histou
tar xzf /tmp/histou.tar.gz --strip-components 1
cp histou.ini.example histou.ini
cp histou.js /usr/share/grafana/public/dashboards/

Configuração dos serviços e do Nagios

Agora que temos tudo o que é necessário instalado, falta-nos configurar as ferramentas e o Nagios.

 

Nagflux

Vamos começar por configurar o Nagflux, para tal vamos criar o ficheiro “/opt/nagflux/config.gcfg” e introduzir o seguinte dentro dele:

nano /opt/nagflux/config.gcfg

nano /opt/nagflux/config.gcfg

[main]
    NagiosSpoolfileFolder = "/usr/local/nagios/var/spool/nagfluxperfdata"
    NagiosSpoolfileWorker = 1
    InfluxWorker = 2
    MaxInfluxWorker = 5
    DumpFile = "nagflux.dump"
    NagfluxSpoolfileFolder = "/usr/local/nagios/var/nagflux"
    FieldSeparator = "&"
    BufferSize = 10000
    FileBufferSize = 65536
    DefaultTarget = "all"

[Log]
    LogFile = ""
    MinSeverity = "INFO"

[InfluxDBGlobal]
    CreateDatabaseIfNotExists = true
    NastyString = ""
    NastyStringToReplace = ""
    HostcheckAlias = "hostcheck"

[InfluxDB "nagflux"]
    Enabled = true
    Version = 1.0
    Address = "http://127.0.0.1:8086"
    Arguments = "precision=ms&u=root&p=root&db=nagflux"
    StopPullingDataIfDown = true

[InfluxDB "fast"]
    Enabled = false
    Version = 1.0
    Address = "http://127.0.0.1:8086"
    Arguments = "precision=ms&u=root&p=root&db=fast"
    StopPullingDataIfDown = false

 

Precisamos reiniciar o serviço:

systemctl restart nagflux.service

 

Para verificarmos se está tudo correto até este passo podemos executar o comando:

curl -G "http://localhost:8086/query?pretty=true" --data-urlencode "q=show databases"

 

O comando deve devolver um resultado semelhante a:

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "databases",
                    "columns": [
                        "name"
                    ],
                    "values": [
                        [
                            "_internal"
                        ],
                        [
                            "nagflux"
                        ]
                    ]
                }
            ]
        }
    ]
}

 

Devemos ter em especial atenção se aparece a string “nagflux”. Em caso afirmativo, podemos avançar.

Nagios

SELinux

Antes de começar com a configuração do Nagios propriamente dita, gostaria de referir que muito provavelmente o SELinux vai impedir que esta configuração funcione. Para resolver este problema, há 2 soluções:

  1. Desativar o SELinux. Pessoalmente, desaconselho fortemente pois o SELinux é um excelente mecanismo de segurança.
  2. Ajustar o SELinux, de forma a permitir a execução dos nossos serviços. No entanto esta configuração é complexa e depende de vários factores, motivo pelo qual não é possível deixar aqui os comandos executados para habilitar o SELinux. Posso no entanto recomendar que sigam o nosso tutorial sobre SELinux de forma a resolveram o problema.

Faço uma nota importante que não basta auditar o SELinux uma vez, pois à medida que vão desbloqueando alguns parâmetros podem aparecer outros a ser bloqueados, no meu caso tive de executar 3 operações (com várias regras cada) até ter tudo funcional.

 

Começando agora com a configuração do Nagios propriamente dita, temos de editar o ficheiro de configuração, no nosso caso, disponível em “/etc/nagios/nagios.cfg” e editar as seguintes linhas:

process_performance_data=1
host_perfdata_file=/usr/local/nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file-nagflux

service_perfdata_file=/usr/local/nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file-nagflux

 

Estas linhas já se encontram no ficheiro, algumas comentadas, outras com valores diferentes dos necessários, como elas estão espalhadas e não seguidas de forma a facilitar a edição para quem tem uma configuração igual à nossa, podem usar os seguintes comandos:

sed -i 's/^process_performance_data=0/process_performance_data=1/g' /etc/nagios/nagios.cfg
sed -i 's/^#host_perfdata_file=/host_perfdata_file=/g' /etc/nagios/nagios.cfg
sed -i 's/^#host_perfdata_file_template=.*/host_perfdata_file_template=DATATYPE::HOSTPERFDATA\\tTIMET::$TIMET$\\tHOSTNAME::$HOSTNAME$\\tHOSTPERFDATA::$HOSTPERFDATA$\\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$/g' /etc/nagios/nagios.cfg
sed -i 's/^#host_perfdata_file_mode=/host_perfdata_file_mode=/g' /etc/nagios/nagios.cfg
sed -i 's/^#host_perfdata_file_processing_interval=.*/host_perfdata_file_processing_interval=15/g' /etc/nagios/nagios.cfg
sed -i 's/^#host_perfdata_file_processing_command=.*/host_perfdata_file_processing_command=process-host-perfdata-file-nagflux/g' /etc/nagios/nagios.cfg
sed -i 's/^#service_perfdata_file=/service_perfdata_file=/g' /etc/nagios/nagios.cfg
sed -i 's/^#service_perfdata_file_template=.*/service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\\tTIMET::$TIMET$\\tHOSTNAME::$HOSTNAME$\\tSERVICEDESC::$SERVICEDESC$\\tSERVICEPERFDATA::$SERVICEPERFDATA$\\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$/g' /etc/nagios/nagios.cfg
sed -i 's/^#service_perfdata_file_mode=/service_perfdata_file_mode=/g' /etc/nagios/nagios.cfg
sed -i 's/^#service_perfdata_file_processing_interval=.*/service_perfdata_file_processing_interval=15/g' /etc/nagios/nagios.cfg
sed -i 's/^#service_perfdata_file_processing_command=.*/service_perfdata_file_processing_command=process-service-perfdata-file-nagflux/g' /etc/nagios/nagios.cfg

 

Vamos necessitar ainda de editar o ficheiro “/etc/nagios/objects/commands.cfg” e acrescentar no fundo os seguintes parâmetros:

nano /etc/nagios/objects/commands.cfg
    define command {
        command_name    process-host-perfdata-file-nagflux
        command_line    /bin/mv /var/log/nagios/host-perfdata /usr/local/nagios/var/spool/nagfluxperfdata/$TIMET$.perfdata.host
    }

    define command {
        command_name    process-service-perfdata-file-nagflux
        command_line    /bin/mv /var/log/nagios/service-perfdata /usr/local/nagios/var/spool/nagfluxperfdata/$TIMET$.perfdata.service
    }

 

Podemos agora verificar se a configuração do Nagios está correcta com o comando:

nagios -v /etc/nagios/nagios.cfg

 

Em caso afirmativo podemos reiniciar o serviço:

systemctl restart nagios.service

 

E podemos agora verificar se a integração com o Nagflux está a funcionar, executando o seguinte comando:

curl -G "http://localhost:8086/query?db=nagflux&pretty=true" --data-urlencode "q=show series"

 

Que nos deve apresentar um resultado semelhante a:

 

Se obtivermos resultados começados por “metrics” está tudo ok!

 

Grafana

Precisamos agora de indicar ao Grafana onde recolher os dados. Para tal devemos ir ao browser e abrir a pagina “http://ip_maquina:3000” e chegamos à página de Login:

 

Por defeito o user e a password são “admin” que nos será pedido para mudar assim que fazemos login pela primeira vez.

Devemos em seguida clicar em “Add Source”:

 

E introduzir os valores:

Name: nagflux
Type: InfluxDB
URL: http://localhost:8086
Access: Server(Default)
Database: nagflux

 

E em seguida clicar em “Save & Test” o que nos deve devolver “Data source is working”, como representado na imagem seguinte. Todos os outros campos devem ser deixados iguais.

Histou

Configurando agora o Histou, precisamos de editar o ficheiro “/usr/share/grafana/public/dashboards/histou.js”, e mudar a seguinte linha:

nano /usr/share/grafana/public/dashboards/histou.js
var url = 'http://localhost/histou/';

 

Alterar “localhost” para o IP da máquina. Para verificar que está a funcionar podemos executar o seguinte comando, que nos deve devolver uma grande quantidade de dados:

curl -G "http://localhost/histou/?host=localhost&service=PING"

 

Em caso afirmativo podemos já visualizar no browser informação colocando no endereço algo como:
“http://ip_da_maquina:3000/dashboard/script/histou.js?host=localhost&service=PING” no meu caso o IP é “192.168.2.163”:

 

E já podemos observar dados provenientes do nagios.

 

Integração com a interface do Nagios

Neste momento falta apenas integrarmos este gráficos de forma simples na interface gráfica do Nagios de forma a tirarmos o melhor partido deles.

Se bem se lembram a interface do Nagios é algo como:

 

Para integrar esta interface com o grafana, precisamos apenas de efectuar mais alguns passos. Primeiro vamos editar o ficheiro “/etc/nagios/objects/templates.cfg” e adicionar os seguintes blocos:

nano /etc/nagios/objects/templates.cfg

    define host {
       name       host-grafana
       action_url http://192.168.2.163:3000/dashboard/script/histou.js?host=$HOSTNAME$
       register   0
    }

    define service {
       name       service-grafana
       action_url http://192.168.2.163:3000/dashboard/script/histou.js?host=$HOSTNAME$&service=$SERVICEDESC$
       register   0
    }

 

E agora precisamos apenas de indicar para cada um dos nossos “clientes” que estão a ser monitorizados esta indicação. Para tal devemos ir aos ficheiros de configuração dos clientes “/etc/nagios/servers/*.cfg” e editar da seguinte forma:

define host {
         use                             linux-server,host-grafana
.
.

define service {
        use                             generic-service,service-grafana

NOTA: o ficheiro não tem esta aparência, eu apenas estou a dar o exemplo das linhas que devem ser alteradas;

 

Devem ter em conta que no bloco “host” que está logo no início do ficheiro têm de adicionar “host-grafana” e nos blocos dos serviços “service-grafana”, e tem de ser adicionado em cada um dos serviços.

Para finalizar devem editar da mesma forma o ficheiro de configuração do localhost, de forma a também terem essa integração para a própria máquina, o ficheiro a editar é “/etc/nagios/objects/localhost.cfg”.

Devemos verificar se está tudo ok com as novas configurações:

nagios -v /etc/nagios/nagios.cfg

Podemos então agora fazer restart ao Nagios (ou mesmo reboot à máquina depois de tanta alteração).

 

systemctl restart nagios.service

 

Agora se nos dirigirmos ao nosso Nagios vamos encontrar uma pequena diferença:

 

Como podem ver obtemos um pequeno icon em cada serviço, e no próprio cliente. Clicando isto leva-nos directamente ao grafana com um gráfico para esse serviço/máquina, por exemplo ver a load de CPU do localhost:

 

Já podemos observar o gráfico do lado direito a aparecer, e ao fim de algum tempo de recolha podemos então ver coisas mais interessantes de analisar:

 

Espero que achem útil esta integração, no meu dia a dia é uma ferramenta bastante útil para tentar diagnosticar alguns problemas, de forma mais rápida e simples. Deixem os vossos comentários, sugestões e dúvidas.

 

I am a SysAdmin and I love it. The stress, finding the best solution in a limited time window, makes me feel acomplished.

In a more recent past, I have been also taking a big interest in Computer Security.