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: