ArchiveBox-Telemetrie: Exporteur + Telegraf-Container fuer Knoten ohne sudo

archibald hat kein sudo und kein linger, aber Docker-Gruppe. Muster wie
bei der llama-swap-Telemetrie auf dem ROG: ein Nutzer-Cron fuehrt den
Exporteur aus, Telegraf laeuft als Container daneben und pusht per
Remote Write zum Collector im Mesh.

- scripts/archivebox-telemetrie.py: liest die ArchiveBox-Logs und die
  SQLite-DB IM Container (Host-User mm darf index.sqlite3 nicht oeffnen,
  Container-User 911 schon) und schreibt eine Prometheus-Exposition.
  Kein node-Label -- das setzt Telegraf per global_tags.
- scripts/install-archivebox-telemetrie.sh: installiert Exporteur,
  Cron-Eintrag (jede Minute) und den Container, mit --dry-run.
- stacks/telegraf-container/: telegraf 1.39, network_mode host,
  inputs.file (data_format prometheus), outputs.prometheus_remote_write.
This commit is contained in:
kalina committed 2026-10-10 23:26:19 +02:00
1 parent 235cbc68dc
commit 6b169c77e6
4 files changed
+376

No files matched your search

@@ -0,0 +1,32 @@
# =============================================================================
# Telegraf als CONTAINER auf einem Knoten OHNE sudo.
#
# Fuer Knoten mit System-Telegraf ist install.sh der richtige Weg; hier genuegt
# die Docker-Gruppe, weil nur die fertige .prom-Datei gelesen und per Remote
# Write gepusht wird. Kein /hostfs, kein docker.sock, kein privileged -- nichts
# davon braucht eine dateibasierte App-Metrik.
#
# Werte kommen aus der Umgebung (Telegraf expandiert ${...} beim Laden), damit
# kein Geheimnis und keine IP doppelt im Repo steht.
# =============================================================================
services:
telegraf:
image: telegraf:1.39 # gleiche Version wie der Collector (imac)
container_name: telegraf-archibald
restart: unless-stopped
# host-Netz: derselbe Weg, den ein curl auf dem Host zum Collector nimmt.
# Ueber eine Bridge kaeme ein zusaetzlicher NAT/forward-Hop hinzu, der in
# NetBird-Firewall-Regeln haengenbleiben kann.
network_mode: host
environment:
NODE_NAME: archibald
# Direkter Mesh-Weg, kein Reverse-Proxy: der Collector laeuft mit
# --web.enable-remote-write-receiver und OHNE web.config.file, also ohne
# Auth. Ueber den Proxy-Weg waere ein Bearer-Token noetig.
PROM_URL: http://100.83.134.46:9090/api/v1/write
volumes:
- ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
# VERZEICHNIS-Mount, bewusst kein Datei-Mount: der Cron-Exporteur ersetzt
# die .prom-Datei atomar per mv -- ein Datei-Mount haette danach weiter
# den alten Inode und lieferte still veraltete Werte.
- /home/mm/abx-telemetrie:/var/lib/abx-prom:ro
+44
View File
@@ -0,0 +1,44 @@
# =============================================================================
# Telegraf-Konfiguration fuer einen CONTAINER-Knoten ohne sudo.
#
# Variablen kommen aus der Container-Umgebung (docker-compose `environment`),
# NICHT aus /etc/default/telegraf -- das gibt es auf solchen Knoten nicht.
# =============================================================================
[global_tags]
node = "${NODE_NAME}"
[agent]
# Der Exporteur schreibt einmal pro Minute; 60 s Abtastung ist das Maximum,
# das keine Werte doppelt sieht. Jitter, damit Cron-Schreiben und Abtastung
# nicht im Gleichtakt kollidieren.
interval = "60s"
flush_interval = "60s"
collection_jitter = "5s"
hostname = "${NODE_NAME}"
omit_hostname = false
# Reserve fuer Ausfaelle: Telegraf puffert nur, solange der Push scheitert.
metric_buffer_limit = 200000
# Der Cron-Exporteur schreibt die .prom-Datei atomar (mv).
# data_format = "prometheus" ist PFLICHT: das Skript besitzt seine Metriknamen
# schon. Mit "influx" bekaeme jede Serie ein _value-Suffix (oder der Parser
# scheiterte ganz) und jedes Panel bliebe leer, ohne Fehlermeldung.
[[inputs.file]]
files = ["/var/lib/abx-prom/abx.prom"]
data_format = "prometheus"
# ---- Metriken -> Prometheus Remote Write (Collector imac) ----
[[outputs.http]]
url = "${PROM_URL}"
data_format = "prometheusremotewrite"
timeout = "60s"
# Ein 400 ist PERMANENT: dieselbe Nutzlast liefert dieselbe Antwort. Ohne
# diese Liste bleibt der abgelehnte Batch als FIFO-Kopf stehen, wird endlos
# wiederholt und blockiert jede dahinter gesammelte Serie.
non_retryable_statuscodes = [400, 409, 413, 422]
[outputs.http.headers]
Content-Type = "application/x-protobuf"
Content-Encoding = "snappy"
X-Prometheus-Remote-Write-Version = "0.1.0"
# Kein Authorization-Header: direkter Mesh-Weg ohne Auth (siehe compose).