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/
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
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
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
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
Subindo o ambiente
docker-compose up -d
Acessos
- Grafana → http://localhost:3000
- Prometheus → http://localhost:9090
Configurar Data Sources
Loki
http://loki:3100
Prometheus
http://prometheus:9090
Queries Loki (Logs)
{job="wildfly"}
{job="wildfly"} |= "Exception"
{job="wildfly"} |= "NF-e"
Query Prometheus (Status)
sum by (cliente) (
last_over_time(up{job="syndata"}[2m])
)
Interpretação
| Valor | Status |
|---|---|
| 1 | 🟢 ONLINE |
| 0 | 🔴 OFFLINE |
Configuração do Painel
- Tipo: Stat
- Display name:
{{cliente}}
- Thresholds:
| Valor | Cor |
|---|---|
| Base | 🔴 |
| 1 | 🟢 |
Alertas
avg_over_time(up{job="syndata"}[2m]) < 1
Configurar:
- FOR: 5m
Problemas comuns
Encoding quebrado
-Dfile.encoding=UTF-8
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)