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:
1 parent
235cbc68dc
commit
6b169c77e6
4 files changed
+376
No files matched your search
Executable
+90
@@ -0,0 +1,90 @@
|
||||
#!/bin/sh
|
||||
# =============================================================================
|
||||
# ArchiveBox-Runner-Telemetrie auf einem Knoten OHNE sudo einrichten.
|
||||
#
|
||||
# Drei Teile, alle ohne Root:
|
||||
# 1. Exporteur-Skript nach ~/bin (liest Logs + DB im Container, schreibt .prom)
|
||||
# 2. Cron-Eintrag (jede Minute) -- der Cron-Daemon des Hosts, kein Nutzer-Timer
|
||||
# (linger=no wuerde Nutzer-Units beim Abmelden abraeumen)
|
||||
# 3. Telegraf-Container (Docker-Gruppe) mit Remote Write an den Collector
|
||||
#
|
||||
# Aufruf: sh install-archivebox-telemetrie.sh [--dry-run]
|
||||
# Vorbedingungen: python3, docker (Docker-Gruppe), cron laufen.
|
||||
# =============================================================================
|
||||
set -eu
|
||||
|
||||
DRY="${1:-}"
|
||||
NODE="${NODE_NAME:-archibald}"
|
||||
HOME_DIR="${HOME:-/home/mm}"
|
||||
BIN="$HOME_DIR/bin/archivebox-telemetrie.py"
|
||||
STACK_DIR="$HOME_DIR/stacks/telegraf-archibald"
|
||||
PROM_URL="${PROM_URL:-http://100.83.134.46:9090/api/v1/write}"
|
||||
|
||||
say() { printf '%s\n' "$*"; }
|
||||
run() {
|
||||
if [ "$DRY" = "--dry-run" ]; then say "DRY: $*"; else eval "$@"; fi
|
||||
}
|
||||
|
||||
say "== Vorbedingungen =="
|
||||
for c in python3 docker crontab; do
|
||||
command -v "$c" >/dev/null 2>&1 || { say "FEHLER: $c fehlt"; exit 1; }
|
||||
say "ok: $c -> $(command -v "$c")"
|
||||
done
|
||||
docker ps >/dev/null 2>&1 || { say "FEHLER: Docker nicht nutzbar (Gruppe?)"; exit 1; }
|
||||
say "ok: Docker nutzbar"
|
||||
|
||||
say "== 1. Exporteur =="
|
||||
run "mkdir -p '$HOME_DIR/bin' '$HOME_DIR/abx-telemetrie'"
|
||||
run "chmod 755 '$HOME_DIR/abx-telemetrie'"
|
||||
if [ "$DRY" != "--dry-run" ]; then
|
||||
here=$(cd "$(dirname "$0")" && pwd)
|
||||
run "cp '$here/archivebox-telemetrie.py' '$BIN'"
|
||||
run "chmod 755 '$BIN'"
|
||||
fi
|
||||
|
||||
say "== 2. Cron (jede Minute, idempotent) =="
|
||||
LINE="* * * * * LC_ALL=C /usr/bin/python3 $BIN >/dev/null 2>&1"
|
||||
if [ "$DRY" = "--dry-run" ]; then
|
||||
say "DRY: crontab-Zeile -> $LINE"
|
||||
else
|
||||
tmp=$(mktemp)
|
||||
crontab -l 2>/dev/null | grep -v 'archivebox-telemetrie.py' > "$tmp" || true
|
||||
printf '%s\n' "$LINE" >> "$tmp"
|
||||
crontab "$tmp"
|
||||
rm -f "$tmp"
|
||||
say "crontab jetzt:"
|
||||
crontab -l | sed 's/^/ /'
|
||||
fi
|
||||
|
||||
say "== 3. Telegraf-Container =="
|
||||
run "mkdir -p '$STACK_DIR'"
|
||||
here=$(cd "$(dirname "$0")" && pwd)
|
||||
if [ "$DRY" != "--dry-run" ]; then
|
||||
run "cp '$here/../stacks/telegraf-container/docker-compose.yml' '$STACK_DIR/'"
|
||||
run "cp '$here/../stacks/telegraf-container/telegraf.conf' '$STACK_DIR/'"
|
||||
# NODE_NAME/PROM_URL aus der Datei gegen die hier gesetzten Werte stellen.
|
||||
run "sed -i \"s|NODE_NAME: .*|NODE_NAME: $NODE|\" '$STACK_DIR/docker-compose.yml'"
|
||||
run "sed -i \"s|PROM_URL: .*|PROM_URL: $PROM_URL|\" '$STACK_DIR/docker-compose.yml'"
|
||||
fi
|
||||
|
||||
say "== Probelauf des Exporteurs =="
|
||||
if [ "$DRY" != "--dry-run" ]; then
|
||||
run "/usr/bin/python3 '$BIN'"
|
||||
say "--- $HOME_DIR/abx-telemetrie/abx.prom (Kopf) ---"
|
||||
head -20 "$HOME_DIR/abx-telemetrie/abx.prom"
|
||||
fi
|
||||
|
||||
say "== Container starten =="
|
||||
if [ "$DRY" != "--dry-run" ]; then
|
||||
( cd "$STACK_DIR" && docker compose up -d )
|
||||
sleep 20
|
||||
docker logs --since 60s telegraf-archibald 2>&1 | grep -c 'E!' | sed 's/^/ E!-Zeilen: /'
|
||||
docker exec telegraf-archibald sh -c 'cat /var/lib/abx-prom/abx.prom | head -3' \
|
||||
| sed 's/^/ Container sieht: /'
|
||||
fi
|
||||
|
||||
say ""
|
||||
say "== Abnahme (auf dem Collector ausfuehren) =="
|
||||
say "curl -s --data-urlencode 'query=archivebox_telemetrie_timestamp_seconds' http://<collector>:9090/api/v1/query"
|
||||
say "curl -s --data-urlencode 'query=count by (node)(archivebox_runner_up)' http://<collector>:9090/api/v1/query"
|
||||
say "OK -- Knoten $NODE eingerichtet."
|
||||
Reference in new issue
Block a user