ADMIN

2021

02

2021-02-01T12:00:00

Sichere Virtualisierung

PRAXIS

050

Monitoring

Linux

Linux-Rechner überwachen

Messstation im Eigenbau

von Pete Metcalfe

Veröffentlicht in Ausgabe 02/2021 - PRAXIS

Für die Überwachung von Rechnern stehen einige leistungsfähige Technologien bereit. In mittleren bis größeren Umgebungen bietet sich etwa das Simple Network Monitoring Protocol an. Im Fall von älteren oder leistungsschwächeren Servern können Sie aber auch einfachere Kommandozeilen-Tools und SSH für das Monitoring verwenden – samt grafischer Ausgabe der Messwerte.

Die Kommandozeilen-Werkzeuge aus unserem Workshop lassen sich mittels einer Secure Shell (SSH) remote einsetzen. Der Output wiederum lässt sich, auf die wichtigsten Schlüsselparameter reduziert, grafisch in einem Node-RED-Dashboard darstellen (Bild 1). In diesem Beitrag zeigen wir, wie Sie mit dem "iostat utility" [1] die CPU-Auslastung im Blick behalten und mit dem "lm_sensors"-Paket [2] sowie dem Werkzeug "hddtemp" [3] die Betriebstemperaturen überwachen.
CPU-Auslastung kontrollieren
Das Werkzeug "iostat" gehört zum "sys-stat"-Paket und ist womöglich bereits in Ihrem älteren Linux-System vorhanden. Falls nicht, installieren Sie es mit
suod apt-get install sysstat
Iostat erzeugt einen Bericht über die CPU-, Geräte- und Dateisystemauslastung. Die Ausgabe des Tools lässt sich mit einem Bash-Statement so parsen, dass nur die relevanten Werte wiedergegeben werden.
Die Kommandozeilen-Werkzeuge aus unserem Workshop lassen sich mittels einer Secure Shell (SSH) remote einsetzen. Der Output wiederum lässt sich, auf die wichtigsten Schlüsselparameter reduziert, grafisch in einem Node-RED-Dashboard darstellen (Bild 1). In diesem Beitrag zeigen wir, wie Sie mit dem "iostat utility" [1] die CPU-Auslastung im Blick behalten und mit dem "lm_sensors"-Paket [2] sowie dem Werkzeug "hddtemp" [3] die Betriebstemperaturen überwachen.
CPU-Auslastung kontrollieren
Das Werkzeug "iostat" gehört zum "sys-stat"-Paket und ist womöglich bereits in Ihrem älteren Linux-System vorhanden. Falls nicht, installieren Sie es mit
suod apt-get install sysstat
Iostat erzeugt einen Bericht über die CPU-, Geräte- und Dateisystemauslastung. Die Ausgabe des Tools lässt sich mit einem Bash-Statement so parsen, dass nur die relevanten Werte wiedergegeben werden.
In Listing 1 sehen Sie ein Beispiel, wie Sie die vierte Zeile des Outputs mit dem Kommando sed nehmen und den Wert "%idle" am Ende der Zeile mittels awk parsen, um letztlich an das sechste String-Item zu gelangen.
Listing 1: Parsen des iostat-Outputs
§§nonumber iostat -c Linux 4.15.0-72-generic   (lubuntu)        2020-05-02         i686             (4 CPU) avg-cpu:   %user   %nice   %system   %iowait   %steal   %idle                     8.37        0.03     3.33          1.29                       86.97 # Get 4th line of the iostat output iostat -c   |   sed -n 4p                     8.36         0.03      3.33           1.29       0.00      86.99 # Now get the 6th string iostat -c   |   sed -n 4p   |   awk '{print $6}' 12 87.02
CPU-Temperatur messen
Um die Hardwaresensoren aus dem Paket "lm-sensors" einzuspielen, verwenden Sie den Befehl
sudo apt-get install lm-sensors
Nun muss die Software die für das Monitoring verfügbaren Sensoren erkennen, dazu nutzen Sie sudo sensors-detect.
Dabei sehen Sie eine Reihe von Abfragen darüber, welche Sensoren überprüft werden sollen. Danach gibt Ihnen der Befehl sensors die Hardware aus, die gefunden wurde. Spezifische Sensoren zeigen Sie mit dem Befehl
sensors <Chip-Name>
an. In Listing 2 sehen Sie ein Beispiel dafür, wie Sie den sensors-Befehl nutzen können, um einen "dell_smm-virtual-0"-Chipsatz zu überwachen. Der CPU-Temperaturwert lässt sich mit dem Befehl grep parsen , der in unserem Beispiel nach der Zeile mit dem Wert "CPU" sucht. Das Kommando awk gibt anschließend den zweiten Wert des Strings aus: +40,0°C.
Listing 2: Parsen der Sensordaten
§§nonumber sensors dell_smm-virtual-0 dell_smm-virtual-0 Adapter: Virtual device Processor Fan: 2687 RPM CPU:                   +40.0°C Ambient:              +34.0°C SODIMM:            +33.0°C # Get the CPU temperature sensors dell_smm-virtual-0 | grep 'CPU' CPU: +40.0°C # Return just the temperature sensors dell_smm-virtual-0 | grep 'CPU' | awk '{print $2}' +40.0°C
 
Bild 1: Über SSH binden wir unsere Überwachungs-Nodes an.
Festplattentemperatur überwachen
Das Tool "hddtemp" zur Überwachung der Festplattentemperatur installieren Sie mit
sudo apt-get install hddtemp
Standardmäßig benötigt hddtemp Super­user-Rechte. Um also die Ergebnisse des Tools auch Nicht-Superusern verfügbar zu machen, nutzen Sie
sudo chmod u+s /usr/sbin/hddtemp
Um nun die Temperatur einer Festplatte auszulesen, geben Sie deren Device-Name ein. Im unserem beispielhaften Fall von "/dev/sda" wäre dies der Befehl:
hddtemp /dev/sda
 
/dev/sda: WDC WD3200BPVT-75JJ5TO: 34°C
Auch hier lässt sich awk wieder nutzen, um die Ausgabe auf den eigentlich interessanten Faktor, die Temperatur, zu beschränken. Entspricht diese beispielsweise dem vierten Wert in der Ausgabe, nutzen Sie folgenden Befehl:
hddtemp /dev/sda | awk ' {print $4}'
 
34°C
Remote-Befehle absetzen
Anstatt unseren Linux-Server permanent die Überwachungsdaten an einen Monitoring-Rechner schicken zu lassen, können wir Letzterem auch Abfragen bei Bedarf ermöglichen. Hierfür können wir SSH verwenden, wobei bei dieser Art des Zugangs eine Passworteingabe notwendig ist. Das ist bei manuellen Eingaben noch in Ordnung, steht aber einer Automatisierung im Weg. Daher bieten sich zwei Lösungen an:
1. Sie nutzen "ssh-keygen", das ein SSH-Schlüsselpaar erzeugt und in einem Nutzerverzeichnis abspeichert. Der Standard-SSH-Client kann damit ohne manuelles Eingeben eines Passworts eine Verbindung herstellen.
2. Mit "sshpass" verwenden Sie alternativ einen SSH-Client, der die Mitgabe von Benutzername und Passwort als Kommandozeilenoption unterstützt.
Wir empfehlen "ssh-keygen" aus Gründen der Passwortsicherheit. Zu Testzwecken können Sie aber auch "sshpass" nutzen und mit
sudo apt-get install sshpass
auf Ihrem System einspielen. In Listing 3 sehen Sie, wie Sie die Temperaturwerte der CPU (Zeile 1) und der Festplatte (Zeile 13) abfragen. Mit grep und awk lassen sich wieder nur die relevanten Informationen ausgeben. Für die CPU zum Beispiel:
sshpass -p <MeinPasswort>
      ssh <MeinBenutzername> @192.168.0.116
      sensors | grep temp1 | awk '{print $2}'
+30.5°C
beziehungsweise für die Festplatte
sshpass -p <MeinPasswort>
      ssh <MeinBenutzername> @192.168.0.116
      hddtemp /dev/sda | awk '{print $3}'
 
+39°C
Listing 3: CPU- und Festplattentemperatur
§§nonumber sshpass -p <mypassword> ssh <username>@192.168.0.116 sensors dell_smm-virtual-0 Adapter: Virtual device Processor Fan: 3044 RPM CPU:                    +31.0°C Ambient:               +33.0°C SODIMM:             +33.0°C acpitz-virtual-0 Adapter: Virtual device temp1:                  +51.5°C      (crit = +107.0°C) sshpass -p <mypassword> ssh <username>@192.168.0.116 hddtemp /dev/sda /dev/sda: HTS548040M9AT00: 39°C
Damit haben wir nun eine Möglichkeit geschaffen, für uns interessante Überwachungswerte remote von Linux-Rechnern abzufragen. Im nächsten Schritt reichen wir diese Werte an ein Node-RED-Dash­board weiter.
Bild 2: Eine einfache Abfrage mit den Nodes "Inject", "BigSSH" und "Debug", von links nach rechts dargestellt.
Visualisierung mit Node-RED
Node-RED [4] ist eine webbasierte programmierbare Umgebung, an die Sie eine Vielzahl von Nodes anbinden können – in unserem Fall richten wir eine Node für den SSH-Zugriff ("bigssh") und eine als Scheduler für die Datenabfrage ("bigtimer") ein. Die Installation von Node-RED ist in der Dokumentation unter [5] beschrieben, während das Setup der beiden Nodes entweder manuell oder über den Punkt "Manage palette" möglich ist. Für einen einfachen Testlauf, bei dem wir einen Linux-Server manuell auf die Temperaturwerte hin abfragen, würden wir neben der Node "bigssh" noch die Nodes "Inject" und "Debug" verwenden (Bild 2). Die Inject-Node dient dabei dem Ausführen der hinterlegten Logik.
Ein Doppelklick auf die bigssh-Node öffnet das Konfigurationsfenster. Im Feld "myssh" tragen Sie Ihren Benutzernamen, Host und das ssh-keygen-Passwort ein. Die bigssh-Node reicht den ersten Output (Zeile "CommandLine") an die Debug-Node weiter. Diese sendet die Mitteilung samt Payload an den Debug-Tab. Falls die Debug-Node nicht das erwartete Ergebnis des SSH-Befehls wiedergibt, zeigt die bigssh-Zeile "minError" eine entsprechende Fehlermeldung an.
Um das Abfrageintervall zu steuern, setzen wir jetzt "bigtimer" ein. Auch kommen für die grafische Ausgabe der Daten die beiden Dashboard-Nodes "gauge" und "chart" zum Einsatz. Die bigtimer-Node bringt eine gute Auswahl an Planungsmöglichkeiten mit. So bietet sich beispielsweise eine Abfrage pro Minute an.
Was die grafische Darstellung angeht, stehen Ihnen eine Reihe von Möglichkeiten zur Verfügung. Wir nutzen wie erwähnt "gauge" (Tachoanzeige) und "chart" (Kurvenverlauf). So sehen wir auf einen Blick die aktuelle Temperatur sowie deren Verlauf über einen bestimmten Zeitraum hinweg. Ein Doppelklick auf die Dashboard-Nodes ermöglicht Ihnen das Festlegen der Darstellung, was beispielsweise die Beschriftung und Skalierung angeht.
Haben Sie Ihre Abfrage wie gewünscht zusammengestellt, genügt ein Klick auf den Punkt "Deploy" auf der rechten Seite des Menüs, um das Projekt zu starten. Zugriff auf das Node-RED-Dashboard erhalten Sie über die URL "http://<Node-RED-IP-Adresse>:1880/ui/".
Bild 3: Unser Node-RED-Dashboard zeigt uns die Daten auf zwei Arten an: als Verlaufskurve und als Tacho (chart und gauge).
Fazit
Mit einigen wenigen Werkzeugen und etwas Handarbeit bauen Sie sich eine automatisierte Überwachung von Linux-Rechnern und deren Hardware. Natürlich sind die hier gezeigten Beispiele nur ein Ausschnitt der Möglichkeiten, die sich auf viele weitere Kommandos ausweiten lassen.
(dr)
Link-Codes
[4] Node-RED-Dokumentation: https://flows.nodered.org/
[5] Anleitung "Getting started with Node-RED": https://nodered.org/#get-started