diff --git a/install.sh b/install.sh index 3dd8405..87f3efb 100755 --- a/install.sh +++ b/install.sh @@ -268,6 +268,18 @@ EOF 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; } +# --- Node-Info (LAN-IP, NetBird-IP/FQDN, PVE-URL) — auf jeder Node --- +fetch scripts/node-info.sh /etc/telegraf/node-info.sh +chmod 0755 /etc/telegraf/node-info.sh +cat > /etc/telegraf/telegraf.d/nodeinfo.conf <<'EOF' +[[inputs.exec]] + interval = "300s" + timeout = "25s" + data_format = "prometheus" + commands = ["/etc/telegraf/node-info.sh"] +EOF +log "Node-Info aktiv (LAN-IP, NetBird-IP/FQDN, PVE-URL)." + # --- 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. diff --git a/scripts/node-info.sh b/scripts/node-info.sh new file mode 100755 index 0000000..b325453 --- /dev/null +++ b/scripts/node-info.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# node-info.sh — Node-Identität als Metrik: LAN-IP, NetBird-IP/FQDN, PVE-URL. +# +# Ausgabe im Prometheus-Format: +# node_info{lan_ip="192.168.188.20",netbird_ip="100.83.12.34", +# netbird_fqdn="pve7.netbird.selfhosted", +# pve_url="https://pve7.netbird.selfhosted:8006", +# pve_cluster="1",pve_node="pve7"} 1 +# +# Wird vom Installer auf JEDER Linux-Node eingebunden (Rolle unabhängig). +# Fehlende Werte werden weggelassen — kein Platzhalter-Müll. + +set -eu + +lan_ip=""; nb_ip=""; nb_fqdn=""; pve_url=""; pve_node=""; pve_cluster="" + +# LAN-IP: erste globale IPv4, ohne Netzwerk-Overlays/Bridges +lan_ip="$(ip -4 -o addr show scope global 2>/dev/null \ + | awk '$2 !~ /^(wt0|docker|br-|veth|virbr|lo|tun|tap)/ {print $4}' \ + | cut -d/ -f1 | head -1 || true)" + +# NetBird: Interface-IP (funktioniert ohne CLI) … +nb_ip="$(ip -4 -o addr show wt0 2>/dev/null | awk '{print $4}' | cut -d/ -f1 | head -1 || true)" +# … und FQDN aus der CLI (optional; liefert ohne Daemon-Zugriff nichts) +if command -v netbird >/dev/null 2>&1; then + nb_fqdn="$(netbird status 2>/dev/null | sed -n 's/^ *FQDN: *//p' | head -1 || true)" +fi + +# PVE-Erkennung: Knotenname lokal, Cluster-Status aus /etc/pve +if command -v pvesh >/dev/null 2>&1; then + pve_node="$(hostname -s 2>/dev/null || true)" + # /etc/pve/corosync.conf existiert nur in einem Cluster + [ -r /etc/pve/corosync.conf ] && pve_cluster="1" + # Link bevorzugt über den NetBird-Namen (erreichbar aus dem Mesh), sonst LAN + host_ref="${nb_fqdn%%.netbird.selfhosted}" + [ -n "$nb_fqdn" ] && pve_url="https://${nb_fqdn}:8006" + [ -z "$pve_url" ] && [ -n "$lan_ip" ] && pve_url="https://${lan_ip}:8006" +fi + +esc() { printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g'; } + +labels="" +add() { [ -n "$2" ] || return 0; labels="${labels:+$labels,}$1=\"$(esc "$2")\""; } +add lan_ip "$lan_ip" +add netbird_ip "$nb_ip" +add netbird_fqdn "$nb_fqdn" +add pve_url "$pve_url" +add pve_node "$pve_node" +add pve_cluster "$pve_cluster" + +[ -n "$labels" ] || exit 0 +printf 'node_info{%s} 1\n' "$labels" diff --git a/telegraf/nodeinfo.conf b/telegraf/nodeinfo.conf new file mode 100644 index 0000000..3b27b8d --- /dev/null +++ b/telegraf/nodeinfo.conf @@ -0,0 +1,7 @@ +# Node-Identität: LAN-IP, NetBird-IP/FQDN, PVE-URL (siehe scripts/node-info.sh) +# Wird auf jeder Linux-Node eingebunden. +[[inputs.exec]] + interval = "300s" + timeout = "25s" + data_format = "prometheus" + commands = ["/etc/telegraf/node-info.sh"]