llama-swap-Telemetrie als Nutzer-Instanz (Knoten ohne sudo)

Warum: llama-swap laeuft als Nutzer-Unit. Der System-Telegraf liest das
Systemjournal mit priority>=warning und liest damit keine einzige
llama-swap-INFO-Zeile - Loki hatte fuer den ROG null Zeilen. Ausserdem kann
die System-Instanz auf einem Knoten ohne sudo nicht erweitert werden.

- scripts/llamaswap-telemetrie.py: Token/Anfragen je Modell aus llama-swaps
  Statistik-API plus llama.cpp /metrics je laufendem Profil (Ports sind
  dynamisch, deshalb kein statischer Scrape)
- scripts/llamaswap-logs.py: Nutzer-Journal (llama-swap, kalina-backends)
  nach Loki, gleiche Zeilenform wie journal-tail.sh
- telegraf/llamaswap-user.conf + .service: Zugangsdaten per
  EnvironmentFile=/etc/default/telegraf, keine Token-Kopie
- scripts/install-llamaswap-user.sh: idempotente Installation mit --dry-run
  und Konfigurationspruefung
This commit is contained in:
mm committed 2026-10-10 22:25:18 +02:00
1 parent 59ab6a9a22
commit 235cbc68dc
6 files changed
+646

No files matched your search

+42
View File
@@ -545,6 +545,48 @@ Wer kein sudo hat, aber in der Gruppe `docker` ist: Container-Variante aus
[netbird-observability/stacks/telegraf-node](https://gitea.m-m.bio/mm/netbird-observability) (privates Repo).
Dort ist `network_mode: host` gesetzt — ohne das sieht Telegraf nur `lo`+`eth0` statt der echten Interfaces.
## llama-swap-Telemetrie ohne sudo (Nutzer-Instanz)
Für Knoten, die eine lokale Inferenz-Landschaft über **llama-swap** anbieten und
**kein sudo** haben (ROG). Die System-Instanz dieses Installers kann dort nicht
greifen — und sie würde llama-swap auch nicht sichtbar machen: llama-swap läuft
als **User**-Unit, seine INFO-Zeilen liegen im Nutzer-Journal, und
`journal-tail.sh` liest das Systemjournal mit `priority >= warning`. Ergebnis
vorher: null llama-swap-Zeilen in Loki.
```sh
# auf dem Zielknoten, als der Nutzer, dem llama-swap gehört
sh scripts/install-llamaswap-user.sh
# Optionen: --raw <basis-url> (Dateien vom Repo laden) --dry-run
```
Was die Nutzer-Instanz holt:
| Quelle | Weg | Inhalt |
|---|---|---|
| `llama-swap:9300/metrics` | `inputs.prometheus` | Host (CPU je Kern, RAM, Netz), GPU (Auslastung, VRAM, Temperatur, Leistung) |
| `/api/metrics/stats?model=<id>` | `inputs.exec` → `llamaswap-telemetrie.py` | Token/Anfragen/Cache **je Modell** — auch für Modelle ohne `/metrics` (strata-Engine, sd-server) |
| `http://<upstream>/metrics` | dito | Token je **laufendem** Profil aus llama.cpp (nur mit `--metrics`) |
| `journalctl --user-unit …` | `inputs.exec` → `llamaswap-logs.py` | Logs von llama-swap und kalina-backends für Loki |
Voraussetzungen, die llama-swap selbst erfüllen muss:
* **`--metrics` in den Startbefehlen** — llama.cpp liefert `/metrics` nur mit
diesem Schalter (sonst HTTP 501). Für `model-manager.sh`, die Inline-`cmd`s in
`llama-swap.yaml` und eigene Startskripte.
* **`store.path` in `llama-swap.yaml`** — ohne Datei-Store hält llama-swap die
Aktivität nur im RAM und kürzt sie nach `metricsMaxInMemory`; Token-Summen
wären dann ein rollendes Fenster. Mit Store sind sie dauerhaft (SQLite).
Zugangsdaten bleiben dort, wo der Knoten-Installer sie hingelegt hat:
`EnvironmentFile=/etc/default/telegraf` für die Unit, `${PROM_URL}` /
`${LOKI_URL}` / `${TELEGRAF_TOKEN}` in der Konfiguration. Kein Kopieren von
Token. Ohne `linger` endet die Unit mit der Sitzung — `loginctl enable-linger $USER`.
Grafana: Dashboard **llama-swap (ROG)** (`uid: llama-swap-rog`) in
`netbird-observability/stacks/central-imac/dashboards/llama-swap.json`.
## Error-Logs (seit 1.3.0)
Apache schreibt **zwei** Logarten mit **verschiedenen** Formaten: