Grafana Loki


O Grafana Loki é um sistema de agregação de logs desenvolvido pela equipe da Grafana Labs. Ele é usado em conjunto com o Grafana para oferecer visualização conveniente de logs.

Diferentemente da stack ELK, o Loki não indexa o conteúdo dos logs, mas os armazena junto com metadados (por exemplo, nome do pod ou namespace). Isso o torna mais rápido e menos exigente em termos de recursos.

O Loki é mais comumente utilizado com o Promtail — um agente que coleta logs dos nós e os envia para o Loki. Depois, você pode visualizar esses logs diretamente no Grafana usando consultas LogQL.

Instalar o Loki
Copiar link

Para instalar o Loki:

  1. Vá para a seção Kubernetes e clique no cluster.
  2. Na aba Complementos, clique em Grafana Loki.
  3. Você verá uma configuração YAML com parâmetros padrão.

Abaixo está uma explicação breve de cada bloco:

test_pod

test_pod:
  enabled: true
  image: bats/bats:1.8.2

Inicia um pod de teste com o utilitário bats para verificar se o Loki está disponível e recebendo logs. Usado apenas para validação automática após a instalação.

loki

loki:
  enabled: true
  isDefault: true

O componente principal é o Loki, responsável por receber e armazenar logs.

Opções configuráveis incluem:

  • url: endereço interno do serviço Loki (usado por outros componentes)
  • readinessProbe e livenessProbe: verificações de saúde
  • datasource: configurações para conectar o Loki como fonte de dados no Grafana

Você pode especificar datasource.uid se quiser vinculá-lo explicitamente.

promtail

promtail:
  enabled: true
  config:
    clients:
      - url: http://<release-name>:3100/loki/api/v1/push

O Promtail é o agente padrão que coleta logs dos nós do cluster (de /var/log/containers/*.log) e os envia para o Loki.

Se você estiver usando outros coletores de logs, como Filebeat ou Fluent Bit, pode desativar o Promtail:

fluent-bit:
  enabled: false

filebeat:
  enabled: false
  filebeatConfig: ...

logstash:
  enabled: false
  filters: ...
  outputs: ...

Essas são alternativas opcionais caso o Promtail não seja adequado — por exemplo, se você estiver usando o Fluent Operator. Elas ficam desativadas por padrão.

grafana

grafana:
  enabled: false

Ativa a instalação do Grafana. Defina como true se quiser visualizar os logs por meio de uma interface web.

Se o Grafana já estiver implantado no cluster, você pode manter desativado e configurar o Loki manualmente como fonte de dados.

prometheus

prometheus:
  enabled: false
  isDefault: false
  url: ...

Permite adicionar o Prometheus como fonte de dados no Grafana. Isso não instala o Prometheus — apenas registra a conexão. Ative se o Prometheus já estiver rodando no cluster e você quiser usá-lo junto com o Loki.

proxy

proxy:
  http_proxy: ""
  https_proxy: ""
  no_proxy: ""

Configurações de proxy, caso seja necessário conectar-se a serviços externos.

Exemplo de uso
Copiar link

Vamos passar por um exemplo de configuração usando Loki e Promtail.

Vamos iniciar um pod que escreve logs na saída padrão. O kubelet salvará esses logs em /var/log/containers/. O Promtail (como DaemonSet) lê esses logs e os envia para o Loki. Em seguida, o Grafana pode ser usado para explorá-los pela interface web.

Etapa 1. Ativar o Grafana
Copiar link

Instale o complemento Loki pelo painel de gerenciamento do cluster. Na janela de configuração, mantenha todos os parâmetros padrão, mas altere:

grafana: 
  enabled: false

para:

grafana: 
  enabled: true

Isso implantará o Grafana junto com o Loki.

Etapa 2. Instalar o NGINX Ingress
Copiar link

Instale o complemento NGINX Ingress, necessário para acessar a interface do Grafana por um domínio.

Etapa 3. Verificar o status dos pods
Copiar link

Execute:

kubectl get pods -n loki

Saída esperada:

NAME                                 READY   STATUS    RESTARTS   AGE
loki-stack-0                         1/1     Running   0          3h5m
loki-stack-grafana-878d56dc6-s28sq   2/2     Running   0          3h5m
loki-stack-promtail-5wtlr            1/1     Running   0          3h5m
loki-stack-promtail-hl6pl            1/1     Running   0          3h5m

Verifique também se o controlador de Ingress está em execução:

kubectl get pods -n ingress-nginx

E confira os serviços do Grafana Loki:

kubectl get svc -n loki

Saída de exemplo:

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
loki-stack              ClusterIP   10.111.63.222    <none>        3100/TCP   3h7m
loki-stack-grafana      ClusterIP   10.104.154.158   <none>        80/TCP     3h7m
loki-stack-headless     ClusterIP   None             <none>        3100/TCP   3h7m
loki-stack-memberlist   ClusterIP   None             <none>        7946/TCP   3h7m

Etapa 4. Configurar o Ingress
Copiar link

Agora vamos configurar o NGINX Ingress para expor o Grafana por domínio. Para isso, criaremos um load balancer e o manifesto loadbalancer.yaml:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
spec:
  selector:
    app.kubernetes.io/name: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443
  type: LoadBalancer

Aplique:

kubectl apply -f loadbalancer.yaml

Crie uma regra de Ingress no arquivo grafana-ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana
  namespace: loki
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: grafana.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: loki-stack-grafana
                port:
                  number: 80

Substitua grafana.example.com pelo seu domínio real. Certifique-se de que o registro A do domínio aponte para o IP externo do LoadBalancer.

Aplique o manifesto:

kubectl apply -f grafana-ingress.yaml

Etapa 5. Gerar logs
Copiar link

Crie um pod que registre mensagens continuamente:

kubectl run logger --image=busybox --restart=Never -- sh -c 'while true; do echo "hello from logger"; sleep 5; done'

Verifique se está em execução:

kubectl get pods

O pod logger deve estar no estado Running.

Etapa 6. Abrir o Grafana
Copiar link

Abra o domínio configurado no Ingress (por exemplo, https://grafana.example.com). Você verá a tela de login do Grafana.

Use o usuário admin. Para obter a senha:

kubectl get secret -n loki loki-stack-grafana -o jsonpath="{.data.admin-password}" | base64 --decode

Etapa 7. Visualizar logs
Copiar link

Na interface do Grafana, vá para a seção Explore.

F9ee38ab D5cb 4711 Bac7 66c4d1bb10ca.png

Interface do Grafana

Selecione Loki como fonte de dados. Em Label filters, informe pod=logger e clique em Run query.

F499f75d C6b9 45fb A5f8 A9f91b018970.png

Seção Explore na interface do Grafana

Role a página para baixo e você deverá ver entradas de log como:

hello from logger

59b4d347 4d74 4fb9 Ae5e 7ce8b592d00f.png

Entradas de log na interface do Grafana

Assim, você pode monitorar e analisar facilmente os logs do cluster diretamente no Grafana.