Skip to content

Systemwerte des Raspberry Pi (allg. Linux) in einer Datenbank aufzeichnen

Linux

Um meinen Raspberry Pi virtuell im Blick zu haben bzw. allgemein beobachten zu können wie er sich verhält wenn ich ihm neue Aufgaben gebe lasse ich ihn alle 5 Minuten diverse Systemwerte in eine externe Datenbank schreiben.Raspberry Pi
Ursprünglich hatte ich an eine lokale sqlite Datenbank gedacht, das dürfte die SD-Karte aber sehr stressen und letztlich zerstören. Also habe ich mich für eine Datenbank bei meinem Webhoster entschieden. Ein zufällig generiertes Kennwort mit 28 Stellen sollte dafür sicher genug sein eek
Was ich hier beschreibe ist zwar auf den Raspberry Pi bezogen, letztlich aber Linux-Universell. Auf einem “richtigen” Linuxsystem könnte man es genauso machen wenn man wollte, nur die Temperatur müsste anders abgefragt werden.

Zur Vorbereitung muss natürlich erstmal die Datenbank angelegt werden. Das habe ich vom Pi aus gemacht um die Verbindung zu testen und damit es hier im Blog auch universeller ist smile
Auf der Befehlszeile schickt folgende Zeile (es gehört alles in eine Zeile!) den SQL Befehl zum anlegen der Datenbank an den MySQL/MariaDB Server:

echo "USE [datenbankname]; CREATE TABLE systemwerte (id int auto_increment primary key, host varchar (32), date int unsigned, temp float unsigned, powerontime timestamp, load1 float unsigned, load5 float unsigned, load15 float unsigned, freq float unsigned, memtot int unsigned, memuse int unsigned, memfree int unsigned, numproc int unsigned, conntrack int unsigned, numloguser smallint unsigned, loggedinuser varchar(100));" | mysql -u[benutzername] -p[kennwort] -h[server]

Um die Systemwerte nun automatisch in die Datenbank zu schreiben habe ich das Verzeichnis /root/bin/ angelegt und darin ein kleines Script systemwerte_mysql.sh gepackt:

#!/bin/bash
echo "USE [datenbankname]; INSERT INTO systemwerte (host,date,temp,powerontime,load1,load5,load15,freq,memtot,memuse,memfree,numproc,conntrack,numloguser,loggedinuser) VALUES ('`hostname`',`date +"%s"`,`awk '{print $1/1000}' /sys/class/thermal/thermal_zone0/temp`,'`uptime -s`',`awk '{print $1,\",\",$2\",\",$3 }' /proc/loadavg`,`awk '{print $1/1000}' /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq`,`free|head -2|tail -1|awk '{print $2\",\"$3\",\"$4}'`,`ps aux|wc -l`,`cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count`,`who|wc -l`, '`who -q|head -1`')" | mysql -u[benutzername] -p[kennwort] -h[server]
(Das sind zwei Zeilen, das “echo…” ist eine Zeile)
Das Script wird mit einem chmod 700 nur noch für root lesbar gemacht (es enthält die Zugangsdaten für die Datenbank im Klartext!) und alle 5 Minuten per cron aufgerufen. Als root1 ruft man dafür crontab auf und gibt folgende Zeile ein:
*/5 /root/bin/systemwerte_mysql.sh
Das ruft nun alle 5 Minuten das Script auf das diverse Systemwerte in die Datenbank schreibt. Bei einem Problem oder wenn ich dem Pi neue Aufgaben gebe kann ich so nachvollziehen ob ihn etwas belastet.
Als Tabelle sieht das dann so aus:
idhostdatetemppowerontimeload1load5load15freqmemtotmemusememfreenumprocconntracknumloguserloggedinuser
3050raspi1139125540148.6922014-01-28 19:40:010.060.070.06700473864325920147944962001rowi
3049raspi1139125510148.1542014-01-28 19:40:0100.030.05700473864326004147860951471rowi
3048raspi1139125480248.1542014-01-28 19:40:010.030.040.05700473864325508148356951671rowi
3047raspi1139125450148.6922014-01-28 19:40:0100.030.05700473864325176148688961421rowi
3046raspi1139125420148.1542014-01-28 19:40:010.120.090.07700473864325144148720963641rowi
Die Uhrzeit ist ein Unix Timestamp, das ist praktisch für eine maschinelle Verarbeitung, für menschliche Auswertung will man das vielleicht mit FROM_UNIXTIME() abfragen eek Die Zeit des Systemstarts (powerontime) hab ich aber als menschenlesbaren Timestamp gespeichert. Ansonsten wird die CPU-Temperatur, die Systemlast (load), die Taktfrequenz, Speicherwerte, Anzahl der IP Verbindungen und Anzahl und Namen der angemeldeten User gespeichert.

Bisher hatte ich noch keinen Problemfall, falls der mal eintritt und mir etwas fehlt werde ich die Tabelle entsprechend erweitern. Freier Plattenplatz oder die letzten Zeilen von dmesg vielleicht. Aber das kommt wenn es so weit ist.

________

1 mein Pi läuft mit Arch Linux, da habe ich noch einen klassischen root User. Unter Raspbian entsprechend mit sudo ausführen.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Textile-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Twitter, Identica, Pavatar, Gravatar, Wavatars, Monster ID Autoren-Bilder werden unterstützt.
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
Formular-Optionen