Hardwaremonitoring Odroid U2/U3 Android

Aus Rechenkraft
Zur Navigation springen Zur Suche springen

Idee

Die Odroid U2/U3 werden unter Android gerne für das verteilte Rechnen (BOINC) eingesetzt. In der Regel laufen sie 24 Stunden am Tag und 7 Tage die Woche unter Vollast. Um herauszufinden, ob die Odroids in einem Temperaturbereich arbeiten, in dem der CPU-Takt nicht herabgesetzt wird, lassen sich die Odroids sehr gut überwachen.

In diesem Beitrag werden verschiedene Varianten betrachtet:

  • Variante 1: Ein Raspberry Pi unter Debian Wheezy sammelt die Informationen von zwei Odroids ein und stellt die Informationen grafisch durch eine einfache Webseite dar.
  • Variante 2: Ist eine Abwandlung von Variante 1, nur dass die Rolle des Raspberry Pi durch einen Windows 7 Rechner übernommen wird.
  • Variante 3: Diese Variante ist eine Erweiterung von Variante 2. Bei vielen Odroids wird die Darstellung auf einer einfachen Webseite schnell unübersichtlich. Die Variante 3 stellt die Informationen in einer Windows Minianwendung dar.

Eine Warnung vorweg: Die vorgestellten Lösungsansätze verwenden zum Teil voreingestellte Default-Werte für Benutzernamen und Kennworte. Das Ziel ist es nicht eine bis ins Letzte abgesicherte Lösung zu präsentieren sondern generelle Ansätze aufzuzeigen. Es gibt durchaus noch Potential die Ansätze an der ein oder anderen Stelle sicherer zu machen.

Benötigte Software

Auf dem Raspberry Pi:

  • Webserver: lighttpd mit php
  • Datenbank zur Speicherung der Meßwerte: RRDTool (Round-Robin-Database)
  • expect (zur Ausführung von Befehlen auf den Odroid U3)

Auf den Odroid U2/U3:

  • BusyBox
  • Rooted SSH/SFTP Daemon
  • Script Manager - SManager

Auf dem Windows 7 Rechner:

  • Putty
  • WinSCP
  • (Xampp - Webserver)

Vorüberlegungen

Für alle drei Varianten gilt, dass die Informationen (Messwerte der Odroids) in einer Datei auf dem Odroid gespeichert werden sollen. Diese Datei wird dann entweder von dem Raspbery Pi oder dem Windows 7 Rechner gelesen und die darin enthaltenen Daten in einer RRD (Round-Robin-Datenbank) gespeichert.

Damit der Lösungsansatz erweiterbar bleibt, z.B. wenn weitere Odroid hinzukommen sollen, sind ein paar generelle Überlegungen anzustellen die unabhängig von der gewählten Variante sind. Eine weitere Notwendigkeit ergibt sich daraus, dass diese RRD im Nachhinein nur sehr beschränkt änderbar sind.

Im Rahmen dieses Artikels soll nur der CPU-Takt, die CPU-Temperatur und die CPU-Auslastung gespeichert werden. Damit später noch weitere Odroids hinzugefügt werden können liegt es nahe für jeden Odroid eine eigene RRD für die drei genannten Meßwerte anzulegen. Ein weiterer Odroid bedeutet dann eine weitere RRD.

Sollen später (nicht im Rahmen dieses Artikels) noch weitere Informationen gespeichert werden, z.B. Speicherauslastung, freier Platz im Filesystem usw., würden einfach weitere RRDs für die Odroids angelegt werden.

Man kann jetzt schon sehen: Bei mehreren Odroids und einer größeren Informationsfülle wird es komplex. Es lohnt sich an der Stelle sich ein paar Gedanken über die Namensgebung zu machen.

Für den Artikel hier verwenden wir folgendes Namenschema:

<Gerätebezeichnung>_<Nummer>_<cpu> 

Z.B.: u3_001_cpu oder u2_004_cpu

Noch ein paar weitere Punkte im Zusammenhang mit den RRD gilt es festzulegen: Über welchen Zeitraum sollen die gewonnenen Informationen gespeichert werden? In welchem Intervall werden die Informationen ermittelt? Welche Werte sollen aggregiert werden?

Für den Artikel hier wird der Zeitraum auf einen Tag festgelegt (1440 Minuten) und das Intervall auf 60 Sekunden.

Exkurs RRD

In den Vorüberlegungen ist verschiedentlich der Begriff RRD bzw. Round-Robin-Datenbank gefallen. Anders als herkömmliche Datenbanken wie MySQL, SQLLite, und weitere handelt es sich bei RRD um sogenannte Ringspeicher, d.h. die Datenbank ist so konzipiert, dass sie Informationen über einen definierten Zeitraum vorhalten kann. Wird das Ende dieses Zeitraum überschritten, werden die ältesten Informationen überschrieben.

Neben dem Speichern der angefallenen Informationen bieten diese RRD noch Aggregationsmöglichkeiten (Minimum über Zeitraum, Maximum über Zeitraum, Durchschnittswert) und die Möglichkeit der grafischen Darstellung in Form von Diagrammen. Die grafische Darstellung lässt es auch zu aus mehreren RRD ein gemeinsames Diagramm zu erstellen.

In diesem Artikel wird das Softwarepaket RRDTool von Tobias Oetiker verwendet. Es ist Open Source und für verschiedene Betriebssysteme verfügbar.

Variante 1: Raspberry Pi zur Überwachung der Odroids

Lösungsskizze

Auf den Odroid U2/U3 wird ein ein SSH Zugange installiert (Rooted SSH/SFTP Daemon). Dieser benötigt als Voraussetzung BusyBox - eine Art Schweizer Taschenmesser an Linux/Unix Befehlen.

Auf den Odroid U2/U3 wird ein Shell-Script installiert, das regelmäßig die Informationen (Temperatur, CPU-Takt und CPU-Auslastung) ausliest und in eine Datei schreibt.

Der Raspberry Pi kopiert regelmäßig die Datei von den Odroids und schreibt die Daten in eine Round-Robin-Datenbank. Die Informationen darin können im Anschluß grafisch dargestellt werden. Die Darstellung erfolgt über eine einfache Webseite.

Vorbereiten der Odroid U2/U3

Auf dem Odroid U2/U3 werden aus dem Play Store die folgenden Apps installiert und konfiguriert:

  • Busybox installieren und starten.
  • Rooted SSH/SFTP Daemon installieren (Voraussetzung: Busybox muss installiert sein) und starten. Der Start von der App ändert leider die Bildschirmdarstellung zur Konfiguration. Diese ist nach einem Neustart des Odroid wieder normal. In der Konfiguration muss eingestellt werden, dass die App beim Starten des Odroid mit startet. Es wird ebenso empfohlen zumindest das Kennwort zu ändern. Für den Lösungsansatz hier bleibt der Username auf root und das Kennwort auf abc123.
  • Script Manager - SManager

Wir öffnen eine Shell auf dem Raspberry Pi und melden uns per SSH an dem Odroid an:

ssh root@<IP_des_Odroid>

Auf dem Odroid lassen sich jetzt die folgenden Parameter auslesen:

  • CPU-Temperatur:
cat /sys/devices/platform/tmu/temperature 
  • CPU-Frequenz:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
  • CPU-Auslastung:
dumpsys cpuinfo | grep "TOTAL" | awk '{print $2 " " $3}'

Das Ganze wird jetzt noch in ein Shell-Script gepackt, dass wir durch den SManager automatisiert jede Minute ausgeführt wird. Für das Shell-Script und die Datei die die Messwerte speichern soll wird ein neues Verzeichnis angelegt:

mkdir /data/monitoring

Das Shell-Script anlegen:

vi /data/monitoring/monitoring.sh

Das Folgende kopieren und einfügen:

#!/system/bin/sh
FTP_PATH=/data/monitoring
FTP_FILE=u3_001_cpu.log
# Erst die Temperatur
cat /sys/devices/platform/tmu/temperature > $FTP_PATH/$FTP_FILE
# Dann die Taktfrequenz / 1000 zur Umrechnung in MHz
CPU_FREQ=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq`
echo "$((CPU_FREQ / 1000))" >> $FTP_PATH/$FTP_FILE
# Zum Schluss die CPU-Auslastung. Die Ausgabe ist mit einem % versehen, das wir  entfernen
CPU_USAGE=`dumpsys cpuinfo | grep "TOTAL" | awk '{print $3}'`
echo "${CPU_USAGE%?}" >> $FTP_PATH/$FTP_FILE

Tipp zu vi: Nachdem sich vi geöffnet hat die Taste i drücken (Insert). Den obigen Inhalt für monitoring.sh mit der Maus markieren und im vi die rechte Maustaste drücken. Der Code wird automatisch eingefügt. Mit der Taste Esc die Bearbeitung abbrechen und das Script mit der Tastenkombination :wq speichern.

Das Shell-Script muÃ? noch ausführbar gemacht werden:

chmod 777 /data/monitoring/monitoring.sh

Und Testlauf:

/data/monitoring/monitoring.sh

Als Ergebnis sollte jetzt im Verzeichnis /data/monitoring eine Datei, mit dem Namen der im Shell-Script festgelegt wurde (z.B. u3_001_cpu.log) , angelegt worden sein. Der Inhalt wird mit

cat u3_001_cpu.log

überprüft. Das Ergebnis könnte so aussehen:

65
1704
98

Diese Schritte sind für alle zu Ã?berwachenden Odroids auszuführen. Beim Anlegen des Shell-Scripts ist zu beachten, dass die Zeile

FTP_FILE=u3_001_cpu.log

individuell angepasst werden muÃ?. Der Name für diese Datei (alles bis zum .log) muÃ? mit dem Namen der RRD übereinstimmen!

Vorbereiten des Raspberry Pi

Installation von lighttpd

lighttpd ist ein schlanker, Resourcen schonender Webserver für den Raspberry Pi.

Die Installation von lighttpd und php erfolgt mit den nachfolgenden Befehlen:

sudo apt-get install lighttpd
sudo apt-get install php5-common php5-cgi php5

Konfiguration von lighttpd zur Nutzung von fastcgi:

sudo lighty-enable-mod fastcgi-php

Durchstarten des Webservers

sudo service lighttpd restart

Wenn bei der Eingabe der IP-Adresse von dem Raspberry Pi in einem Browser die BegrüÃ?ungsseite von lighttpd angezeigt wird war die Installation erfolgreich.

Installation von RRDTool

Die Installation von RRDTool geht ganz einfach mit dem folgenden Kommando über die Bühne:

sudo apt-get install rrdtool
Anlegen der RRD

In den Vorüberlegungen wurde dargelegt, dass jeder Odroid seine eigene RRD bekommen soll. Als Speicherort für die RRD wird ein Verzeichnis im Webserver-Verzeichnis angelegt:

sudo mkdir /var/www/rrd
sudo chown www-data:www-data /var/www/rrd

In einer RRD sollen die folgenden Datensätze (DS) gespeichert werden:

  • cpu_temp (CPU-Temperatur) mit Untergrenze 0 und Obergrenze 100
  • cpu_freq (CPU-Frequenz) mit Untergrenze 0 und Obergrenze 2000
  • cpu_usage (CPU-Auslastung) mit Untergrenze 0 und Obergrenze 100

Die Datensätze fallen alle 60 Sekunden an über einen Zeitraum von einem Tag (1440 Minuten). Die Aggregationen erfolgen über sogenannte Round-Robin-Archives (RRA). Für diesen Artikel sollen folgende RRA (als Teil der RRD) angelegt werden:

  • Durchschnitt
    • der letzten Stunde
    • der letzten 6 Stunden
    • der letzten 48 Stunden
  • Minimum
    • der letzten Stunde
    • der letzten 6 Stunden
    • der letzten 48 Stunden
  • Maximum
    • der letzten Stunde
    • der letzten 6 Stunden
    • der letzten 48 Stunden

Wichtig ist, dass der Namen der RRD exakt dem Namen der Datei mit den Messwerten übereinstimmt! RRD für den ersten Odroid U3 (mit Kommentare):

cd /var/www/rrd
rrdtool create u3_001_cpu.rrd --step 60 \     # alle 60 Sekunden ein Datensatz
  DS:cpu_temp:GAUGE:1440:0:100 \    # 1440 Werte, Wertebereich 0-100 Grad
  DS:cpu_freq:GAUGE:1440:0:2000 \   # 1440 Werte, Wertebereich 0-2000 MHz
  DS:cpu_usage:GAUGE:1440:0:100 \   # 1440 Werte, Wertebereich 0-100%
  RRA:AVERAGE:0.5:1:60 \        # Mittel aus Einzelwerten, 60 Werte = 1 h
  RRA:AVERAGE:0.5:60:6 \        # Mittel aus 60 Einzelwerten, 6 Werte = 6 h
  RRA:AVERAGE:0.5:60:48 \       # Mittel aus 60 Einzelwerten, 48 Werte = 48 h
  RRA:MIN:0.5:1:60 \        # Minimum aus Einzelwerten, 60 Werte = 1 h
  RRA:MIN:0.5:60:6 \        # Minimum aus 60 Einzelwerten, 6 Werte = 6 h
  RRA:MIN:0.5:60:48 \       # Minimum aus 60 Einzelwerten, 48 Werte = 48 h
  RRA:MAX:0.5:1:60 \        # Maximum aus Einzelwerten, 60 Werte = 1 h
  RRA:MAX:0.5:60:6 \        # Maximum aus 60 Einzelwerten, 6 Werte = 6 h
  RRA:MAX:0.5:60:48         # Maximum aus 60 Einzelwerten, 48 Werte = 48 h

In dem Befehl oben sind zur Erklärung der einzelnen Parameter Kommentare hinzugefügt (# mit Text). Diese bitte weglassen!

RRD für den zweiten Odroid U3 (ohne Kommentare):

rrdtool create u3_002_cpu.rrd --step 60 \
  DS:cpu_temp:GAUGE:1440:0:100 \ 
  DS:cpu_freq:GAUGE:1440:0:2000 \
  DS:cpu_usage:GAUGE:1440:0:100 \
  RRA:AVERAGE:0.5:1:60 \      
  RRA:AVERAGE:0.5:60:6 \      
  RRA:AVERAGE:0.5:60:48 \     
  RRA:MIN:0.5:1:60 \
  RRA:MIN:0.5:60:6 \
  RRA:MIN:0.5:60:48 \ 
  RRA:MAX:0.5:1:60 \  
  RRA:MAX:0.5:60:6 \  
  RRA:MAX:0.5:60:48   

Und wenn wir schon dabei sind, darf auch der Raspberry Pi selbst auch nicht fehlen:

rrdtool create rpi_001_cpu.rrd --step 60 \
  DS:cpu_temp:GAUGE:1440:0:100 \ 
  DS:cpu_freq:GAUGE:1440:0:2000 \
  DS:cpu_usage:GAUGE:1440:0:100 \
  RRA:AVERAGE:0.5:1:60 \      
  RRA:AVERAGE:0.5:60:6 \      
  RRA:AVERAGE:0.5:60:48 \     
  RRA:MIN:0.5:1:60 \
  RRA:MIN:0.5:60:6 \
  RRA:MIN:0.5:60:48 \ 
  RRA:MAX:0.5:1:60 \  
  RRA:MAX:0.5:60:6 \  
  RRA:MAX:0.5:60:48   

Aktualisierung der Werte in den RRD

offen

Darstellung und Auswertung der Ergebnisse

offen

Variante 2: Windows 7 zur Ã?berwachung der Odroids

Lösungsskizze

Auf den Odroid U2/U3 wird ein ein SSH Zugange installiert (Rooted SSH/SFTP Daemon). Dieser benötigt als Voraussetzung BusyBox - eine Art Schweizer Taschenmesser an Linux/Unix Befehlen.

Auf den Odroid U2/U3 wird ein Shell-Script installiert, das regelmäÃ?ig die Informationen (Temperatur, CPU-Takt und CPU-Auslastung) ausliest und in eine Datei schreibt.

Der Windows 7 Rechner kopiert regelmäÃ?ig die Datei von den Odroids und schreibt die Daten in eine Round-Robin-Datenbank. Die Informationen darin können im AnschluÃ? grafisch dargestellt werden. Die Darstellung erfolgt über eine einfache Webseite.

Vorbereiten der Odroid U2/U3

offen

Vorbereiten des Windows 7 Rechners

offen

Aktualisierung der Werte in den RRD

offen

Darstellung und Auswertung der Ergebnisse

offen

Variante 3: Windows 7 Minianwendung zur Ã?berwachung der Odroids

Lösungsskizze

Auf den Odroid U2/U3 wird ein ein SSH Zugange installiert (Rooted SSH/SFTP Daemon). Dieser benötigt als Voraussetzung BusyBox - eine Art Schweizer Taschenmesser an Linux/Unix Befehlen.

Auf den Odroid U2/U3 wird ein Shell-Script installiert, das regelmäÃ?ig die Informationen (Temperatur, CPU-Takt und CPU-Auslastung) ausliest und in eine Datei schreibt.

Der Windows 7 Rechner kopiert regelmäÃ?ig die Datei von den Odroids und schreibt die Daten in eine Round-Robin-Datenbank. Die Informationen darin können im AnschluÃ? grafisch dargestellt werden. Die Darstellung erfolgt über eine Minianwendung.

Vorbereiten der Odroid U2/U3

offen

Vorbereiten des Windows 7 Rechners

offen

Aktualisierung der Werte in den RRD

offen

Darstellung und Auswertung der Ergebnisse

offen