llmrouter README: die vier Wege ins Log (stats, zuordnung, jsonl/changes/sqlite, Journal)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 16:23:26 +02:00
committed by andreas
co-authored by Claude Fable 5.1
parent 91e68d9ea9
commit dcdfb1bc9e
+41 -7
View File
@@ -133,17 +133,51 @@ Der erste Lauf mit leerem State prüft jeden Alias unter Last, das ist gewollt.
## Log und Statistik ## Log und Statistik
Je Anfrage eine Zeile in `log/requests.jsonl` und in `log/requests.sqlite`: Je Anfrage eine Zeile in `log/requests.jsonl` und in `log/requests.sqlite`:
Key, Alias, angefragter Name, tatsächliches Modell, Effort, Tokens Key, angefragter Name, aufgelöster Alias, tatsächliches Modell, Effort, Pfad,
(prompt/completion/cached), **Kosten wie von OpenRouter gemeldet** Status, Dauer, Tokens (prompt/completion/cached), **Kosten wie von OpenRouter
(`usage.cost`, auch im Stream über den letzten Chunk). Lokale Upstreams haben gemeldet** (`usage.cost`, auch im Stream über den letzten Chunk und über den
keine Kosten, das Feld bleibt leer, wir erfinden keine Preise. Messages-Endpunkt). Lokale Upstreams und die LiteLLM-Durchreiche haben keine
Kosten, das Feld bleibt leer, wir erfinden keine Preise. Die Antwort trägt
`x-llmrouter-model`, damit ein Client sieht, was wirklich lief.
### Vier Wege ins Log
**1. Statistik je Tag und Key** — vom Mac aus, Admin-Key aus OpenBao
(`jessie/llmrouter admin_key`):
```bash ```bash
bun run src/stats.ts 7 # Tag × Key: Anfragen, Tokens, Kosten, Modelle curl -s "http://llm.lan:4010/stats?days=7" \
curl -H "Authorization: Bearer $ADMIN_KEY" http://llm.lan:4010/stats?days=7 -H "Authorization: Bearer $(~/.agents/bin/secret get jessie llmrouter admin_key)" | python3 -m json.tool
``` ```
Die Antwort trägt `x-llmrouter-model`, damit ein Client sieht, was wirklich lief. **2. Aktuelle Zuordnung** — konfigurierte Aliasse und alle bisher angefragten
`alt/`-Referenzen mit Ziel, Effort, Indexen, Preis und Zeitpunkt:
```bash
curl -s http://llm.lan:4010/zuordnung \
-H "Authorization: Bearer $(~/.agents/bin/secret get jessie llmrouter admin_key)" | python3 -m json.tool
```
**3. Einzelne Anfragen** auf dem Host (LXC 185020, `/srv/llmrouter/log`):
```bash
ssh s18p1.lan 'pct exec 185020 -- tail -20 /srv/llmrouter/log/requests.jsonl'
ssh s18p1.lan 'pct exec 185020 -- cat /srv/llmrouter/log/changes.log' # jeder Modellwechsel der Auflösung
ssh s18p1.lan 'pct exec 185020 -- bash -c "cd /srv/llmrouter && ./llmrouter-stats 7"' # Tagesstatistik als Tabelle
```
`requests.sqlite` steht für eigene Abfragen offen (Tabelle `requests`, Spalten
wie die JSONL-Felder).
**4. Dienst-Journal** — Start, Auffrischen, abgewiesene Keys (401 mit
Key-Länge und Präfix), Upstream-Fehler:
```bash
ssh s18p1.lan 'pct exec 185020 -- journalctl -u llmrouter -n 50 --no-pager -o cat'
```
Manuell auffrischen: `POST /auffrischen` mit Admin-Key startet den vollen
Lauf (Preise neu, Aliasse mit Last-Probe bei Wechsel, `alt/`-Einträge neu).
## Betrieb ## Betrieb