Netzwerkanalyse, Fehlersuche, Testberichte
Home / News
Netzwerkanalyse
Grundlagen
Verkabelung
Erste Schritte
Baselining
Let's sniff
Tools
Auswerten/Filtern
Typische Probleme 1
Typische Probleme 2
Sicherheit
Bücher
Tutorials
Cacti
DSL einrichten
DynDNS einrichten
m0n0wall | pfSense
Nmap
VirtualBox
Wireshark
FAQ
Know How
Testberichte
Hardware-DB
Netzwerklexikon
Links / Service
Suche
Kontakt
Impressum
Feedback
Sitemap
Tutorials

Prometheus Node Exporter unter Linux einrichten

Der Software-Stack bestehend aus Grafana, Prometheus und Node Exporter bietet für den Network Engineer eine Reihe von interessanten Möglichkeiten. Dieser Artikel startet mit der Erfassung der Daten mit dem Node Exporter.

Node Exporter Grundlagen

Der Node Exporter fragt eine ganze Reihe von Metriken eines Linux-Systems ab und stellt diese in einem standardisiertem Format zur Abfrage zur Verfügung. Die Abfrage erfolgt über einen integrierten Webserver der per Default auf Port 9100 hört.

Node Exporter Funktionsweise
Funktionsweise Node Exporter

Neben den Metriken für die Netzwerkschnittstellen des Servers liefert uns der Node Exporter auch Informationen zu CPU, Arbeitsspeicher und Massenspeicher. Diese Daten können bei der Analyse von Performanceproblemen sehr hilfreich sein. Mitunter ist ja nicht die Netzwerkkarte der Flaschenhals sondern ein CPU-Core der bereits am Anschlag läuft.

Der Node Exporter selbst verfügt nicht über eine Datenbank und speichert keinerlei Daten.

Das Tool Node Exporter besteht aus einer einzelnen statischen Binary und ist Bestandteil des Prometheus Projektes. Durch seinen geringen Ressourcenbedarf kann er auch auf kleineren Systemen bedenkenlos installiert werden. Es eignet sich damit für den Einsatz auf Linux-Workstation, Linux-Servern und auch für virtuelle Linux-Instanzen in der Cloud.

Für das Monitoring von Windows-Systemen gibt es einen gesonderten Windows Node Exporter.

Installation von Node Exporter

Da der Node Exporter lediglich eine einzelne Binärdatei ist gestaltet sich die Installation recht einfach. Die aktuelle Version kann von der Prometheus Download Seite heruntergeladen werden und mit tar entpackt werden.

wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.*-amd64.tar.gz
tar xvfz node_exporter-*.*-amd64.tar.gz
cd node_exporter-*.*-amd64
./node_exporter

Wie im Beispiel oben zu sehen ist, benötigt das Programm in einfachsten Fall weder Parameter noch eine Konfigurations-Datei. Nach dem Entpacken könnt ihr die Binary zum Beispiel nach /usr/local/bin verschieben oder auch ein dediziertes Verzeichnis (/opt/node-exporter) dafür erstellen.

Konfiguration Node Exporter

Die Konfiguration erfolgt im Wesentlichen über Kommandozeilenparameter. Mit "./node_exporter --help" bekommt man eine sehr gute Hilfe angezeigt.

./node_exporter --help
usage: node_exporter []

Flags:
  -h, --help                     Show context-sensitive help (also try --help-long and --help-man).
      --collector.arp.device-include=COLLECTOR.ARP.DEVICE-INCLUDE
                                 Regexp of arp devices to include (mutually exclusive to device-exclude).
      --collector.arp.device-exclude=COLLECTOR.ARP.DEVICE-EXCLUDE
                                 Regexp of arp devices to exclude (mutually exclusive to device-include).
      --collector.bcache.priorityStats
                                 Expose expensive priority stats.
      --collector.cpu.guest      Enables metric node_cpu_guest_seconds_total
      --collector.cpu.info       Enables metric cpu_info
      --collector.cpu.info.flags-include=COLLECTOR.CPU.INFO.FLAGS-INCLUDE
                                 Filter the `flags` field in cpuInfo with a value that must be a regular expression
      --collector.cpu.info.bugs-include=COLLECTOR.CPU.INFO.BUGS-INCLUDE
                                 Filter the `bugs` field in cpuInfo with a value that must be a regular expression
      --collector.diskstats.device-exclude="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$"
                                 Regexp of diskstats devices to exclude (mutually exclusive to device-include).
...

Über die Parameter lassen sich Kollektoren bzw. Metriken an- und abwählen oder auch der Port des internen Webservers umstellen.

Tests

Für einen ersten Tests starten wir den Node Exporter ohne weitere Parameter:

./node_exporter
ts=2023-01-11T18:45:41.349Z caller=node_exporter.go:180 level=info msg="Starting node_exporter" version="(version=1.5.0, branch=HEAD...
ts=2023-01-11T18:45:41.350Z caller=node_exporter.go:181 level=info msg="Build context" build_context="(go=go1.19.3, user=root@6e7732a...
ts=2023-01-11T18:45:41.350Z caller=node_exporter.go:183 level=warn msg="Node Exporter is running as root user. This exporter is design...
ts=2023-01-11T18:45:41.351Z caller=filesystem_common.go:111 level=info collector=filesystem msg="Parsed flag --collector.filesystem.mount...
ts=2023-01-11T18:45:41.352Z caller=filesystem_common.go:113 level=info collector=filesystem msg="Parsed flag --collector.filesystem.fs-...
ts=2023-01-11T18:45:41.352Z caller=diskstats_common.go:111 level=info collector=diskstats msg="Parsed flag --collector.diskstats.device-ex...
ts=2023-01-11T18:45:41.355Z caller=node_exporter.go:110 level=info msg="Enabled collectors"
ts=2023-01-11T18:45:41.355Z caller=node_exporter.go:117 level=info collector=arp
ts=2023-01-11T18:45:41.355Z caller=node_exporter.go:117 level=info collector=bcache
ts=2023-01-11T18:45:41.355Z caller=node_exporter.go:117 level=info collector=bonding
ts=2023-01-11T18:45:41.355Z caller=node_exporter.go:117 level=info collector=btrfs
...
ts=2023-01-11T18:45:41.356Z caller=node_exporter.go:117 level=info collector=uname
ts=2023-01-11T18:45:41.356Z caller=node_exporter.go:117 level=info collector=vmstat
ts=2023-01-11T18:45:41.356Z caller=node_exporter.go:117 level=info collector=xfs
ts=2023-01-11T18:45:41.356Z caller=node_exporter.go:117 level=info collector=zfs
ts=2023-01-11T18:45:41.357Z caller=tls_config.go:232 level=info msg="Listening on" address=address=[::]:9100
ts=2023-01-11T18:45:41.357Z caller=tls_config.go:235 level=info msg="TLS is disabled." http2=false address=address=[::]:9100

Neben der aktuellen Version zeigt der Exporter an welche Kollektoren laufen und auf welcher IP-Adresse und auf welchem Port der Webserver läuft. Den Webserver können wir mit wget/curl oder einem Browser unsere Wahl abfragen.

curl http://localhost:9100/metrics 2>&1 | grep ^node_
node_netstat_Icmp6_InErrors 0
node_netstat_Icmp6_InMsgs 443
node_netstat_Icmp6_OutMsgs 626
node_netstat_Icmp_InErrors 57
node_netstat_Icmp_InMsgs 92976
node_netstat_Icmp_OutMsgs 95614
node_netstat_Ip6_InOctets 4.4804858e+08
node_netstat_Ip6_OutOctets 9.3644372e+08
node_netstat_IpExt_InOctets 5.58249188e+08
node_netstat_IpExt_OutOctets 1.918469652e+09
node_netstat_Ip_Forwarding 2
node_netstat_TcpExt_ListenDrops 0
node_netstat_TcpExt_ListenOverflows 0
node_netstat_TcpExt_SyncookiesFailed 1
node_netstat_TcpExt_SyncookiesRecv 0
node_netstat_TcpExt_SyncookiesSent 0
node_netstat_TcpExt_TCPSynRetrans 5419
node_netstat_TcpExt_TCPTimeouts 17074
node_netstat_Tcp_ActiveOpens 15578
node_netstat_Tcp_CurrEstab 8
node_netstat_Tcp_InErrs 25
node_netstat_Tcp_InSegs 2.156148e+06
node_netstat_Tcp_OutRsts 143392
node_netstat_Tcp_OutSegs 3.034225e+06
...

Die Ausgabe gibt uns einen guten Überblick über die verfügbaren Metriken. Im Webinterface sehen wir die selben Metriken.

Node Exporter Webinterface
Metriken im Webinterface des Node Exporters

Der Webserver hört ohne weitere Konfiguration auf allen Schnittstellen des Systems und ist so gegebenfalls auch offen im Internet erreichbar.

Node Exporter als Service starten

Normalerweise möchte man den Node Exporter automatisch beim Hochfahren des Servers starten. Dazu muss ein entsprechender Service konfiguriert werden.

Zuerst legen wir einen Benutzer an unter dem der Prozess laufen soll. Dadurch muss der Prozess nicht als root laufen und mögliche Angriffsvektoren werden minimiert.

sudo useradd -rs /bin/false node_exporter

Der Service selbst wird in der Datei node_exporter im systemd beschrieben.

sudo vi /etc/systemd/system/node_exporter.service

Die Datei bekommt den folgenden Inhalt:

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

Hier können später Parameter für den Node Exporter ergänzt werden. Im nächsten Schritt wird der systemd neu geladen, unser neuer Service node_exporter gestartet und der Service beim Systemstart aktiviert.

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

Den Status des Dienstes können wir mit dem folgenden Kommando anschauen:

sudo systemctl status node_exporter

 node_exporter.service - Node Exporter
     Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-01-11 19:49:43 CET; 42min ago
   Main PID: 56209 (node_exporter)
      Tasks: 5 (limit: 4538)
     Memory: 7.8M
        CPU: 4.650s
     CGroup: /system.slice/node_exporter.service
              -- 56209 /opt/node_exporter/node_exporter

Jan 11 19:49:43 shardik node_exporter[56209]: ts=2023-01-11T18:49:43.724Z caller=node_exporter.go:117 level=info collector=thermal_zone
Jan 11 19:49:43 shardik node_exporter[56209]: ts=2023-01-11T18:49:43.725Z caller=node_exporter.go:117 level=info collector=time
Jan 11 19:49:43 shardik node_exporter[56209]: ts=2023-01-11T18:49:43.725Z caller=node_exporter.go:117 level=info collector=timex
Jan 11 19:49:43 shardik node_exporter[56209]: ts=2023-01-11T18:49:43.725Z caller=node_exporter.go:117 level=info collector=udp_queues

Die Funktion können wir an der Stelle erneut mit curl überprüfen.

Node Exporter absichern

Auch wenn der Node Exporter lediglich Statusinformationen ausliest und anzeigt, sollte man das Webinterface nicht offen ins Internet stellen. Im folgenden stellen wir zwei Möglichkeiten zum Schutz des Webinterfaces vor.

Webserver auf localhost beschränken

Wenn man lediglich lokal (beispielsweise mit einer lokalen Prometheus-Instanz) auf die Daten zugreifen möchte, bietet es sich an den Webserver auf localhost zu beschränken. Dazu wird der Node Exporter mit den Parameter "--web.listen-address=localhost:9100" gestartet.

./node_exporter --web.listen-address=localhost:9100

Bei der Gelegenheit könnte man auch den Listening Port an eigene Anforderungen anpassen. Damit ist der Zugriff nur noch lokal möglich.

Basic Authentication

Wenn man über das Internet auf den Node Exporter zugreifen möchte, bietet sich eine Absicherung mittels HTTP Basic Authentication an. Dazu genieren wir zuerst ein Passwort mit dem Tool htpasswd (gehört zu den apache2-utils). Die Option "B" erzeugt ein mittels bcyrpt generiertes Kennwort. Der Username in unserem Beispiel lautet node_exp.

htpasswd -nBC 12 node_exp
New password:
Re-type new password:
node_exp:$2y$12$f9wfa1cmy4RJH.LKP.v.VOTOMNdWhafnRGrI9HBvm4KPh/ymq4Wnm

Die weitere Konfiguration für Basic Authentication erfolgt über ein YAML-File:

cat /etc/node-exporter/config.yml

basic_auth_users:
  node_exp: $2y$12$f9wfa1cmy4RJH.LKP.v.VOTOMNdWhafnRGrI9HBvm4KPh/ymq4Wnm

Damit der Node Exporter die Konfigurations-Datei liest wird er mit der Option "--web.config.file=/etc/node_exporter/config.yml" gestartet.

./node_exporter --web.config.file=/etc/node_exporter/config.yml

Nun sollte das Webinterface bei Zugriffen nach Benutzername und Password fragen.

Ausblick: Prometheus und Grafana

Bisher können wir die vom Node Exporter erzeugt Metriken lediglich in Echtzeit anschauen. Damit wir bei der Fehlersuche auch die Vergangenheit schauen können, müssen wir die Werte in eine Datenbank schreiben und schöne Diagramme erstellen. Dazu werden wir uns in weiteren Tutorials die Programme Prometheus und Grafana anschauen.

Node Exporter Daten in einem Grafana Dashboard
Node Exporter Visualisierung mit einem Grafana Dashboard

Mit Grafana sind wir in der Lage Daten aus den unterschiedlichsten Datenquellen (Prometheus, Telegraf, Influx, SNMP) in gemeinsamen Dashboards darzustellen.

Links

Aktuelle Artikel
Offene Ports - was ist das eigentlich?
Grundlagen zu UDP- und TCP-Port, offenen Ports und der Nutzung von netstat unter Linux und Windows

Iperf als Service konfigurieren
Der Artikel beschreibt wie sich Iperf3 auf einem Linux-System als Dienst einrichten lässt, um so einen permanenten Iperf-Server zu betreiben.

JPerf - grafische Oberfläche für iperf
Mit iperf kann die Übertragungsgeschwindigkeit von Netzwerken gemessen werden. JPerf ist eine grafische Oberfläche für iperf. Der Artikel beschreibt die Messung mit TCP und UDP und gibt Anregungen zur Fehlersuche bei Performanceproblemen.

Alle Artikel...
Neue Tutorials
Prometheus Node Exporter
Mit dem Prometheus Node Exporter lassen sich viele interessante Metriken von Linux-Servern auslesen. Die so gewonnenen Daten können in Prometheus gespeichert werden und mit Grafana in Dashboards anschaulich visualisiert werden.

VPN mit der FritzBox
Die Fritz!Box von AVM unterstützt den Aufbau von VPN-Verbindungen mit dem Protokoll IPsec. AVM stellt dafür die Windows-Software FRITZ!Fernzugang zur Verfügung. Das Tutorial beschreibt die Konfiguration eines VPNs mit der AVM FRITZ!Box Fon WLAN 7270.

Virtuelle Netze mit VMware Server
VMware Server bietet drei Arten der virtuellen Vernetzung für ein Gastsystem an: Bridged Networking, Network Address Translation (NAT) und Host-only Networking. Das Tutorial beschreibt die Möglichkeiten der einzelnen Betriebsarten und deren Konfiguration.

Alle Tutorials...
Neue Testberichte
Net Optics iBypass Switch
Der iBypass von Net Optics ist Bypass Switch zum unterbrechungsfreien Einschleifen eines Intrusion Prevention Systems.

ePowerSwitch-4
Der ePowerSwitch-4 ist eine Schuko-Steckdosenleiste mit Ethernet-Interface und integriertem Webserver. Über einen Browser lassen sich die vier Schuko-Steckdosen über das Netzwerk schalten.

Alle Testberichte...

 

 
© 2004-2023, network lab - we make your net work - Netzwerkforum
aktualisiert am 19.01.2023