Files
janssen/CentralLogging/gateway/log_gateway_v1.0.md
T

58 lines
2.1 KiB
Markdown

# log_gateway — FastAPI brána pro centrální logování
**Verze:** 1.0 · **Datum:** 2026-06-08 · **Soubor:** `log_gateway_v1.0.py`
FastAPI služba, která přijímá logy od klientských skriptů a přeposílá je do
Grafana Loki přes jeho HTTP push API.
## Endpoints
| Metoda | Cesta | Popis |
|--------|---------------|--------------------------------------------------|
| GET | `/health` | liveness + dostupnost Loki (`/ready`) |
| POST | `/log/batch` | dávka záznamů (klient používá toto) |
| POST | `/log` | jeden záznam (query: `app_name`, `host`, `env`) |
Autorizace: hlavička `Authorization: Bearer <LOG_TOKEN>`.
## Payload `/log/batch`
```json
{
"app": "parse_emails_graph",
"host": "PC-VB",
"env": "prod",
"records": [
{"ts": 1780921433.81, "level": "ERROR", "msg": "bulk_write: ...",
"logger": "root", "func": "save_batch", "line": 542, "exc": "Traceback ..."}
]
}
```
Brána seskupí záznamy podle `(app, host, level, env)` do Loki streamů, převede
`ts` na nanosekundy, tělo řádku uloží jako JSON (kvůli `| json` v Grafaně) a
pošle na `POST {LOKI_URL}/loki/api/v1/push`.
## ENV
| ENV | Default | Popis |
|--------------|------------------------|------------------------------------|
| `LOKI_URL` | `http://loki:3100` | adresa Loki (uvnitř docker sítě) |
| `LOG_TOKEN` | `change-this-...` | sdílené tajemství (= klientův token)|
| `GATEWAY_ENV`| `prod` | výchozí label env, když klient neuvede|
## Lokální běh (mimo docker)
```bash
pip install -r requirements.txt
LOKI_URL=http://192.168.1.76:3100 LOG_TOKEN=tajne \
uvicorn log_gateway_v1.0:app --host 0.0.0.0 --port 8770
```
## Návrhové poznámky
- Labely držíme nízkokardinální (`ALLOWED_LABELS`). Nikdy nedávat do labelů
např. ID zprávy / pacienta — explodovala by kardinalita sérií v Loki.
- Při chybě Loki vrací brána 502; klient si záznam uloží do spoolu a zkusí
znovu → data se neztratí.