Primeiros passos com Grafana Loki na Raspberry Pi
O Loki tem como finalidade agregar logs, assim é possível direcionar os logs do docker para o Loki e realizar queries para filtrar/buscar informações nos logs registrados. Mais informações na documentação oficial: Grafana Loki
Para começar a utilizar o Loki é bem simples, foi necessário criar de configuração para ele, um para o Promtail, e instalar os drivers do Loki para os nodes com Docker e um arquivo .yml
para realizar o deploy da stack do Loki junto ao cluster Swarm.
O primeiro passo foi logar em cada node do Swarm e instalar o driver do Loki:
$ docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
Mas não foi tão simples quanto parece, a instalação demorou um pouco mais do que o esperado, e ao ativar o driver o seguinte erro foi exibido:
$ docker plugin enable loki
error: dial unix /run/docker/plugins/199604ada86c8b346245f6328d19b49c10a9489660f4ffe26ad8babae3f54cd2/loki.sock: connect: no such file or directory
Pesquisando um pouco sobre esse erro, acabei encontrando uma issue no Github no próprio projeto do Loki sobre, a recomendação é realizar o build do binário em Go do Loki para dispositivos com arquitetura ARM.
Recomendo fazer os passos a seguir em um máquina com mais poder de processamento do que sua Raspberry Pi, esse processo demorou um pouco na minha máquina pessoal com I5 de 7 geração com 16Gb de Ram.
Abaixo os passos que segui para realizar o build do binário no Linux: OBS: Necessário ter o Go instalado, mais informações aqui: How to Install Go on Linux
$ git clone https://github.com/grafana/loki.git
$ cd loki
$ LOKI_VERSION=v2.6.1
$ git checkout "tags/${LOKI_VERSION}" -b setup
$ GOOS=linux GOARCH=arm GOARM=7 go build ./clients/cmd/docker-driver
Copiei o binário gerado para a Raspberry Pi,
$ scp docker-driver [email protected]:/tmp
Conectei via ssh com a Raspberry, e copiei o arquivo para a localização correta:
$ sudo cp /tmp/docker-driver /var/lib/docker/plugins/199604ada86c8b346245f6328d19b49c10a9489660f4ffe26ad8babae3f54cd2/rootfs/bin
Após isso obtive sucesso ao ativar o plugin com o seguinte comando:
$ docker plugin enable loki
Agora seguindo com a instalação do Loki junto ao cluster Swarm, para isso realizarei o download dos arquivos de configuração recomendados na documentação oficial:
$ wget https://raw.githubusercontent.com/grafana/loki/v2.6.1/cmd/loki/loki-local-config.yaml -O loki-config.yaml
$ wget https://raw.githubusercontent.com/grafana/loki/v2.6.1/clients/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml
Com os arquivos prontos, salvei eles junto as configurações do Swarm para que fosse possível utilizar na criação da stack mais a frente:
$ docker config create loki_config loki-config.yml
$ docker config create promtail_config promtail-config.yml
Criei um arquivo chamado loki.yml
e inseri o seguinte conteúdo:
version: "3.6"
networks:
grafana: {}
volumes:
grafana: {}
loki-data: {}
configs:
loki_config:
external: true
promtail_config:
external: true
services:
grafana:
image: grafana/grafana:9.1.7
user: "472"
networks:
- grafana
volumes:
- grafana:/var/lib/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
- GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
- GF_USERS_ALLOW_SIGN_UP=false
deploy:
mode: replicated
replicas: 1
logging:
driver: loki
options:
loki-url: "http://loki:3100/loki/api/v1/push"
loki-retries: "5"
loki-batch-size: "400"
loki:
image: grafana/loki:2.6.1
command: -config.file=/etc/loki/loki-config.yaml
networks:
- grafana
ports:
- "3100:3100"
volumes:
- loki-data:/loki
configs:
- source: loki_config
target: /etc/loki/loki-config.yaml
deploy:
mode: replicated
replicas: 1
promtail:
image: grafana/promtail:2.6.1
networks:
- grafana
volumes:
- /var/log:/var/log
command: -config.file=/etc/promtail/config.yml
deploy:
mode: replicated
replicas: 1
Para realizar o deploy da stack executei o seguinte comando:
$ docker stack deploy -c loki.yml loki
Com a stack disponível no cluster Swarm, foi possível acessar o Grafana através da http://192.168.1.100:3000, e configurar o Loki para visulizar os logs do container do Grafana.
Para isso, acessei o Grafana > Configuration > Data Sources > Selecionar o Loki > Em Name adicionei Loki e em URL adicionei o nome do serviço do Swarm e porta (http://loki:3100) > Clique em Save & Test > Como o teste foi bem sucedido, a mensagem abaixo foi exibida:
Após isso foi possível conferir os logs utilizando o Loki:
Referências:
Grafana Loki in Docker Swarm
docker plugin enable Loki gives an error