docs: README auf Reverse-Proxy+Token umgeschrieben; install.ps1 mit -Token und GPU
This commit is contained in:
1 parent
a19bd82189
commit
878e77542c
2 files changed
+67
-29
No files matched your search
@@ -1,28 +1,45 @@
|
||||
# netbird-telegraf-installer
|
||||
|
||||
Ein Befehl, und eine Node liefert Metriken + Logs an den zentralen Collector im NetBird-Netz
|
||||
(Prometheus Remote Write `:9090`, Loki `:3100`, Grafana `:3000` — alle auf `100.83.134.46`).
|
||||
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).
|
||||
|
||||
Voraussetzung: Die Node ist NetBird-Peer und erreicht `100.83.134.46`. Kein Tunnel, keine Freigabe nach außen.
|
||||
## 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>
|
||||
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`) |
|
||||
| `--collector <ip>` | Collector-IP (Default `100.83.134.46`) |
|
||||
| `--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 |
|
||||
|
||||
**GPU:** Wird automatisch erkannt — NVIDIA via `nvidia-smi` (`inputs.nvidia_smi`), AMD via `rocm-smi` (exec-Input), Intel via `/dev/dri`. Ohne GPU läuft alles andere unverändert. Im Docker-Betrieb muss der Treiber im Container verfügbar sein (`nvidia-container-toolkit` bzw. `--device /dev/dri`).
|
||||
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.
|
||||
|
||||
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/COLLECTOR → 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
|
||||
|
||||
@@ -30,7 +47,8 @@ Ablauf: Paketquelle von InfluxData (apt/dnf/apk) oder statisches Binary (amd64/a
|
||||
pveum user add telegraf@pve
|
||||
pveum user token add telegraf@pve monitoring -privsep 1 # Secret notieren
|
||||
pveum acl modify / -token 'telegraf@pve!monitoring' -role PVEAuditor
|
||||
curl -fsSL https://gitea.m-m.bio/mm/netbird-telegraf-installer/raw/branch/main/install.sh | sh -s -- --name pve1 --pve-token 'telegraf@pve!monitoring=<secret>'
|
||||
curl -fsSL …/install.sh | sudo sh -s -- --name pve1 --token <TOKEN> \
|
||||
--role proxmox --pve-token 'telegraf@pve!monitoring=<secret>'
|
||||
```
|
||||
|
||||
### Apache
|
||||
@@ -41,10 +59,9 @@ Wird automatisch erkannt (`apache2ctl`/`httpd`). Access-Log geht roh nach Loki.
|
||||
|
||||
```powershell
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force
|
||||
iwr -useb https://gitea.m-m.bio/mm/netbird-telegraf-installer/raw/branch/main/install.ps1 | iex
|
||||
& ([scriptblock]::Create((iwr -useb https://gitea.m-m.bio/mm/netbird-telegraf-installer/raw/branch/main/install.ps1))) -Name ROG -Token <BEARER-TOKEN>
|
||||
```
|
||||
Mit Parametern: `& ([scriptblock]::Create((iwr -useb …/install.ps1))) -Name mypc`
|
||||
Installiert nach `C:\Program Files\Telegraf`, Dienst `telegraf`; liefert CPU/RAM/Disk/Net/Dienste + Eventlog (Warnung/Fehler) an den Collector. `-Uninstall` entfernt alles.
|
||||
Installiert nach `C:\Program Files\Telegraf`, Dienst `telegraf`; liefert CPU/RAM/Disk/Net/Dienste + Eventlog (Warnung/Fehler). `-Uninstall` entfernt alles.
|
||||
|
||||
## GPU-Metriken
|
||||
|
||||
@@ -55,22 +72,27 @@ Installiert nach `C:\Program Files\Telegraf`, Dienst `telegraf`; liefert CPU/RAM
|
||||
| Intel | `/dev/dri/renderD128` | Hinweis im Log — `intel_gpu_top` wird nicht automatisch erfasst |
|
||||
|
||||
Im Dashboard: Row **GPU** (Auslastung, Speicher, Temperatur, Leistung). Leere Panels heißen: keine GPU-Node im Mesh.
|
||||
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).
|
||||
|
||||
## Prüfen
|
||||
|
||||
```sh
|
||||
curl -s 'http://100.83.134.46:9090/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.
|
||||
Dort ist `network_mode: host` gesetzt — ohne das sieht Telegraf nur `lo`+`eth0` statt der echten Interfaces.
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- Der Collector akzeptiert unauthentifiziert — er ist nur über das NetBird-Interface erreichbar.
|
||||
- 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. Tokens landen nur in `/etc/default/telegraf` (0600).
|
||||
- Dieses Repo ist öffentlich und enthält keine Secrets.
|
||||
+24
-8
@@ -9,11 +9,19 @@
|
||||
#>
|
||||
param(
|
||||
[string]$Name = $env:COMPUTERNAME.ToLower(),
|
||||
[string]$Collector = "100.83.134.46",
|
||||
# nvidia_smi-Input wird nur aktiv genutzt, wenn nvidia-smi installiert ist
|
||||
[string]$Collector = "",
|
||||
[string]$Token = "",
|
||||
[string]$Version = "1.40.0",
|
||||
[switch]$Uninstall
|
||||
)
|
||||
$ErrorActionPreference = "Stop"
|
||||
if (-not $Token -and -not $Collector) { throw "Kein Token: -Token <Bearer-Token> angeben (siehe README)." }
|
||||
if ($Collector) {
|
||||
$PromUrl = "http://${Collector}:9090/api/v1/write"; $LokiUrl = "http://${Collector}:3100"; $Base = "http://${Collector}"
|
||||
} else {
|
||||
$PromUrl = "https://imac-prometheus.x05.idx.wf/api/v1/write"; $LokiUrl = "https://imac-loki.x05.idx.wf"; $Base = "https://imac-prometheus.x05.idx.wf"
|
||||
}
|
||||
$Dir = "C:\Program Files\Telegraf"
|
||||
$Exe = "$Dir\telegraf.exe"
|
||||
$Conf = "$Dir\telegraf.conf"
|
||||
@@ -33,10 +41,13 @@ elseif (-not [Environment]::Is64BitOperatingSystem) { $arch = "i386" }
|
||||
Write-Host "[netbird-telegraf] Node=$Name Arch=$arch Collector=$Collector"
|
||||
|
||||
try {
|
||||
Invoke-WebRequest -UseBasicParsing -TimeoutSec 8 "http://${Collector}:9090/-/ready" | Out-Null
|
||||
Write-Host "[netbird-telegraf] Collector erreichbar."
|
||||
$h = @{}
|
||||
if ($Token) { $h["Authorization"] = "Bearer $Token" }
|
||||
$readyUrl = if ($Collector) { "$Base/-/ready" } else { "$Base/-/ready" }
|
||||
Invoke-WebRequest -UseBasicParsing -TimeoutSec 10 -Headers $h $readyUrl | Out-Null
|
||||
Write-Host "[netbird-telegraf] Collector erreichbar (auth ok)."
|
||||
} catch {
|
||||
Write-Warning "Collector http://${Collector}:9090 nicht erreichbar — NetBird verbunden? Installation läuft weiter, Telegraf puffert."
|
||||
Write-Warning "Collector $PromUrl nicht erreichbar oder Token falsch — Installation läuft weiter, Telegraf puffert."
|
||||
}
|
||||
|
||||
if (-not (Test-Path $Exe)) {
|
||||
@@ -64,7 +75,7 @@ $cfg = @"
|
||||
hostname = "$Name"
|
||||
|
||||
[[outputs.http]]
|
||||
url = "http://${Collector}:9090/api/v1/write"
|
||||
url = "$PromUrl"
|
||||
data_format = "prometheusremotewrite"
|
||||
timeout = "10s"
|
||||
namedrop = ["win_eventlog"]
|
||||
@@ -72,13 +83,18 @@ $cfg = @"
|
||||
Content-Type = "application/x-protobuf"
|
||||
Content-Encoding = "snappy"
|
||||
X-Prometheus-Remote-Write-Version = "0.1.0"
|
||||
Authorization = "Bearer $Token"
|
||||
|
||||
[[outputs.loki]]
|
||||
domain = "http://${Collector}:3100"
|
||||
domain = "$LokiUrl"
|
||||
endpoint = "/loki/api/v1/push"
|
||||
namepass = ["win_eventlog"]
|
||||
sanitize_label_names = true
|
||||
metric_name_label = ""
|
||||
http_headers = { "Authorization" = "Bearer $Token" }
|
||||
|
||||
[[inputs.nvidia_smi]]
|
||||
timeout = "10s"
|
||||
|
||||
[[inputs.cpu]]
|
||||
percpu = false
|
||||
@@ -109,5 +125,5 @@ Stop-Service telegraf -ErrorAction SilentlyContinue
|
||||
Start-Service telegraf
|
||||
Start-Sleep -Seconds 3
|
||||
if ((Get-Service telegraf).Status -ne "Running") { throw "Dienst telegraf läuft nicht." }
|
||||
Write-Host "[netbird-telegraf] OK — Node '$Name' liefert an http://${Collector}:9090 (Metriken) und :3100 (Eventlog Warn/Error)."
|
||||
Write-Host "[netbird-telegraf] Grafana: http://${Collector}:3000 (nur im NetBird)"
|
||||
Write-Host "[netbird-telegraf] OK — Node '$Name' liefert an $PromUrl (Metriken) und $LokiUrl (Eventlog Warn/Error)."
|
||||
Write-Host "[netbird-telegraf] Grafana: http://100.83.134.46:3000 (nur im NetBird)"
|
||||
Reference in new issue
Block a user