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; } [ "$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) --- # --- 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 case "$GPU" in
nvidia) 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." log "NVIDIA-GPU erkannt: inputs.nvidia_smi aktiv."
;; ;;
amd) amd)
@@ -266,6 +273,7 @@ case "$GPU" in
# KEIN name_override: das Script liefert die Metriknamen selbst # KEIN name_override: das Script liefert die Metriknamen selbst
# (gpu_utilization_gpu, gpu_temperature_edge, ...). name_override wuerde # (gpu_utilization_gpu, gpu_temperature_edge, ...). name_override wuerde
# alle Werte zu "gpu" kollabieren -> in Prometheus nur noch gpu_value. # 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' cat > /etc/telegraf/telegraf.d/gpu.conf <<'EOF'
[[inputs.exec]] [[inputs.exec]]
interval = "30s" interval = "30s"
@@ -276,8 +284,9 @@ EOF
log "AMD-GPU erkannt: rocm-smi-exec-Input aktiv." log "AMD-GPU erkannt: rocm-smi-exec-Input aktiv."
;; ;;
intel) intel)
fetch telegraf/gpu.conf /etc/telegraf/telegraf.d/gpu.conf # Bewusst KEIN GPU-Input: intel_gpu_top liefert kein Prometheus/Influx-Format
log "Intel-GPU (/dev/dri) erkannt: Hinweis — intel_gpu_top wird nicht automatisch erfasst." # 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 esac
@@ -296,7 +305,20 @@ if command -v systemctl >/dev/null && [ -d /run/systemd/system ]; then
systemctl enable --now telegraf >/dev/null systemctl enable --now telegraf >/dev/null
systemctl restart telegraf systemctl restart telegraf
sleep 3 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 elif command -v systemctl >/dev/null; then
log "HINWEIS: systemd nicht aktiv (Container/Chroot) — Dienst wird beim nächsten Boot gestartet (enabled)." log "HINWEIS: systemd nicht aktiv (Container/Chroot) — Dienst wird beim nächsten Boot gestartet (enabled)."
systemctl enable telegraf >/dev/null 2>&1 || true 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 # WICHTIG: Diese Datei wird vom Installer NICHT einfach aktiviert, sondern
# erkannt wurde. Fehlt der Treiber, laeuft der Rest unveraendert weiter. # generiert (siehe install.sh). Ein aktiver [[inputs.nvidia_smi]]-Block ohne
# installiertes nvidia-smi laesst Telegraf beim Start HART scheitern
# --- NVIDIA (nvidia-smi) --- # ("executable file not found in $PATH") — dann laufen auch alle anderen
[[inputs.nvidia_smi]] # Inputs nicht mehr.
timeout = "10s" #
# Liefert u.a.: utilization_gpu, utilization_memory, memory_total, memory_used, # NVIDIA (nur wenn nvidia-smi vorhanden):
# memory_free, temperature_gpu, power_draw, power_limit, fan_speed, # [[inputs.nvidia_smi]]
# clocks_current_graphics, clocks_current_memory, pstate, name (Tag) # timeout = "10s"
[inputs.nvidia_smi.tagdrop] # [inputs.nvidia_smi.tagdrop]
compute_mode = ["*"] # compute_mode = ["*"]
#
# --- AMD (rocm-smi) --- # AMD (nur wenn rocm-smi vorhanden) — Script liefert Prometheus-Format:
# Aktivieren, wenn `rocm-smi` vorhanden ist. Der Installer prueft das. # [[inputs.exec]]
# WICHTIG: kein name_override — das Script liefert die Metriknamen selbst # interval = "30s"
# (gpu_utilization_gpu, gpu_temperature_edge, gpu_power_draw, gpu_memory_*). # timeout = "20s"
# name_override = "gpu" wuerde alle Werte zu einer Serie kollabieren. # data_format = "prometheus"
# [[inputs.exec]] # commands = ["/etc/telegraf/gpu-rocm.sh"]
# interval = "30s" #
# timeout = "20s" # Intel (/dev/dri): nvidia_smi nicht verwenden! intel_gpu_top wird nicht
# data_format = "prometheus" # automatisch erfasst — es wird bewusst KEIN GPU-Input aktiviert.
# commands = ["/etc/telegraf/gpu-rocm.sh"]