DEV Community

Edivan Carvalho
Edivan Carvalho

Posted on

Monitoramento de Logs com Grafana + Loki + Promtail + Prometheus

Manual Completo - Monitoramento com Grafana + Loki + Promtail + Prometheus


Visão Geral

Stack completa para observabilidade:

Camada Ferramenta
Logs Loki
Coleta de logs Promtail
Métricas Prometheus
Visualização Grafana

Estrutura de Pastas

loki-stack/
├── docker-compose.yml
├── loki-config.yaml
├── promtail-config.yaml
├── prometheus.yml
├── loki-data/
├── promtail-data/
├── grafana-data/
Enter fullscreen mode Exit fullscreen mode

docker-compose.yml

version: '3.8'

services:

  loki:
    image: grafana/loki:2.9.0
    container_name: loki
    ports:
      - "3100:3100"
    volumes:
      - ./loki-config.yaml:/etc/loki/config.yaml
      - ./loki-data:/loki
    command: -config.file=/etc/loki/config.yaml

  promtail:
    image: grafana/promtail:2.9.0
    container_name: promtail
    volumes:
      - ./promtail-config.yaml:/etc/promtail/config.yaml
      - ./promtail-data:/promtail
      - C:/Desenvolvimento/softwares/wildfly-29.0.1.Final/standalone/log:/var/log/cliente102
      - C:/Desenvolvimento/softwares/wildfly-29.0.1.Final_migracao/standalone/log:/var/log/cliente103
    command: -config.file=/etc/promtail/config.yaml
    depends_on:
      - loki

  grafana:
    image: grafana/grafana:10.0.0
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - ./grafana-data:/var/lib/grafana

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
Enter fullscreen mode Exit fullscreen mode

loki-config.yaml

auth_enabled: false

server:
  http_listen_port: 3100

common:
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2024-01-01
      store: boltdb-shipper
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h

limits_config:
  retention_period: 168h

compactor:
  working_directory: /loki/compactor
Enter fullscreen mode Exit fullscreen mode

promtail-config.yaml

server:
  http_listen_port: 9080

positions:
  filename: /promtail/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: wildfly

    static_configs:

      - targets:
          - localhost
        labels:
          job: wildfly
          cliente: srv-syndataweb-102
          __path__: /var/log/cliente102/*.log

      - targets:
          - localhost
        labels:
          job: wildfly
          cliente: srv-syndataweb-103
          __path__: /var/log/cliente103/*.log
Enter fullscreen mode Exit fullscreen mode

prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'syndata'
    metrics_path: '/syndata-com/actuator/prometheus'

    static_configs:
      - targets:
          - homologacao-j17.sistemalivre.com.br
        labels:
          cliente: homologacao-j17
Enter fullscreen mode Exit fullscreen mode

Subindo o ambiente

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

Acessos


Configurar Data Sources

Loki

http://loki:3100
Enter fullscreen mode Exit fullscreen mode

Prometheus

http://prometheus:9090
Enter fullscreen mode Exit fullscreen mode

Queries Loki (Logs)

{job="wildfly"}
Enter fullscreen mode Exit fullscreen mode
{job="wildfly"} |= "Exception"
Enter fullscreen mode Exit fullscreen mode
{job="wildfly"} |= "NF-e"
Enter fullscreen mode Exit fullscreen mode

Query Prometheus (Status)

sum by (cliente) (
  last_over_time(up{job="syndata"}[2m])
)
Enter fullscreen mode Exit fullscreen mode

Interpretação

Valor Status
1 🟢 ONLINE
0 🔴 OFFLINE

Configuração do Painel

  • Tipo: Stat
  • Display name:
{{cliente}}
Enter fullscreen mode Exit fullscreen mode
  • Thresholds:
Valor Cor
Base 🔴
1 🟢

Alertas

avg_over_time(up{job="syndata"}[2m]) < 1
Enter fullscreen mode Exit fullscreen mode

Configurar:

  • FOR: 5m

Problemas comuns

Encoding quebrado

-Dfile.encoding=UTF-8
Enter fullscreen mode Exit fullscreen mode

Prometheus não coleta

  • endpoint acessível
  • DNS ok
  • firewall liberado

Dimensionamento

Recurso Recomendado
CPU 2-4 vCPU
RAM 4GB
Disco 10GB+

Boas práticas

  • usar label cliente
  • separar logs e métricas
  • criar dashboards distintos
  • evitar logs gigantes

Próximos passos

  • Alertas avançados
  • Métricas customizadas
  • Logs estruturados
  • Service discovery

Conclusão

✔ Logs centralizados
✔ Métricas reais
✔ Status ONLINE/OFFLINE
✔ Multi-cliente

Arquitetura pronta para produção

Top comments (0)