From d8cb2432c5fd856735e76902d54dafcf93d7024a Mon Sep 17 00:00:00 2001 From: mm Date: Sun, 13 Sep 2026 20:32:52 +0200 Subject: [PATCH] fix(gpu-amd): Ausgabe im Prometheus-Format (kein _value-Suffix); data_format=prometheus --- install.sh | 2 +- scripts/gpu-rocm.sh | 33 +++++++++++++++++---------------- telegraf/gpu.conf | 2 +- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/install.sh b/install.sh index 132ecb3..676a836 100755 --- a/install.sh +++ b/install.sh @@ -245,7 +245,7 @@ case "$GPU" in [[inputs.exec]] interval = "30s" timeout = "20s" - data_format = "influx" + data_format = "prometheus" commands = ["/etc/telegraf/gpu-rocm.sh"] EOF log "AMD-GPU erkannt: rocm-smi-exec-Input aktiv." diff --git a/scripts/gpu-rocm.sh b/scripts/gpu-rocm.sh index 3272dfb..704c2e3 100755 --- a/scripts/gpu-rocm.sh +++ b/scripts/gpu-rocm.sh @@ -1,15 +1,17 @@ #!/usr/bin/env bash -# gpu-rocm.sh — AMD-GPU-Metriken via rocm-smi im Influx-Format. +# gpu-rocm.sh — AMD-GPU-Metriken via rocm-smi. # -# Aufruf durch Telegraf (inputs.exec). Ausgabe: -# gpu_,gpu= value= -# z. B. gpu_utilization_gpu,gpu=card0 value=25 +# Ausgabe im PROMETHEUS-Format (nicht Influx), damit die Metriknamen ohne +# Suffix in Prometheus landen: +# gpu_utilization_gpu{gpu="card0"} 25 +# Mit data_format="influx" haengt Telegraf beim Export "_value" an +# (gpu_utilization_gpu_value) — deshalb prometheus. # -# WICHTIG: rocm-smi liefert je nach Version MIT oder OHNE Einheitensuffix +# rocm-smi liefert je nach Version MIT oder OHNE Einheitensuffix: # alt: card0,37%,52c,45W # neu: card0,51.0,54.0,47.0,25 (Einheit nur im Spaltenkopf!) -# Deshalb wird hier die KOPFZEILE geparst und die Spalte ueber ihren Namen -# zugeordnet — nicht ueber Position oder Suffix. Das ist versionstolerant. +# Deshalb wird die KOPFZEILE geparst und die Spalte ueber ihren Namen +# zugeordnet — nicht ueber Position oder Suffix. Versionstolerant. set -eu @@ -24,16 +26,15 @@ rocm-smi --showuse --showtemp --showpower --showmeminfo vram --csv > "$TMP" 2>/d [ -s "$TMP" ] || exit 0 awk -F, ' -# Spaltenkopf -> Metrikname. Reihenfolge egal, unbekannte Spalten werden ignoriert. function metric_for(header, h) { h = tolower(header) - if (h ~ /gpu use|gpu_use|utilization/) return "utilization_gpu" - if (h ~ /sensor edge|edge/) return "temperature_edge" - if (h ~ /sensor junction|junction/) return "temperature_junction" - if (h ~ /sensor memory|memory.*\(c\)/) return "temperature_memory" - if (h ~ /power/) return "power_draw" - if (h ~ /vram total used|used memory/) return "memory_used" - if (h ~ /vram total|total memory/) return "memory_total" + if (h ~ /gpu use|gpu_use|utilization/) return "gpu_utilization_gpu" + if (h ~ /sensor edge|edge/) return "gpu_temperature_edge" + if (h ~ /sensor junction|junction/) return "gpu_temperature_junction" + if (h ~ /sensor memory|memory.*\(c\)/) return "gpu_temperature_memory" + if (h ~ /power/) return "gpu_power_draw" + if (h ~ /vram total used|used memory/) return "gpu_memory_used" + if (h ~ /vram total|total memory/) return "gpu_memory_total" return "" } function num(s) { gsub(/[^0-9.eE+-]/, "", s); return s } @@ -50,6 +51,6 @@ NR == 1 { v = $i gsub(/^[ \t]+|[ \t]+$/, "", v) if (v == "" || v == "N/A" || v ~ /^\[/) continue - printf "gpu_%s,gpu=%s value=%s\n", col[i], card, num(v) + printf "%s{gpu=\"%s\"} %s\n", col[i], card, num(v) } }' "$TMP" diff --git a/telegraf/gpu.conf b/telegraf/gpu.conf index 77f9fa9..f43ba32 100644 --- a/telegraf/gpu.conf +++ b/telegraf/gpu.conf @@ -20,5 +20,5 @@ # [[inputs.exec]] # interval = "30s" # timeout = "20s" -# data_format = "influx" +# data_format = "prometheus" # commands = ["/etc/telegraf/gpu-rocm.sh"]