140 lines
7.0 KiB
Markdown
140 lines
7.0 KiB
Markdown
# netbird-telegraf-installer
|
|
|
|
Ein Befehl, und eine Node liefert Metriken + Logs an die zentrale Observability auf dem imac.
|
|
Der Ausgang läuft über den **NetBird-Reverse-Proxy** (`imac-prometheus.x05.idx.wf`, `imac-loki.x05.idx.wf`)
|
|
mit **Bearer-Token** — dadurch funktioniert der Installer auch auf Maschinen, die **kein NetBird-Peer** sind
|
|
(Büro-LAN, Kundenlaptop, CGNAT, VM ohne Client).
|
|
|
|
## Der Token — zuerst lesen
|
|
|
|
Jeder Aufruf braucht `--token <TOKEN>`. Ohne Token bricht das Script mit
|
|
`FEHLER: Kein Token: --token <Bearer-Token> angeben` ab.
|
|
|
|
Den Token legt man im NetBird-Dashboard an: **`https://x05.idx.wf` → Reverse Proxy →
|
|
Service `imac-prometheus` → Authentication → Header → Preset „Bearer Token"**.
|
|
Für `imac-loki` denselben Wert eintragen (oder einen zweiten, dann aber getrennt halten).
|
|
|
|
Token nie in dieses Repo schreiben — er landet ausschließlich in `/etc/default/telegraf` (Modus 0600) auf der Zielmaschine.
|
|
|
|
## Linux — Debian, Ubuntu, Proxmox VE, RHEL/Rocky/Alma/Fedora, Alpine, sonstige
|
|
|
|
```sh
|
|
curl -fsSL https://gitea.m-m.bio/mm/netbird-telegraf-installer/raw/branch/main/install.sh \
|
|
| sudo sh -s -- --name <node-name> --token <BEARER-TOKEN>
|
|
```
|
|
|
|
| Option | Bedeutung |
|
|
|---|---|
|
|
| `--name <n>` | Node-Name im Dashboard (Default: `hostname -s`) |
|
|
| `--token <t>` | **Pflicht.** Bearer-Token des Reverse-Proxys |
|
|
| `--collector <ip>` | Direktweg innerhalb des NetBird statt Reverse Proxy (z. B. `100.83.134.46`); braucht dann keinen Token-Zwang, aber die Node muss Peer sein |
|
|
| `--role proxmox\|apache\|docker\|none` | Zusatz-Profil; Default `auto` erkennt Proxmox, Docker und Apache selbst |
|
|
| `--pve-token 'telegraf@pve!monitoring=…'` | Proxmox-API-Token für VM/CT-Metriken |
|
|
| `--apache-log <pfad>` | Access-Log (Default `/var/log/apache2/access.log`) |
|
|
| `--uninstall` | alles entfernen |
|
|
|
|
**Root-Rechte:** Das Script braucht sie (Dienst, `/etc/telegraf`). Auf PVE, in LXC-Containern und überall, wo du schon root bist: **kein `sudo`** — es ist dort oft nicht installiert. Auf normalen Desktops/Servern mit eigenem Benutzer: `| sudo sh -s -- …`.
|
|
|
|
Ablauf: Paketquelle von InfluxData (apt/dnf/apk) oder statisches Binary (amd64/arm64/armv7) → `/etc/telegraf/telegraf.conf` + `telegraf.d/` aus diesem Repo → `/etc/default/telegraf` mit NODE_NAME, PROM_URL, LOKI_URL, TELEGRAF_TOKEN → systemd-Dienst `telegraf`, enabled, Konfig-Test vor dem Start.
|
|
|
|
### Direktweg (Node ist NetBird-Peer)
|
|
|
|
```sh
|
|
curl -fsSL …/install.sh | sudo sh -s -- --name <node> --token <TOKEN> --collector 100.83.134.46
|
|
```
|
|
|
|
### Proxmox VE
|
|
|
|
**Kein API-Token nötig.** Der Installer nutzt `pvesh` direkt (Telegraf läuft für diese Rolle
|
|
als root — das Drop-in `10-proxmox-root.conf` setzt das). Damit entfällt die gesamte
|
|
Token-/ACL-Thematik.
|
|
|
|
> Warum nicht `inputs.proxmox`? Das Plugin fragt als Erstes `/nodes/<node>/dns` ab und
|
|
> braucht dort `Sys.Audit`. Schlägt das fehl, liefert es **komplett nichts** — ohne
|
|
> Logmeldung. Mehrere ACL-Versuche (`PVEAuditor` auf `/`, auf `/nodes`, auf `/nodes/<node>`,
|
|
> eigene Rolle mit `Sys.Audit`) blieben auf PVE 8 mit `403` erfolglos.
|
|
|
|
Dann auf **jedem PVE-Knoten** (auf dem Host selbst, nicht in einer VM).
|
|
**Auf PVE gibt es kein `sudo`** — du bist dort bereits root, also ohne `sudo`:
|
|
|
|
```sh
|
|
curl -fsSL https://gitea.m-m.bio/mm/netbird-telegraf-installer/raw/branch/main/install.sh \
|
|
| sh -s -- --name pve1 --token <BEARER-TOKEN> \
|
|
--role proxmox --pve-token 'telegraf@pve!monitoring=<UUID>'
|
|
```
|
|
|
|
> Auf Debian/Ubuntu/Normalnutzer dagegen `| sudo sh -s -- …` verwenden. Das Script prüft `id -u` selbst und bricht mit klarer Meldung ab, wenn es nicht root ist.
|
|
|
|
`--pve-node` und `--pve-url` sind optional: Ohne Angabe ermittelt das Script den Knotennamen per `pvesh get /nodes` und nutzt `https://127.0.0.1:8006/api2/json`.
|
|
|
|
| Option | Bedeutung |
|
|
|---|---|
|
|
| `--pve-token 'user@realm!id=<uuid>'` | **Pflicht** für VM/CT-Metriken |
|
|
| `--pve-node <n>` | PVE-Knotenname wie im PVE-Baum (Default: per `pvesh` erkannt) |
|
|
| `--pve-url <u>` | PVE-API-URL, wenn Telegraf nicht auf dem PVE-Host läuft |
|
|
|
|
Liefert: Node-Metriken (CPU, RAM, Disk, Netzwerk), VM-/CT-Statistiken pro `vmid` (CPU, RAM, Disk, Netz, Uptime, Status).
|
|
|
|
### Apache
|
|
|
|
Wird automatisch erkannt (`apache2ctl`/`httpd`). Access-Log geht roh nach Loki. Für Request-Metriken `inputs.apache` in `telegraf/apache.conf` einschalten (braucht mod_status).
|
|
|
|
## Windows — PowerShell als Administrator
|
|
|
|
```powershell
|
|
Set-ExecutionPolicy Bypass -Scope Process -Force
|
|
& ([scriptblock]::Create((iwr -useb https://gitea.m-m.bio/mm/netbird-telegraf-installer/raw/branch/main/install.ps1))) -Name ROG -Token <BEARER-TOKEN>
|
|
```
|
|
Installiert nach `C:\Program Files\Telegraf`, Dienst `telegraf`; liefert CPU/RAM/Disk/Net/Dienste + Eventlog (Warnung/Fehler). `-Uninstall` entfernt alles.
|
|
|
|
## GPU-Metriken
|
|
|
|
| Hersteller | Erkennung | Metriken |
|
|
|---|---|---|
|
|
| NVIDIA | `nvidia-smi -L` funktioniert | Auslastung, VRAM, Temperatur, Leistung, Takte, P-State |
|
|
| AMD | `rocm-smi` vorhanden | Auslastung, Temperatur, Leistung, VRAM (via `scripts/gpu-rocm.sh`) |
|
|
| Intel | `/dev/dri/renderD128` | Hinweis im Log — `intel_gpu_top` wird nicht automatisch erfasst |
|
|
|
|
AMD liefert sieben Metriken (Auslastung, VRAM genutzt/gesamt, Temperatur edge/junction/memory, Leistung). NVIDIA entsprechend über `inputs.nvidia_smi`.
|
|
|
|
Im Dashboard: Row **GPU** (Auslastung, Speicher, Temperatur, Leistung). Leere Panels heißen: keine GPU-Node im Mesh.
|
|
|
|
**Beim Aktualisieren des AMD-Scripts** (falls `rocm-smi` seine Spalten ändert) beide Dateien neu holen — Script **und** Conf, und `data_format` muss `prometheus` bleiben:
|
|
|
|
```sh
|
|
sudo curl -fsSL …/scripts/gpu-rocm.sh | sudo tee /etc/telegraf/gpu-rocm.sh >/dev/null
|
|
sudo chmod +x /etc/telegraf/gpu-rocm.sh
|
|
sudo sh -c 'cat > /etc/telegraf/telegraf.d/gpu.conf <<EOF
|
|
[[inputs.exec]]
|
|
interval = "30s"
|
|
timeout = "20s"
|
|
data_format = "prometheus"
|
|
commands = ["/etc/telegraf/gpu-rocm.sh"]
|
|
EOF'
|
|
sudo systemctl restart telegraf
|
|
```
|
|
Im Docker-Betrieb muss der Treiber im Container verfügbar sein (`nvidia-container-toolkit` bzw. `--device /dev/dri`); als systemd-Dienst ist das automatisch der Fall.
|
|
|
|
## Prüfen
|
|
|
|
```sh
|
|
TOKEN=<BEARER-TOKEN>
|
|
curl -s -H "Authorization: Bearer $TOKEN" \
|
|
"https://imac-prometheus.x05.idx.wf/api/v1/query?query=system_uptime{node=\"<node-name>\"}"
|
|
journalctl -u telegraf -f
|
|
```
|
|
Im Grafana-Dashboard „NetBird Observability — Overview“ erscheint die Node automatisch im Node-Filter.
|
|
Grafana selbst: `http://100.83.134.46:3000` (nur im NetBird, Login `admin`).
|
|
|
|
## Docker-Host ohne root
|
|
|
|
Wer kein sudo hat, aber in der Gruppe `docker` ist: Container-Variante aus
|
|
[netbird-observability/stacks/telegraf-node](https://gitea.m-m.bio/mm/netbird-observability) (privates Repo).
|
|
Dort ist `network_mode: host` gesetzt — ohne das sieht Telegraf nur `lo`+`eth0` statt der echten Interfaces.
|
|
|
|
## Sicherheit
|
|
|
|
- Der Proxy verlangt Bearer-Token; das Header wird vor dem Weiterleiten entfernt und liegt damit nicht bei Prometheus/Loki.
|
|
- Telegraf läuft als Benutzer `telegraf` (Docker-Socket read-only via Gruppe `docker`, Apache-Logs via Gruppe `adm`).
|
|
- Dieses Repo ist öffentlich und enthält keine Secrets.
|