Grafana no Debian 9

Nesse artigo quero mostrar como instalar e configurar o Grafana no Debian 9. O Grafana é um projeto de código aberto para gestão de métricas e indicadores. Ele pode ser conferido em detalhes no site https://grafana.com/ .

Existem algumas formas de instalar o Grafana no Debian. A instalação pode ser realizada através de um arquivo .deb, de um tar.gz ou usando um repositório apt.

Para instalar através do apt é necessário adicionar o repositório do Grafana com os seguintes comandos:

apt-get update 
apt-get install curl apt-transport-https
echo "deb https://packages.grafana.com/oss/deb stable main" > /etc/apt/sources.list.d/grafana
curl https://packages.grafana.com/gpg.key | sudo apt-key add -
apt-get update

O Grafana pode ser instalado com os seguintes comandos:

apt-get install grafana
systemctl enabled grafana 
systemctl start grafana

Com a instalação concluída, é possível acessar o Grafana na porta 3000 do servidor. Exemplo: http://localhost:3000 .

A porta 3000 pode ser alterada para 80/443, mas também é possível utilizar o Apache2 para fazer um proxy para o Grafana.

Essa configuração do Apache pode ser feita em um virtualhost especifico para que o Grafana responda apenas para um determinado domínio.

Por exemplo, para configurar um virtualhost com o domínio grafana.prminformatica.com.br deve-se criar o arquivo /etc/apache2/sites-available/grafana.conf com o seguinte conteúdo:

<VirtualHost *:80>

    DocumentRoot /var/vhosts/grafana.prminformatica.com.br/html
    ServerName grafana.prminformatica.com.br
    ServerAdmin nome@email.com.br

    ProxyPreserveHost On
    ProxyRequests On
    RewriteRule ^/$ / [R]
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

    ErrorLog "/var/vhosts/grafana.prminforamatica.com.br/logs/error_log"
    CustomLog "/var/vhosts/grafana.prminformatica.com.br/logs/access_log" common

    <Directory "/var/vhosts/grafana.prminformatica.com.br/html">

        Options FollowSymLinks
        AllowOverride All
        AllowOverrideList All

    </Directory>

</VirtualHost>

É necessário ativar o virtualhost com os comandos:

a2ensite grafana.conf
systemctl reload apache2

E para impedir acesso direto na porta 3000, é possível adicionar regras de firewall semelhantes a essas:

iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 3000 -j DROP

O iptables-persistent pode ser usado para manter as regras após reinicializar o sistema. No Debian, ele está disponível nos repositórios como netfilter-persistent.

Para acessar o Grafana pela primeira vez, deve-se usar o usuário admin com a senha admin. Feito o login, uma nova senha será requisitada.

O dashboard inicial vai mostrar uma tela com os próximos passos para configurar o Grafana: ‘Install Grafana’, ‘Create your first data source’, ‘New dashboard’, ‘Invite your team’ e ‘Install apps and plugins’.

Para esse artigo, os passos ‘Create your first data source’ e ‘New dashboard’ são os mais importantes, através deles, é possível criar um painel para exibir informações de um banco de dados. Já os passos ‘Invite your team’ e ‘Install apps e plugins’ são responsáveis respectivamente por adicionar usuários e instalar plugins. Os plugins podem ser vistos no seguinte endereço: https://grafana.com/plugin

No passo ‘Create your first data source’ é possível configurar acesso a um MySQL. Utilize um usuário do MySQL com acesso apenas aos bancos necessários e somente com permissão de leitura( select ).

Como exemplo, criei um banco com a seguinte tabela:

datasitevisitas
2019-04-01prminformatica5900
2019-04-02prminformatica5205
2019-04-03prminformatica4988
2019-04-04prminformatica5000
2019-04-05prminformatica5630
2019-04-06prminformatica5789
2019-04-07prminformatica5999

No passo ‘New dashboard’, é possível criar um painel para os dados dessa tabela.

Clicando em ‘Add query’ é criada uma consulta no MySQL para que o resultado seja exibido no Grafana.

Uma query possível para a tabela de exemplo é a seguinte:

SELECT
  UNIX_TIMESTAMP(data) as time_sec,
  visitas as value,
  site as metric
FROM visitas
WHERE $__timeFilter(data)
ORDER BY data ASC

Nessa query, o ‘$__timeFilter(data)’ é uma macro do Grafana que automatiza o filtro de intervalo de tempo. Outras macros podem ser vistas aqui: https://grafana.com/docs/features/datasources/mysql/#macros

Com o painel criado, o dashboard vai ter a seguinte aparência:

Podem ser adicionados mais painéis, dashboards e data sources para criar uma solução completa.

Além disso, se não quiser configurar tudo do zero, existem dashboards prontos que podem ser baixados diretamente do site do Grafana. Esses dashboards estão disponíveis no endereço: https://grafana.com/dashboards .

Para finalizar, seguem alguns exemplos:


GNU/Linux – Horário de verão 2018/2019

Fala pessoal, o blog não morreu 🙂


Tendo em vista as mudanças e incertezas sobre o horário de verão desse ano, resolvi escrever esse artigo explicando como configurar o horário de verão manualmente em sistemas GNU/Linux.

O inicio do horário de verão de 2018, inicialmente, estava marcado para começar hoje, mais precisamente na virada do dia 20/10 para o 21/10, mas foi alterado por um decreto para o dia 4/11 e talvez ainda seja alterado novamente, mudando para o dia 18/11.

Penso que ainda existe incerteza sobre quando vai iniciar o horário de verão desse ano, algumas fontes indicam para o dia 4/11, dando a entender que a alteração para o dia 18/11 foi cancelada( ou nunca foi aprovada ) e outras afirmam que a data de inicio é realmente 18/11:

   

Dependendo da distribuição ( e da versão ) que você está utilizando, é provável que a correção para o horário de verão desse ano já esteja disponível, mas se não estiver, ou o inicio do horário de verão seja alterado mais uma vez, é possível utilizar os seguintes passos para configurar o sistema manualmente:

1 – Crie o arquivo /usr/share/zoneinfo/Brazil/verao_2018_19.zic conforme esse exemplo:

 
Rule Brazil 2018 only - Nov  4 00:00 1 S
Rule Brazil 2019 only - Feb 17 00:00 0 -

Zone Brazil/East -3:00 Brazil BR%sT
 

# quando começa o horário de verão ( 4/11 00:00 ) 
Rule Brazil 2018 only - Nov  4 00:00 1 S

# quando termina o horário de verão ( 17/11 00:00, o dia 16 é o ultimo dia com horário de verão )
Rule Brazil 2019 only - Feb 17 00:00 0 -

# qual timezone será alterado na compilação
Zone Brazil/East -3:00 Brazil BR%sT
 

Nesse arquivo, estou configurando o inicio do horário de verão para o dia 4/11 e usando o Brazil/East ( horário de Brasília ), faça os ajustes para a sua necessidade. Outros horários são Brazil/Acre, Brazil/DeNoronha e Brazil/West.

2 – Compile o arquivo criado com o comando zic :


zic /usr/share/zoneinfo/Brazil/verao_2018_19.zic

3 – Consulte se o arquivo compilado foi criado corretamente:

zdump -v /usr/share/zoneinfo/Brazil/East | grep 201[89]

Se você alterou o Brazil/East no arquivo .zic, lembre-se de realizar alteração no restante dos comandos…

A saida do comando deve ser semelhante a essa:

/usr/share/zoneinfo/Brazil/East  Sun Nov  4 02:59:59 2018 UT = Sat Nov  3 23:59:59 2018 -03 isdst=0 gmtoff=-10800
/usr/share/zoneinfo/Brazil/East  Sun Nov  4 03:00:00 2018 UT = Sun Nov  4 01:00:00 2018 -02 isdst=1 gmtoff=-7200
/usr/share/zoneinfo/Brazil/East  Sun Feb 17 01:59:59 2019 UT = Sat Feb 16 23:59:59 2019 -02 isdst=1 gmtoff=-7200
/usr/share/zoneinfo/Brazil/East  Sun Feb 17 02:00:00 2019 UT = Sat Feb 16 23:00:00 2019 -03 isdst=0 gmtoff=-10800

As duas primeiras linhas mostram o inicio do horário de verão e as duas últimas o final.

# ganha uma hora 
Nov  3 23:59:59 2018 -03 
Nov  4 01:00:00 2018 -02 

# perde uma hora
Feb 16 23:59:59 2019 -02 
Feb 16 23:00:00 2019 -03 

4 – Por último, substitua o arquivo localtime pelo novo arquivo compilado:

mv /etc/localtime /etc/localtime.bkp
cp /usr/share/zoneinfo/Brazil/East /etc/localtime

E pronto seu sistema estará configurado.

Em caso de dúvidas, deixe um comentário ou me procure no twitter…

Instalando o FreeRADIUS no Ubuntu 14.04

O FreeRADIUS é um serviço para sistemas Unix like que permite realizar a autenticação, autorização e a contabilidade( AAA – Authentication, Authorization e Accounting ) de usuários de uma rede… Um exemplo de uso do FreeRADIUS é a integração com Mikrotik para fazer a autenticação dos usuários de um hotspot( Wi-Fi ).

Nesse artigo, vou mostrar como instalar, configurar e testar o FreeRADIUS no Ubuntu 14.04. Para maiores informações sobre o que é o FreeRADIUS e o que ele pode fazer, acesse o site do projeto nessa URL: http://freeradius.org/.

Para começar, é necessário atualizar a lista do APT e instalar os pacotes do FreeRADIUS e do MySQL:

 



apt-get update

apt-get install freeradius freeradius-mysql freeradius-utils mysql-server

Obs.: Todos os comandos devem ser realizados através do usuário root.

Obs.: Durante a instalação será necessário cadastrar uma senha para o usuário root do MySQL.

Com os pacotes instalados, primeiro é necessário configurar o MySQL. Execute o comando mysql_secure_installation e responda as perguntas conforme o seguinte exemplo:

 



mysql_secure_installation

#Mudar a senha do root?
Change the root password? [Y/n] n

#Remover usuários anônimos?
Remove anonymous users? [Y/n] y

#Desabilitar acesso do root remotamente?
Disallow root login remotely? [Y/n] y

#Remover o banco de dados de teste?
Remove test database and access to it? [Y/n] y

#Atualizar a tabela de privilégios agora?
Reload privilege tables now? [Y/n] y

Depois, crie um banco de dados e um usuário no MySQL para serem utilizados pelo FreeRADIUS:

 



mysql -u root -p -e "CREATE DATABASE radius"

mysql -u root -p -e "CREATE USER 'usuario_radius'@'localhost' IDENTIFIED BY 'senha'"

mysql -u root -p -e "GRANT ALL PRIVILEGES ON radius.* TO 'usuario_radius'@'localhost'"

service mysql restart

Esses comandos criam o banco de dados ‘radius’ e o usuário ‘usuario_radius’ com a senha ‘senha’.

Com o banco de dados criado, é necessário adicionar as tabelas que serão usadas pelo FreeRADIUS. Isso pode ser feito importando o arquivo /etc/freeradius/sql/mysql/schema.sql e o arquivo /etc/freeradius/sql/mysql/nas.sql para o banco de dados. Para fazer isso, use os seguintes comandos:

 



mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql

mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql

Com o banco de dados pronto, é possível iniciar a configuração do FreeRADIUS. Como a configuração padrão é bastante abrangente, será necessário fazer apenas pequenas alterações nos arquivos disponibilizados pela instalação.

Primeiro, é necessário cadastrar as informações do banco no arquivo /etc/freeradius/sql.conf. Para o exemplo desse artigo, a configuração é a seguinte:

 


... inicio do arquivo ...

database = "mysql"
#
# Which FreeRADIUS driver to use.
#
driver = "rlm_sql_${database}"

# Connection info:
server = "localhost"
#port = 3306
login = "usuario_radius"
password = "senha"
# Database table configuration for everything except Oracle
radius_db = "radius"

... final do arquivo ...

Ainda no arquivo /etc/freeradius/sql.conf, também é necessário habilitar a leitura dos clientes através do banco de dados, isso é feito retirando o # da frente da seguinte linha:

 


#readclients = yes

Dando continuidade, o próximo passo é habilitar o modulo SQL do FreeRADIUS alterando o arquivo /etc/freeradius/radiusd.conf.

Retire o # da frente dessa linha:

 


... inicio do arquivo ...

# $INCLUDE sql.conf

... final do arquivo ...

Em seguida, é necessário ativar o uso do modulo SQL nas sessões do arquivo /etc/freeradius/sites-available/default . Novamente, basta descomentar as linhas onde aparece a palavra sql, retire o # da frente de linhas iguais a essa:

 



# sql

Com isso, o FreeRADIUS está funcionando e já pode ser testado localmente( a partir da máquina onde está instalado )… Porém, antes de fazer o teste, é necessário adicionar um usuário… Use o seguinte comando para criar o usuário ‘paulo’ com a senha ‘dias’:

 


mysql -u root -p -e "INSERT INTO radcheck( username, attribute, op, value ) VALUES ( 'paulo', 'User-Password', '==', 'dias' )" radius

Reinicie o serviço do FreeRADIUS e execute o comando radtest para testar a autenticação do usuário, assim:

 



service freeradius restart

radtest paulo dias 127.0.0.1 0 testing123

Obs.: Nesse exemplo, o ‘testing123’ é o segredo( senha ) que o cliente localhost precisa enviar para utilizar o FreeRADIUS.

Se a saída do comando radtest, for semelhante a essa abaixo, o FreeRADIUS foi configurado e está funcionando corretamente.

 



rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=152, length=20

Como por padrão apenas o cliente localhost está cadastrado, para usar o FreeRADIUS em um roteador, será preciso cadastrá-lo como um cliente no banco de dados. Isso é feito com o seguinte comando:

 



mysql -u root -p -e "INSERT INTO nas( nasname, shortname, secret) VALUES ( '192.168.0.1', 'Roteador principal', 'segredo' ) " radius;

Onde ‘192.168.0.1’ é o IP do cliente, ‘Roteador principal’ é uma identificação para o cliente e ‘segredo’ e a senha que esse cliente terá que enviar junto com as requisições para o FreeRADIUS.

Bom, por enquanto é isso, conforme o tempo permitir vou tentar adicionar mais artigos sobre o FreeRADIUS, se ficou alguma dúvida ou algo não funcionou, deixe um comentário…

Nagios Core no Ubuntu 14.04 – Parte 1

Oi, tudo bem?

Hoje vou iniciar uma serie de artigos sobre como instalar e configurar o Nagios Core através dos repositórios do Ubuntu 14.04. O Nagios é um sistema de monitoramento de rede de código aberto distribuído sob a licença GPL. Ele pode monitorar hosts e serviços, alertando quando ocorrerem problemas e também quando os problemas são resolvidos.

Nesse artigo, quero mostrar como instalar, administrar usuários e monitorar hosts ativos na rede. Para isso, o primeiro passo é executar a instalação com o seguinte comando:

 
sudo apt-get install nagios3 nagios-plugins-extra
 

Durante a instalação será necessário definir uma senha para o usuário padrão do Nagios. O usuário é o nagiosadmin, escolha a senha conforme a sua vontade.

Feito isso, o Nagios já vai estar instalado e funcionando… Utilize o seu navegador( use sempre o firefox 🙂 para acessar a máquina onde o Nagios foi instalado. A URL segue o seguinte padrão: http://ip.da.maquina/nagios3.

A seguinte janela vai requisitar os dados de autenticação:

Forneça o usuário nagiosadmin e a senha que foi cadastrada durante a instalação. Se tudo ocorreu normalmente, uma interface semelhante a essa será exibida:

Com o Nagios instalado é possível criar novos usuários para ter acesso a essa interface WEB. Para isso, utilize o seguinte comando:

 
sudo htpasswd /etc/nagios3/htpasswd.users paulo

Dessa forma, o usuário paulo vai ter acesso a interface WEB do Nagios, mas ainda não vai ter permissões para acessar algumas páginas. Isso ocorre devido as permissões que estão configuradas no arquivo /etc/nagios3/cgi.cfg. Para dar as mesmas permissões do usuário nagiosadmin para o novo usuário, use os seguintes comandos:

 
sudo mv /etc/nagios3/cgi.cfg /etc/nagios3/cgi.bkp

sudo cat /etc/nagios3/cgi.bkp | sed s/=nagiosadmin/=nagiosadmin,paulo/g > /etc/nagios3/cgi.cfg

sudo service nagios3 restart

Obs.: Substitua paulo pelo nome do seu usuário.

Depois de configurar outro usuário com todas as permissões necessárias, recomendo remover o usuário nagiosadmin. Para fazer isso, use o comando:

 
sudo htpasswd -D /etc/nagios3/htpasswd.users nagiosadmin

Para configurar um monitoramento é necessário criar um arquivo dentro da pasta /etc/nagios3/conf.d. Todos os arquivos com a extensão .cfg no interior dessa pasta( e sub-pastas ) serão analisados pelo Nagios. A instalação do Nagios já deixou alguns arquivos preparados. No meu Ubuntu existem os seguintes arquivos:

 
extinfo_nagios2.cfg
generic-host_nagios2.cfg
generic-service_nagios2.cfg
hostgroups_nagios2.cfg
localhost_nagios2.cfg
services_nagios2.cfg
timeperiods_nagios2.cfg

Os arquivos generic-host_nagios2.cfg e generic-service_nagios2.cfg são templates que podem ser utilizados para criar novos monitoramentos de forma simples. Para que o Nagios monitore se um equipamento está conectado na rede( através do protocolo ICMP ) crie o arquivo /etc/nagios3/conf.d/equipamento.cfg com o seguinte conteúdo:

 
define host{
use                 generic-host
host_name           equipamento
alias               equipamento
address             192.168.0.108
}

define service{
use                   generic-service
host_name             equipamento
service_description   PING
check_command         check_ping!550.0,10%!600.0,20%
}

Observação.: Altere o campo address com o endereço IP do seu equipamento

Acessando o link Map no menu da esquerda da interface WEB do Nagios será carregada uma tela semelhante a essa:

Com essa configuração o Nagios vai monitorar e sinalizar na interface WEB se o equipamento for desconectado.

Perceba que o novo monitoramento está utilizando um ícone com o simbolo de interrogação( ? ), mas é possível alterar esse simbolo por outro que identifique o equipamento de uma forma mais adequada. Altere o arquivo /etc/nagios3/conf.d/equipamento.cfg com o seguinte conteúdo:

 
define host{
use                 generic-host
host_name           equipamento
alias               equipamento
address             192.168.0.108
}

define service{
use                   generic-service
host_name             equipamento
service_description   PING
check_command         check_ping!550.0,10%!600.0,20%
}

define hostextinfo{
host_name       equipamento
icon_image      switch.png
icon_image_alt  equipamento
statusmap_image switch.png
}

Para que essa configuração tenha o efeito desejado é necessário colocar a imagem( no exemplo switch.png ) na seguinte pasta: /usr/share/nagios3/htdocs/images/logos/

A próxima imagem é de um sistema que já está em produção, veja como os ícones fornecem uma melhor visão da rede:

Veja que além dos ícones, que identificam os equipamentos, a forma como os equipamento foram organizados oferece um boa visualização dessa rede. Para conseguir esse efeito, é necessário alterar o arquivo /etc/nagios3/conf.d/equipamento.cfg e adicionar o atributo parents na definição do host. Veja:

 
define host{
use                 generic-host
host_name           equipamento
alias               equipamento
address             192.168.0.108
parents             localhost
}

define service{
use                   generic-service
host_name             equipamento
service_description   PING
check_command         check_ping!550.0,10%!600.0,20%
}

define hostextinfo{
host_name       equipamento
icon_image      switch.png
icon_image_alt  equipamento
statusmap_image switch.png
}

Veja a diferença na interface WEB do Nagios:

Dessa forma, fica evidente que o novo equipamento está ligado diretamente no localhost ( no servidor onde o Nagios está instalado ).

Obs.: No atributo parents é especificado o atributo host_name de outro equipamento.

Bom pessoal, esse artigo termina aqui, no próximo quero mostrar como configurar o postifix e receber alertas do Nagios por email. Obrigado e até mais…