feat: GPU-Auto-Erkennung (nvidia_smi, rocm-smi); Testserver-Aufraeumen dokumentiert

This commit is contained in:
mm committed 2026-09-13 20:11:26 +02:00
1 parent eb5d8b9033
commit a19bd82189
5 files changed
+122 -13

No files matched your search

+66 -13
View File
@@ -22,7 +22,12 @@
# ============================================================================
set -eu
COLLECTOR="${COLLECTOR:-100.83.134.46}"
# Ausgang ueber den NetBird-Reverse-Proxy: funktioniert auch fuer Hosts, die
# KEIN NetBird-Peer sind (Büro-LAN, Kundenlaptop, CGNAT). Token erforderlich.
PROM_URL_DEFAULT="https://imac-prometheus.x05.idx.wf/api/v1/write"
LOKI_URL_DEFAULT="https://imac-loki.x05.idx.wf"
COLLECTOR="${COLLECTOR:-}" # nur setzen fuer den Direktweg im NetBird
TELEGRAF_TOKEN="${TELEGRAF_TOKEN:-}"
NODE_NAME="${NODE_NAME:-$(hostname -s 2>/dev/null || hostname)}"
ROLE="auto"
PVE_TOKEN="${PVE_TOKEN:-}"
@@ -34,7 +39,8 @@ UNINSTALL=0
while [ $# -gt 0 ]; do
case "$1" in
--name) NODE_NAME="$2"; shift 2 ;;
--collector) COLLECTOR="$2"; shift 2 ;;
--collector) COLLECTOR="${2:-}"; shift 2 ;;
--token) TELEGRAF_TOKEN="$2"; shift 2 ;;
--role) ROLE="$2"; shift 2 ;;
--pve-token) PVE_TOKEN="$2"; shift 2 ;;
--apache-log) APACHE_LOG="$2"; shift 2 ;;
@@ -48,6 +54,14 @@ log() { printf '\033[1;34m[netbird-telegraf]\033[0m %s\n' "$*"; }
die() { printf '\033[1;31m[netbird-telegraf] FEHLER:\033[0m %s\n' "$*" >&2; exit 1; }
[ "$(id -u)" -eq 0 ] || die "Bitte als root ausführen (sudo)."
[ -n "$TELEGRAF_TOKEN" ] || die "Kein Token: --token <Bearer-Token> angeben (siehe README)."
if [ -n "${COLLECTOR:-}" ]; then
PROM_URL="http://$COLLECTOR:9090/api/v1/write"; LOKI_URL="http://$COLLECTOR:3100"
log "Direktweg im NetBird: Collector $COLLECTOR"
else
PROM_URL="$PROM_URL_DEFAULT"; LOKI_URL="$LOKI_URL_DEFAULT"
fi
# --------------------------------------------------------------------------
# Uninstall
@@ -80,22 +94,31 @@ esac
IS_PVE=0; command -v pveversion >/dev/null 2>&1 && IS_PVE=1
HAS_DOCKER=0; [ -S /var/run/docker.sock ] && HAS_DOCKER=1
GPU="none"
if command -v nvidia-smi >/dev/null 2>&1 && nvidia-smi -L >/dev/null 2>&1; then
GPU="nvidia"
elif command -v rocm-smi >/dev/null 2>&1; then
GPU="amd"
elif [ -e /dev/dri/renderD128 ]; then
GPU="intel"
fi
HAS_APACHE=0; { command -v apache2ctl >/dev/null 2>&1 || command -v httpd >/dev/null 2>&1; } && HAS_APACHE=1
if [ "$ROLE" = "auto" ]; then
ROLE="none"
[ "$IS_PVE" -eq 1 ] && ROLE="proxmox"
fi
log "Node=$NODE_NAME OS=$OS_ID Arch=$ARCH Rolle=$ROLE Docker=$HAS_DOCKER Apache=$HAS_APACHE Collector=$COLLECTOR"
log "Node=$NODE_NAME OS=$OS_ID Arch=$ARCH Rolle=$ROLE Docker=$HAS_DOCKER Apache=$HAS_APACHE GPU=$GPU Collector=$COLLECTOR"
# --------------------------------------------------------------------------
# Erreichbarkeit des Collectors (NetBird Lazy Connection: erst anklopfen)
# --------------------------------------------------------------------------
if command -v curl >/dev/null; then
ping -c1 -W2 "$COLLECTOR" >/dev/null 2>&1 || true
if curl -fsS -m 8 "http://$COLLECTOR:9090/-/ready" >/dev/null 2>&1; then
log "Collector erreichbar."
HOST_OF_URL="$(printf '%s' "$PROM_URL" | sed -E 's#^https?://([^/:]+).*#\1#')"
ping -c1 -W2 "$HOST_OF_URL" >/dev/null 2>&1 || true # NetBird Lazy Connection wecken
if curl -fsS -m 10 -H "Authorization: Bearer $TELEGRAF_TOKEN" "${PROM_URL%/api/v1/write}/-/ready" >/dev/null 2>&1; then
log "Collector erreichbar (auth ok): $PROM_URL"
else
log "WARNUNG: http://$COLLECTOR:9090 nicht erreichbar. NetBird auf dieser Node verbunden? (netbird status) — Installation läuft weiter, Telegraf puffert und retried."
log "WARNUNG: $PROM_URL nicht erreichbar oder Token falsch — Installation läuft weiter, Telegraf puffert und retried."
fi
fi
@@ -184,9 +207,10 @@ mkdir -p /etc/telegraf/telegraf.d /etc/default
umask 077
cat > /etc/default/telegraf <<EOF
NODE_NAME=$NODE_NAME
COLLECTOR=$COLLECTOR
PROM_URL=http://$COLLECTOR:9090/api/v1/write
LOKI_URL=http://$COLLECTOR:3100
COLLECTOR=${COLLECTOR:-}
PROM_URL=$PROM_URL
LOKI_URL=$LOKI_URL
TELEGRAF_TOKEN=$TELEGRAF_TOKEN
PVE_TOKEN=$PVE_TOKEN
APACHE_LOG=$APACHE_LOG
EOF
@@ -204,6 +228,32 @@ case "$ROLE" in
*) die "Unbekannte Rolle: $ROLE" ;;
esac
[ "$HAS_APACHE" -eq 1 ] && [ "$ROLE" != "apache" ] && { fetch apache.conf /etc/telegraf/telegraf.d/apache.conf; usermod -aG adm telegraf 2>/dev/null || true; }
# --- GPU (nur wenn erkannt) ---
case "$GPU" in
nvidia)
fetch gpu.conf /etc/telegraf/telegraf.d/gpu.conf
log "NVIDIA-GPU erkannt: inputs.nvidia_smi aktiv."
;;
amd)
fetch gpu-rocm.sh /etc/telegraf/gpu-rocm.sh
chmod 0755 /etc/telegraf/gpu-rocm.sh
cat > /etc/telegraf/telegraf.d/gpu.conf <<'EOF'
[[inputs.exec]]
commands = ["/etc/telegraf/gpu-rocm.sh"]
interval = "30s"
timeout = "20s"
data_format = "influx"
name_override = "gpu"
EOF
log "AMD-GPU erkannt: rocm-smi-exec-Input aktiv."
;;
intel)
fetch gpu.conf /etc/telegraf/telegraf.d/gpu.conf
log "Intel-GPU (/dev/dri) erkannt: Hinweis — intel_gpu_top wird nicht automatisch erfasst."
;;
*) : ;;
esac
chown -R telegraf:telegraf /etc/telegraf 2>/dev/null || true
# Konfig testen
@@ -228,6 +278,9 @@ elif command -v rc-update >/dev/null; then
rc-service telegraf restart >/dev/null 2>&1 || log "HINWEIS: OpenRC nicht aktiv (Container?) — Dienst beim nächsten Boot."
fi
log "OK — Node '$NODE_NAME' liefert an http://$COLLECTOR:9090 (Metriken) und :3100 (Logs)."
log "Prüfen: curl -s 'http://$COLLECTOR:9090/api/v1/query?query=system_uptime{node=\"$NODE_NAME\"}'"
log "Grafana: http://$COLLECTOR:3000 (nur im NetBird)"
PROM_BASE="$(printf '%s' "$PROM_URL" | sed -E 's#/api/v1/write/?$##')"
[ "$GPU" != "none" ] && log "GPU=$GPU erfasst. Hinweis: im Docker-Betrieb muss der GPU-Treiber im Container verfuegbar sein (nvidia-container-toolkit bzw. /dev/dri-Mount); im systemd-Betrieb ist das automatisch der Fall."
log "OK — Node '$NODE_NAME' liefert an $PROM_URL (Metriken) und $LOKI_URL (Logs)."
log "Prüfen: curl -s -H 'Authorization: Bearer <TOKEN>' '$PROM_BASE/api/v1/query?query=system_uptime{node=\"$NODE_NAME\"}'"
log "Grafana: http://100.83.134.46:3000 (nur im NetBird)"