Este repositório é uma base prática para estudar observabilidade com a stack LGTM. A ideia não é só subir Grafana, mas ter uma aplicação pequena que gera sinais úteis de propósito para você explorar logs, métricas, traces e alertas em um ambiente local e em uma VPS real.
Lokipara logsGrafanapara visualização e investigaçãoTempopara tracesMimirpara métricasAlloycomo coletor e roteador dos sinaisFastAPIcomo aplicação de demonstração
A API escreve logs em stdout. O Docker expõe esses logs, o Alloy coleta tudo
pela socket do Docker e encaminha para o Loki.
api -> stdout -> Docker -> Alloy -> Loki -> Grafana
A API emite métricas com OpenTelemetry. Além disso, o Alloy coleta métricas do
host e dos containers. Tudo vai para o Mimir.
api -> OTLP -> Alloy -> Mimir -> Grafana
containers -> cAdvisor -> Alloy -> Mimir -> Grafana
host -> node_exporter -> Alloy -> Mimir -> Grafana
A API envia traces com OpenTelemetry para o Alloy via OTLP gRPC. O Alloy
encaminha esses traces para o Tempo.
api -> OTLP -> Alloy -> Tempo -> Grafana
Em um clone novo, crie primeiro o arquivo .env:
cp .env.example .envDepois suba a stack:
just upSe quiser validar rapidamente:
just smoke
just traffic-scenarios 20 0.1just traffic 30 0.2Gera tráfego aleatório via/unstable.just traffic-scenarios 20 0.1Gera um ciclo determinístico deok -> warn -> slow -> error.just chaos 90 0.1Gera erros e lentidão de propósito para deixar dashboards e alertas bem visíveis.just calm 60 0.1Gera apenas tráfego saudável para ajudar alertas a se recuperarem.
just rules-load
just rules-list
just rules-state
just alert-demo 30 0.1No perfil de VPS, as recipes de alertas conversam com o mimir pela rede
interna do Docker, sem depender de uma porta pública:
just rules-load-prod
just rules-list-prod
just rules-state-prod
just alert-demo-prod 30 0.1- API: http://127.0.0.1:8000
- Grafana: http://127.0.0.1:3000
- Alloy admin/metrics: http://127.0.0.1:12345
GET /healthGET /unstableGET /scenario?mode=okGET /scenario?mode=warnGET /scenario?mode=errorGET /scenario?mode=slow&delay_ms=1500
Ao subir a stack, o Grafana já recebe automaticamente os datasources e estes dashboards:
LGTM Signals TourLGTM Demo OverviewLGTM Flight DeckVPS Health
Login padrão do Grafana no ambiente local:
- Usuário:
admin - Senha:
admin
- Grafana em
http://127.0.0.1:3000 - API em
http://127.0.0.1:8000 - ideal para aprender a stack e validar a instrumentação
- API pública via Traefik em
80/443 - Grafana privado em
${GRAFANA_BIND_IP}:${GRAFANA_BIND_PORT} - Loki, Tempo, Mimir e Alloy expostos apenas internamente
- bom para estudar sinais mais realistas e deploy privado do Grafana via WireGuard
| Superfície | Endereço/porta | Visibilidade | Motivo |
|---|---|---|---|
| Traefik HTTP | 0.0.0.0:80 |
Pública | desafio ACME + redirecionamento para HTTPS |
| Traefik HTTPS | 0.0.0.0:443 |
Pública | entrada pública da API |
| Porta da API | 8000 |
Interna | acessada pelo Traefik |
| Grafana UI | ${GRAFANA_BIND_IP}:${GRAFANA_BIND_PORT} |
Privada | superfície administrativa |
| node-exporter | 9100 |
Interna | métricas do host para o Alloy |
| Loki | 3100 |
Interna | backend |
| Tempo | 3200 |
Interna | backend |
| Mimir | 9009 |
Interna | backend |
| WireGuard | 51820/udp |
Peers autorizados | rede privada |