fix(gpu-amd): Ausgabe im Prometheus-Format (kein _value-Suffix); data_format=prometheus
This commit is contained in:
1 parent
9db71d207c
commit
d8cb2432c5
3 files changed
+19
-18
No files matched your search
+1
-1
@@ -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."
|
||||
|
||||
+17
-16
@@ -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_<metrik>,gpu=<karte> value=<zahl>
|
||||
# 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"
|
||||
+1
-1
@@ -20,5 +20,5 @@
|
||||
# [[inputs.exec]]
|
||||
# interval = "30s"
|
||||
# timeout = "20s"
|
||||
# data_format = "influx"
|
||||
# data_format = "prometheus"
|
||||
# commands = ["/etc/telegraf/gpu-rocm.sh"]
|
||||
Reference in new issue
Block a user