fix(gpu): fauler Input killte telegraf — nvidia_smi nur bei echtem nvidia-smi, Intel ohne GPU-Input, Selbstheilung bei Startfehler

This commit is contained in:
mm committed 2026-09-13 20:48:52 +02:00
1 parent c7a08f2489
commit 090984e7f9
2 files changed
+48 -27

No files matched your search

+26 -4
View File
@@ -255,9 +255,16 @@ esac
[ "$HAS_APACHE" -eq 1 ] && [ "$ROLE" != "apache" ] && { fetch_conf telegraf/apache.conf /etc/telegraf/telegraf.d/apache.conf; usermod -aG adm telegraf 2>/dev/null || true; }
# --- GPU (nur wenn erkannt) ---
# Jeder Block wird NUR geschrieben, wenn das jeweilige Werkzeug wirklich da ist.
# Ein Input ohne Binary laesst Telegraf beim Start hart scheitern -> alle Metriken aus.
case "$GPU" in
nvidia)
fetch telegraf/gpu.conf /etc/telegraf/telegraf.d/gpu.conf
cat > /etc/telegraf/telegraf.d/gpu.conf <<'EOF'
[[inputs.nvidia_smi]]
timeout = "10s"
[inputs.nvidia_smi.tagdrop]
compute_mode = ["*"]
EOF
log "NVIDIA-GPU erkannt: inputs.nvidia_smi aktiv."
;;
amd)
@@ -266,6 +273,7 @@ case "$GPU" in
# KEIN name_override: das Script liefert die Metriknamen selbst
# (gpu_utilization_gpu, gpu_temperature_edge, ...). name_override wuerde
# alle Werte zu "gpu" kollabieren -> in Prometheus nur noch gpu_value.
# data_format = prometheus: mit "influx" haengt Telegraf "_value" an den Namen.
cat > /etc/telegraf/telegraf.d/gpu.conf <<'EOF'
[[inputs.exec]]
interval = "30s"
@@ -276,8 +284,9 @@ EOF
log "AMD-GPU erkannt: rocm-smi-exec-Input aktiv."
;;
intel)
fetch telegraf/gpu.conf /etc/telegraf/telegraf.d/gpu.conf
log "Intel-GPU (/dev/dri) erkannt: Hinweis — intel_gpu_top wird nicht automatisch erfasst."
# Bewusst KEIN GPU-Input: intel_gpu_top liefert kein Prometheus/Influx-Format
# und ein nvidia_smi-Block ohne nvidia-smi wuerde Telegraf killen.
log "Intel-GPU (/dev/dri) erkannt: kein GPU-Input aktiviert (intel_gpu_top wird nicht erfasst)."
;;
*) : ;;
esac
@@ -296,7 +305,20 @@ if command -v systemctl >/dev/null && [ -d /run/systemd/system ]; then
systemctl enable --now telegraf >/dev/null
systemctl restart telegraf
sleep 3
systemctl is-active --quiet telegraf || { journalctl -u telegraf -n 20 --no-pager; die "telegraf läuft nicht."; }
if ! systemctl is-active --quiet telegraf; then
journalctl -u telegraf -n 20 --no-pager
# Haeufigste Ursache: ein aktivierter Input, dessen Binary fehlt
# (z.B. nvidia_smi ohne nvidia-smi). GPU-Conf verwerfen und erneut versuchen.
if [ -f /etc/telegraf/telegraf.d/gpu.conf ]; then
log "Start fehlgeschlagen — entferne GPU-Conf und versuche erneut."
rm -f /etc/telegraf/telegraf.d/gpu.conf
systemctl reset-failed telegraf 2>/dev/null || true
systemctl restart telegraf
sleep 3
fi
systemctl is-active --quiet telegraf || die "telegraf läuft nicht. journalctl -u telegraf -n 30 prüfen."
log "WARNUNG: Telegraf läuft, aber ohne GPU-Metriken (Input-Binary fehlte)."
fi
elif command -v systemctl >/dev/null; then
log "HINWEIS: systemd nicht aktiv (Container/Chroot) — Dienst wird beim nächsten Boot gestartet (enabled)."
systemctl enable telegraf >/dev/null 2>&1 || true
+22 -23
View File
@@ -1,24 +1,23 @@
# GPU-Metriken (Auto-Erkennung: NVIDIA / AMD / Intel)
# GPU-Metriken — Vorlage.
#
# Der Installer bindet diese Datei nur ein, wenn auf dem Host eine GPU
# erkannt wurde. Fehlt der Treiber, laeuft der Rest unveraendert weiter.
# --- NVIDIA (nvidia-smi) ---
[[inputs.nvidia_smi]]
timeout = "10s"
# Liefert u.a.: utilization_gpu, utilization_memory, memory_total, memory_used,
# memory_free, temperature_gpu, power_draw, power_limit, fan_speed,
# clocks_current_graphics, clocks_current_memory, pstate, name (Tag)
[inputs.nvidia_smi.tagdrop]
compute_mode = ["*"]
# --- AMD (rocm-smi) ---
# Aktivieren, wenn `rocm-smi` vorhanden ist. Der Installer prueft das.
# WICHTIG: kein name_override — das Script liefert die Metriknamen selbst
# (gpu_utilization_gpu, gpu_temperature_edge, gpu_power_draw, gpu_memory_*).
# name_override = "gpu" wuerde alle Werte zu einer Serie kollabieren.
# [[inputs.exec]]
# interval = "30s"
# timeout = "20s"
# data_format = "prometheus"
# commands = ["/etc/telegraf/gpu-rocm.sh"]
# WICHTIG: Diese Datei wird vom Installer NICHT einfach aktiviert, sondern
# generiert (siehe install.sh). Ein aktiver [[inputs.nvidia_smi]]-Block ohne
# installiertes nvidia-smi laesst Telegraf beim Start HART scheitern
# ("executable file not found in $PATH") — dann laufen auch alle anderen
# Inputs nicht mehr.
#
# NVIDIA (nur wenn nvidia-smi vorhanden):
# [[inputs.nvidia_smi]]
# timeout = "10s"
# [inputs.nvidia_smi.tagdrop]
# compute_mode = ["*"]
#
# AMD (nur wenn rocm-smi vorhanden) — Script liefert Prometheus-Format:
# [[inputs.exec]]
# interval = "30s"
# timeout = "20s"
# data_format = "prometheus"
# commands = ["/etc/telegraf/gpu-rocm.sh"]
#
# Intel (/dev/dri): nvidia_smi nicht verwenden! intel_gpu_top wird nicht
# automatisch erfasst — es wird bewusst KEIN GPU-Input aktiviert.