Manual

do

Maker

.

com

Grafana com InfluxDB e Telegraf para gerar gráficos

Grafana com InfluxDB e Telegraf para gerar gráficos

A pior parte de IoT pra mim é a parte visual. Confesso que não gosto de mexer com front-end, prefiro escrever meus firmwares e coletar dados via MQTT. Mas por esses dias venho tendo um interesse especial por gráficos, ainda mais que descobrir formas simples de gerar belos gráficos. Bom, entender todos os conceitos envolvidos não é trivial quando uma coisa é novidade, mas tudo na vida é assim, depois que pega o jeito, é moleza. O mesmo para esse artigo, que facilita muito o processo e você poderá tirar métricas e gerar alarmes de sua rede de embarcados facinho utilizando Grafana com InfluxDB!

Grafana

O Grafana é um belíssimo "gerador de gráficos". É paixão à primeira vista e tenho minhas convicções de que agrada a maioria das pessoas. Dessa vez não vamos precisar configurar nada nele, exceto a fonte de dados, que será o InfluxDB.

InfluxDB

O InfluxDB é um "time series database", ou, uma base de dados cuja chave é o tempo. Vou fazer uma introdução breve mais adiante, nesse momento foque no conceito.

O Grafana irá plotar o gráfico, mas os dados para esse gráfico devem vir de algum lugar. No caso, utilizaremos os dados que estão sendo inseridos nessa base de dados para alimentar o gráfico.

Telegraf (StatsD)

Mas de onde vem os dados que estão no banco de dados? Bem, esses dados são coletados por algum agente, então são inseridos na base de dados. No caso, utilizaremos o StatsD para coletar os dados do sistema e inserir no InfluxDB.

Conceito da arquitetura

E como eles se relacionam entre si? Bem, espero que você tenha se perguntado isso, porque eles não foram criados para "pertencerem uns aos outros". O que acontece é basicamente isso:

  • Coleta de dados no sistema
  • Armazenamento das informações
  • Exibição das informações

Poderiamos usar outro visualizador de gráfico como o Graphite, Zabbix ou o próprio Chronograf. poderiamos usar outra forma de armazenamento como MySQL, MQTT, Redis, Carbon. Poderiamos utilizar outros agentes como CollectD, Sensu, Datadog-agent. Enfim, não existe apenas o setup que estou apresentando aqui, mas "me parece" ser um dos melhores e mais ágeis de implementar.

Porque utilizar Docker?

Daí poderiamos implementar essa configuração nativamente em qualquer Linux, mas trabalhar a partir de um Docker nos permite concentrar todas as configurações de serviço em "uma caixinha", mantendo o sistema nativo imaculado e permitindo a remoção da implementação de forma prática e rápida utilizando apenas dois comandos. Além disso, a inicialização de forma adequada permite rodar toda a solução de uma maneira segura, pois o propósito principal do docker é o isolamento de processos, portabilidade (fácil migrar de um sistema para outro) e simplicidade. Digo, simplicidade hoje, porque em 2014 o processo era um tanto árduo, mas já era uma opção muito melhor do que utilizar chroots.

Mãos à obra

Tendo discorrido sobre tanto, dirijamo-nos ao deslinde dessa implementação.

Pré-requisitos

Sempre, sempre e sempre que eu escrevo um artigo cujo sistema operacional não seja um RTOS, 99,99% de certeza que o sistema será Linux. Então, o pré-requisito é que você tenha Linux e saiba digitar. Se você está lendo isso, provavelmente também pode digitar.

Dependências

Só utilizo distribuições baseadas em Debian por diversas razões. Não vou evangelizar sobre Linux, só espero que você esteja utilizando um Debian ou Ubuntu, ou Mint, ou afins. Comece instalando as dependências:

sudo su
apt-get update
apt-get remove docker docker-engine docker.io
apt-get autoremove
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"

Agora comente a linha referente ao Docker no arquivo /etc/apt/sources.list:

#Preceda a linha com cerquilha para que fique assim:
#deb-src [arch=amd64] https://download.docker.com/linux/debian wheezy stable

Agora instalamos o Docker:

apt-get install docker-ce

Se você tiver problema ao instalar o pacote docker-ce devido ao aufs, instale os headers da sua versão do kernel. Eu estou utilizando o kernel 4.9.0.5-rt-amd64. Então procurei os headers com o comando:

apt-cache search linux|grep headers

Daí procurei na lista os headers da versão do kernel que estou utilizando e instalei:

​apt-get install linux-headers-4.9.0-5-rt-amd64

Depois, fiz o carregamento do módulo aufs e concluí a instalação do docker:

modprobe aufs
apt-get -f install

Agora, se já não estiver iniciado o serviço docker, podemos fazê-lo manualmente:

/etc/init.d/docker start

Pra finalizar, vamos permitir que seja possível criar containers como usuário comum:

sudo groupadd docker || echo "Ja existia o grupo. Digite o proximo comando"
sudo gpasswd -a $USER docker

Infelizmente, só tem uma maneira de assumir a nova configuração do usuário, que é reiniciando a máquina. Mas se quiser fazer de maneira temporária até que você reinicie o computador, faça novamente o login como seu próprio usuário:

su djames

Daí já dá pra utilizar o docker como usuário.

E para seguir, algumas ferramentas extras:

apt-get install wget git

E o InfluxDB (só se quiser ter uma cópia local):

curl -sL https://repos.influxdata.com/influxdb.key | apt-key add -
source /etc/os-release
test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | tee -a /etc/apt/sources.list
apt-get update
apt-get install influxdb

Seria interessante ter o agente no sistema nativo, hum?

wget https://dl.influxdata.com/telegraf/releases/telegraf_1.5.2-1_amd64.deb
sudo dpkg -i telegraf_1.5.2-1_amd64.deb

Se quiser dar uma checada, visite esse link. Depois vamos configurar o agente também.

Preparando a imagem

Primeiro, clone o repositório e entre nele para executar o build:

git clone https://github.com/cloudurable/statsd-influxdb-grafana.git
cd statsd-influxdb-grafana
docker build -t cloudurable/grafana:v1   .
docker build -t cloudurable/grafana:latest  .

Criando um container

Agora já podemos iniciar nosso container. Diversas portas serão exportadas, entre elas, SSH. Isso porque não vamos acessar nossa imagem diretamente chamando o shell como nos artigos anteriores, dessa vez vamos fazer o container rodar com o processo isolado, mas com uma porta SSH para que possamos logar nele, apesar de não ser necessário. Para criar o container, execute:

docker run --name grafana --hostname grafana -p 3003:3003 -p 8083:8083 -p 8086:8086 -p 22022:22 -p 8125:8125/udp -t -i cloudurable/grafana:latest /usr/bin/supervisord

A imagem a seguir contém miniaturas das fases descritas adiante. Se precisar se referenciar, abra a imagem em outra aba, enquanto segue com a leitura.

grafanas.jpg

Na primeira execução pode ser que o terminal de onde você executou o container não seja liberado. Quando precisar finalizá-lo, use Ctrl+C. Das próximas vezes que precisar executar e parar, utilize docker start grafanadocker stop grafana respectivamente.

As portas de serviço estão mapeadas da seguinte maneira:

HostContainerServiço
30033003grafana
80838083chronograf
80868086influxdb
81258125statsd
2202222ssh

Conectando aos serviços

Se precisar conectar por ssh, simplesmente use:

ssh root@localhost -p 22022

Dificilmente será necessário, presumo. Isso porque toda nossa configuração pode ser feita pelo, browser. Ainda assim, se precisar conectar por ssh, a senha também é "root".

InfluxDB

Primeiramente, vamos configurar o InfluxDB através da interface do Chronograf. Abra no browser o endereço http://localhost:8083.

Coloque as configurações como na segunda miniatura da imagem anterior.

Confirme as configurações. Em seguida, clique no segundo ícone da coluna da esquerda (hosts). No meu caso, já tenho 2 hosts; o próprio container (grafana) e eu já configurei o Telegraf em meu computador, por isso aparece também devel, que é o hostname do computador que utilizo para desenvolvimento e para escrever meus artigos. A terceira miniatura da imagem de referência indica esse ponto.

Clicando (por exemplo) no host grafana, um dashboard de exemplo com dados coletados será exibido algo como a quarta miniatura da imagem de referência.

Agora podemos criar no quarto ícone da coluna da esquerda (Dashboards) e criar nosso primeiro dashboard. Calma, chegaremos no Grafana.

Clique no botão azul para criar seu primeiro dashboard, então clique em Add Graph. Em seguida, clique em Add Query. Abaixo do campo de inserção de queries temos _internal.monitortelegraf.autogen. Clique em telegraf.autogen e escolha a métrica que deseja adicionar. Depois vou gravar um video mostrando todo o processo, não tenha receio de experimentar e depois, se não entender alguma coisa, figure com o video que estará disponível no canal DobitAoByteBrasil.

Nesse ponto estamos na sexta miniatura da imagem de referência.

Clique no botão verde para salvar sua métrica. Agora, essa query servirá como referência para criar as métricas no dashboard do Grafana! Confira na imagem de referência, mais acima.

Grafana com InfluxDB

Abra no browser a URL http://localhost:3003 e faça login com o usuário root e senha grafana. Agora temos que criar primeiramente a fonte de dados para o Grafana. Clique em Add data source e preencha com os parâmetros da ante-penúltima imagem da referência inicial.

 

Depois de salvar, Clique no ícone do canto superior esquerdo e selecione Dashboards. Não vai ter nada ainda, então clique em Create your first dashboard. Clique no ícone Graph e adicione uma métrica. repare que na seleção do data source devemos escolher Default, com "D" maiúsculo (como na penúltima miniatura da imagem de referência).

Depois, é só ir personalizando. Coloquei CPU e memória como exemplos, que você vê também na imagem de referência.

No próximo artigo (que será bem mais curto), vou mostrar como adicionar o Raspberry ao dashboard remoto, também vou mostrar como criar métricas personalizadas e por fim, como inserir um ESP8266/ESP32 ao dashboard, criando um programa em C para fazer a comunicação com o InfluxDB, é só acompanhar!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.