IoTLinux

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:

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

Agora instalamos o Docker:

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:

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

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

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

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

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:

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

E para seguir, algumas ferramentas extras:

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

Seria interessante ter o agente no sistema nativo, hum?

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:

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 - Grafana com InfluxDB
Docker para Grafana com InfluxDB

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:

Host Container Serviço
3003 3003 grafana
8083 8083 chronograf
8086 8086 influxdb
8125 8125 statsd
22022 22 ssh

Conectando aos serviços

Se precisar conectar por ssh, simplesmente use:

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 imagem a seguir:

Grafana com InfluxDB
Configuração do InfluxDB -Grafana com InfluxDB

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.

Grafana com InfluxDB
hosts – Grafana com InfluxDB

Clicando (por exemplo) no host grafana, um dashboard de exemplo com dados coletados será exibido:

dashboard - Grafana com InfluxDB
dashboard – Grafana com InfluxDB

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.

Grafana com InfluxDB
Primeira métrica – Grafana com InfluxDB

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!

Grafana com InfluxDB

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 seguintes parâmetros:

Grafana com InfluxDB
Grafana com InfluxDB

 

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:

Grafana com InfluxDB

Depois, é só ir personalizando. Coloquei CPU e memória como exemplos.

Grafana com InfluxDB

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!

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR

https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR

https://www.facebook.com/groups/raspberrybr/
Orange Pi BR

https://www.facebook.com/groups/OrangePiBR/
Odroid BR

https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR

https://www.facebook.com/groups/SistemasEmbarcadosBR/

Sistemas Eletrônicos

https://www.facebook.com/groups/544679592355388/

Projetos Arduino | Eletrônica

https://www.facebook.com/groups/projetosarduinoeletronica/

ESP8266 e ESP32

https://www.facebook.com/groups/ESP8266BR/

ARM Brasil

https://www.facebook.com/groups/508153815944410/

MIPS BR

https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte

https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!