Vorsicht, heiß – oder: Wie man seinen Montag abend sinnvoll mit Linux vertrödeln kann

Zeit für einen Gastauftritt.

Ich habe gerade an meinem Heim-Server in kleinlichster Sisyphusarbeit die Sensordaten der Hardwareüberwachung lm_sensors in eine dauerhafte Statistik (über das Tool Cacti) übernommen. Dazu gehören neben CPU- und Systemtemperatur sowie Lüfterdrehzahl auch die Spannungswerte der Stromversorgung. So kann ich (hoffentlich) ziemlich genau sehen, wenn sich Schwächeanfälle anbahnen… und außerdem ist es irgendwie cool. Zumindest für Menschen ohne Leben wie mich. 🙂

Da es schon spät ist und ich meinen Hintern schon seit drei Stunden in mein Sofa bohre, gibt’s nur eine Kurzversion – ich hoffe, dass sie trotzdem für jemanden nützlich sein kann. Sie ist auch ein schönes Beispiel dafür, wie man mit wenig Aufwand und ein paar UNIX-Bordmitteln schnell eine brauchbare Lösung häkeln kann.
Ich empfehle aufgrund meiner hektischen Beschreibungsweise, sich über die im Rezept verlinkten… äh… Links eingehend mit den verwendeten Tools vertraut zu machen. Ich sage nur, dass es geht, und wie ich es ungefähr gemacht habe. 🙂

Hier folgt nun das Rezept:

Zutaten:
1x Linux-Server
1x lm_sensors
1x Apache2
1x MySQL
1x cacti
1x Texteditor
n Tassen Kaffee
k-1 Bier (das letzte lässt man besser weg)
j Stück Pizza

All diese Zutaten werden mit jeder guten Linux-Distribution mitgeliefert. Ich selbst verwende Ubuntu Server 7.10.

Zunächst braucht man ein funktionierendes lm_sensors-Setup. Unglücklicherweise war mein Mainboard derart neu, dass der Überwachungs-Chip auf selbigem vom aktuellen Ubuntu-Kernel (2.6.22) noch nicht unterstützt wird. Aber sobald man den Treiber (in meinem Fall der f71882fg) vom 2.6.24-Kernel zurückportiert hat, klappts auch damit; einfach Makefile und Kconfig im drivers/hwmon-Verzeichnis anpassen, f71882fg-Source rüberkopieren, make oldconfig, und schon lernt auch der alte Kernel mit neuen Modulen umzugehen. Und das ganz ohne neu zu booten. Natürlich ist dieses Prozedere auf jedem Rechner und jedem Chipsatz anders. Sobald man aber mittels sensors-detect seine Hardware findet und ein sensors die gewünschten Messwerte ausspuckt, haben wir schon fast gewonnen.

Also, nur nochmal damit keine falschen Hoffnungen entstehen: lm_sensors müsst Ihr selbst einrichten – ich helfe auf Anfrage gern, habe aber selber keine Ahnung, so dass Ihr mit einem Besuch der Webseite sicher besser beraten seid.

Nachdem man nun MySQL, Apache und Cacti installiert hat (unter Ubuntu mit apt-get fix gemacht – ich gehe davon aus, dass Ihr beides am Laufen habt), brauchen wir ein Skript, das die Werte von lm_sensors ausliest und Cacti / RRDTool zur Verfügung stellt. Ich benutze folgenden schnellen Ein-Zeilen-Hack, den ich in eine Datei namens /usr/share/cacti/site/scripts/check_sensors.sh gepackt habe:

#!/bin/sh
sensors | awk ‘{print $1 $2}’ | grep “:” | grep -v “Adapter” | sed “s/°C//;s/\+//g” | tr ‘\n’ ‘ ‘ | sed “s/CPU/fcpu/;s/CPU/tcpu/;s/3\.3V/v33/” | sed “s/Vcore/vcore/;s/Vram/vram/;s/5VSB/v5vsb/” | sed “s/5V/v5/;s/12V/v12/;s/Vchip/vchip/;s/3VSB/v3vsb/” | sed “s/Battery/vbatt/;s/System/tsys/”

Das sieht übel aus – ist es auch. Die Kurzerklärung: Die Ausgabe von sensors wird durch awk in ihre Bestandteile zerlegt; das sind durch Doppelpunkte getrennte (Sensorname,Wert)-Tupel. Alles andere (das sind Zeilen ohne Doppelpunkte sowie die Zeile namens “Adapter”) werden durch grep herausgefiltert. Dann sorgt sed dafür, dass überflüssige Zeichen wie “°C” und “+” verschwinden. tr schreibt danach alles in eine Zeile, in der das folgende sed dann die (Sensornamen) durch kürzere und eindeutige Strings ersetzt, die Cacti nachher parsen kann. Dieses Skript muss mit an Wahrscheinlichkeit grenzender Sicherheit für jedes System einzeln angepasst werden. Die sed-Aufrufe am Schluss können auch gerne in einen Aufruf zusammengefasst werden; ich habe das nur aus Blog-Umbruchgründen auf diese Weise gesetzt. Ach ja: alles von “sensors” bis “/tsys/”” gehört in eine Zeile.

Wenn “sensors” das hier anzeigt:

f71882fg-isa-0a00
Adapter: ISA adapter
3.3V: +3.44 V
Vcore: +1.10 V (max = +2.04 V)
Vram: +3.39 V
5VSB: +5.05 V
+5V: +5.09 V
12V: +12.14 V
Vchip: +0.91 V
3VSB: +3.42 V
Battery: +3.30 V
CPU: 2617 RPM
CPU: +21°C (high = +85°C, hyst = +81°C)
(crit = +100°C, hyst = +96°C) sensor = transistor
System: +28°C (high = +85°C, hyst = +81°C)
(crit = +100°C, hyst = +96°C) sensor = transistor

sollte die “check_sensors.sh”-Ausgabe nachher so aussehen:

v33:3.44 vcore:1.10 vram:3.39 v5vsb:5.05 v5:5.09 v12:12.14 vchip:0.91 v3vsb:3.42 vbatt:3.30 fcpu:2617 tcpu:22 tsys:28

Jetzt müssen die Templates in Cacti angelegt werden; sinnvoll sind drei verschiene Graphen – je einer für Temperaturen, Lüfterdrehzahlen und Spannungen. Ich werde nur die Schritte für die Temperaturen aufzählen, die anderen Graphen erstellt man analog.

Als erstes brauchen wir eine “Data Input Method” für unser Skript. Hier definieren wir den Pfad zum Skript sowie die Ausgabefelder. Eingabefelder haben wir nicht. Am Schluss sollte das Ganze so aussehen:

klick mich

Anschließend brauchen wir ein neues “Data Template”. Der “Add”-Knopf ist oben rechts.

klick mich

Ich sollte an dieser Stelle darauf hinweisen, dass im Data-Template alle Data-Sources für diesen Graphen angelegt werden müssen. Im Beispiel sind das “tcpu” und “tsys” für die CPU- und System-Temperatur. Wichtig ist vor allem, dass man unten bei “Output Field” das richtige Feld aus der Data Input Method angibt.

Fein. Dann können wir ja jetzt das entsprechende “Graph-Template” erstellen.

klick mich

Der Screenshot zeigt nicht alle Werte, allerdings habe ich diese sowieso auf den Standardeinstellungen gelassen. Es ist auf jeden Fall nützlich, auch einmal einen Blick auf die übrigen, mitgelieferten Templates zu werfen, um zu sehen, wie dort gekocht wird.

Die Graph-Templates sind die Hauptarbeit – hier müssen (wie unter “Graph Template Items” zu sehen”) alle Datenquellen eingerichtet werden. Die hervorgehobenen Items #1 und #5 sind nachher der tatsächliche Graph, die übrigen Items werden in die Legende gedruckt (zu sehen am Typen GPRINT) und geben Maximal- und Durchschnittswerte an.

Ist das Graph-Template fertig, kann ein neuer Graph über “Create->New Graphs” zur Kollektion hinzugefügt werden – vorausgesetzt, es existiert bereits ein Device, dem die Graphen zugeordnet werden können. Wer aber eine funktionierende Cacti-Installation besitzt, sollte damit auch keine Probleme mehr haben.

Soviel zur Kurzfassung – ich möchte mich für die hastige Form entschuldigen, aber für mehr reicht die Tinte in meinem Füller… ich meine die Energie in meinem Akku nicht mehr.

Wenn noch Fragen sind – ich bin die ganze Woche hier. 🙂

2 Kommentare

  • 1. Der Header sieht scheiße aus im Firefox – Überschrift zu lang?
    2. In welcher Linux-Dirti gibt es Kaffee (…Java??) und Pizza?
    3. Wieso ist hier eine Captcha-Grafik, aber unter dem “Morgenstund hat Gold im Mund”-Eintrag nicht?
    🙂

    PS: 4. Das Captcha kann ich nicht lesen

  • Hier war ein Captcha? Ich hab nichts gemacht….

    Aus dem Leitfaden für ITler: “Hast Du dran rumgefummelt?” …. “..ja..” … “Arme Sau!”

    Ansonsten: Das Essen gehört doch nicht zur Linux-Distri, Mööööönsch. 😉 Das musst Du Dir selber kaufen, machen und hinstellen. Wird nur dringend zur Erhaltung des Seelenheils empfohlen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird niemals weitergegeben.Erforderliche Felder sind mit einem * markiert.