AndroidNetzwerk & IPOffice & Business

Checkmk: Android überwachen – am Beispiel Speicherplatz

Auch ohne expliziten Checkmk-Agenten lassen sich Smartphone & Co. überwachen

Vor einiger Zeit gab es mal einen von Dritten entwickelten Agenten für Android, leider ist dieser aus Google Play verschwunden. Natürlich lässt sich der Status der Geräte selbst einfach per Ping monitoren, aber wenn zum Beispiel auch der verfübgare Speicherplatz gecheckt werden soll? Dann tut es auch eine Bastellösung ohne übertriebenen Aufwand.

Bastelvariante

Die professionelle Variante wäre auch nicht allzu kompliziert: Im Checkmk-Handbuch gibt es einen gut verständlichen Artikel, wie man eigene Agenten-Plugins programmiert - mit ein paar simplen Zeilen Python. Und daraus ließe sich mit etwas Erfahrung bei der App-Entwicklung für Android auch ein schlanker Agent bauen.

Nun könnte ich (endlich) mit Python anfangen und dabei auch gleich meine bescheidene Erfahrung mit der App-Entwicklung ausbauen, aber im Grunde lohnt es sich nicht - mir geht es eher ums Prinzip ;) Erfreulicherweise geht das auch einfacher und mit Tools, die vermutlich (????) jeder kennt, der sich tatsächlich für ein wenig Android-Monitoring mit Checkmk interessiert: Apache, Termux, curl, crontab und ein Minimum an Shell-Script.

Aufwand für einen ersten Service für den Speicherplatz: Vielleicht 30 Minuten.

Workflow

Der Checkmk-Server bekommt die Daten von den Agenten als schlichten Text in einem bestimmten Format. Je nach Check werden diese Daten dann interpretiert, Services werden ins Monitoring aufgenommen und Status berechnet.

Die Daten können aber auch auf etlichen anderen Wegen übergeben werden, zum Beispiel eine simple HTTP-Anfrage. Man kann also einfach die Daten des Android-Systems über einen Webserver bereitstellen und vom Checkmk-Server per curl und entsprechender Host-Regel abholen.

Hier mal der Workflow im Überblick:

  1. Android-Client: Apache-Server läuft via Termux.
  2. Android-Client: Minimales Shell-Skript schreibt formatierte Speicherplatz-Daten in Datei im Apache-Webroot.
  3. Android-Client: Shell-Skript per crontab regelmäßig ausführen lassen.
  4. CMK-Server: Android-Host nutzt Datenquellprogramm/Spezialagent statt Agenten.
  5. CMK-Server: Simples Datenquellprogramm fragt per curl die Datei im Apache-Webroot an.

Wie genau das geht, seht Ihr gleich Schritt für Schritt. Ob das die beste aller Möglichkeiten ist sei mal dahingestellt, aber für meine Zwecke genügt es. Und natürlich lässt sich das Ganze noch massiv ausbauen: Die eigentlichen Monitoring-Daten zum Speicherplatz liefert das Standard-Linux-Werkzeug df - genau wie beim normalen Checkmk-Linux-Agenten! Und andere Daten wie die CPU-Temperatur oder die RAM-Belegung ließen sich auf die gleiche Art und Weise besorgen. Und wieder wird es hübsch: Da auch der originale Agent letztlich meist auf viele solcher Standard-Tools zurückgreift, müsst Ihr Euch um die Interpretation der Daten auf dem Checkmk-Server keine Gedanken machen - die Benennung der Datensektionen muss nur dem Original entsprechen.

Im Grunde steckt der eigentlich Kniff eh in der Android-App Termux: Darüber bekommt Ihr eine ganz normale Shell mit eigenem Paketmanagement. Ihr könnt sogar über die Android-API auf Hardware-Informationen zugreifen. Wie wäre es mit folgendem Check: Ist mein Handy runtergefallen? Auch das ließe sich ziemlich fix realisieren, allerdings müssten dann doch ein paar wenige Python-Zeilen her, da die Android-Sensordaten freilich nicht standardmäßig von Checkmk interpretiert werden ;)

1. Host: Apache installieren

Installiert zunächst Termux - aus Google Play oder besser gleich aus dem Open-Source-Store F-Droid. Zu Termux gibt es auch allerlei Erweiterungen, zum Beispiel für Widgets oder den API-Zugriff; installiert diese am besten gleich mit.

Ruft anschließend die Termux-Shell auf und installiert den Apache-Webserver:

pkg install apache2

pkg ist ein Wrapper für apt und erledigt ein paar Zusatzaufgaben, aber apt funktioniert alternativ auch.

Wichtig: Standardmäßig befindet Ihr Euch im Home-Verzeichnis unterhalb der Termux-Ordnerstruktur und auf das Android-Root-Verzeichnis / gibt es freilich keinen Zugriff. Den Apache-Webroot findet Ihr daher unter ../usr/share/apache2/default-site/htdocs aus Sicht des Home-Verzeichnisses.

Eine "It Works"-Testseite könnt Ihr auf anderen Rechnern im Netz über die IP und Port 8080 erreichen, also etwa 192.168.178.45:8080. Wenn der Server läuft, kann es mit Checkmk losgehen.

2. Host: Monitoring-Daten besorgen

Nun besorgt Ihr mit df die Daten, manikürt sie ein wenig und schreibt sie in eine Datei data (oder wie auch immer) im Webroot:

echo '<<<df>>>\n' $(df | egrep -v 'loop|block|tmpfs') > ../usr/share/apache2/default-site/htdocs/data

Das prodziert etwa solch einen Output:

DREI VERDAMMTE SPITZE KLAMMERN ... df>>> 
/dev/fuse          52389356 44801708   7485432  86% /storage/emulated

VERDAMMTE ANMERKUNG: Sorry, das elende Wordpress will das Spitze-Klammern-Gebilde aus dem echo-Befehl unbedingt schließen, selbst in Code-Blöcken ... Ihr wisst aber sicher was gemeint ist. Normale Anmerkung: Eigentlich müsste es echo -e heißen, um den Umbruch nach dem df-Gebilde auszugeben, das scheint bei der Termux-Implementierung aber nicht so zu sein - probiert es einfach aus und ergänzt bei Bedarf.

Die df-Zeile ist Checkmks Deklaration für eine Datensektion, wie auch normale Agenten sie ausspucken, was Ihr mit

cmk -d meinhost

als Site-Nutzer auf dem Checkmk-Server ausprobieren könnt.

egrep wirft schlicht die eher nutzlosen loop-, block- und tmpfs-Dateisysteme aus der Ausgabe, anschließend landet alles in der Datei data im Webroot.

3. Server: Datenquellprogramm anlegen

Aus Gründen der Nachvollziehbarkeit, fangt am besten mit dem Datenquellprogramm als solches an. Dafür müsst Ihr freilich als Instanz-Nutzer auf dem Server angemeldet sein, also etwa für die Instanz mysite.

Legt hier also ein Skript mytest unter local/bin/ an:

mysite:~? vim local/bin/mytest

Der Inhalt könnte kaum simpler sein:

#!/bin/sh
curl 192.168.178.45:8080/data

Anschließend noch kurz mit

chmod +x local/bin/mytest

ausführbar machen - fertig. Zu erklären gibt es hier nichts, die curl-Ausgabe ist schlicht der Inhalt der data-Datei.

4. Server: Host konfigurieren

Legt wie gewohnt einen Host für das Android-Gerät an - die Angabe von IP-Adresse und Namen genügt schon. Anschließend ruft Ihr die Regel Individual program call instead of agent access auf, in Checkmk 2.0.0 zu finden über Setup/Agents/Other integrations/Custom integrations.

Hier gebt Ihr zwei Werte ein:

  • Command line to execute: mytest
  • Explicit host: Der eben erstellte Android-Host

Damit wird für den Android-Host eben festgelegt, dass nicht der Agent befragt, sondern das angegebene Skript aufgerufen werden soll - welches wiederum per curl die Ergebnisse des df-Skripts auf dem Android-Gerät besorgt.

Per Regel werden die Daten vom Skript statt vom Agenten besorgt.

5. Host: Automatisieren

Wenn alles funktioniert sollte das Skript freilich regelmäßig ausgeführt werden. Packt also die df-Zeile von oben in ein Skript, etwa mydf im Home-Verzeichnis und macht es ausführbar.

Wie immer unter unixoiden Systemen erledigt die Planung crontab. Das müsst Ihr aber zunächst installieren:

pkg install cronie

Ruft dann wie üblich über

crontab -e

den Editor auf. Dann geht es wie ebenso gewohnt mit der obskuren crontab-Syntax weiter, etwa für Aufrufe stündlich um halb:

30 * * * *  sh $HOME/mydf

Generell ließe sich hier noch einiges optimieren, zum Beispiel den automatischen Start beim Booten des Android-Geräts. Aber grundsätzlich funktioniert das Monitoring nun und Ihr könnt fleißig weitere Daten(sektionen) schreiben und curlen.

Oder Ihr schaut nach einer ganz anderen Lösung, schließlich laufen auch Python-Skripte unter Termux, Daten lassen sich über andere Wege auf den Server transportieren. Wie gesagt, das war für mich einfach eine naheliegende, intuitive Lösung, weil sich alles mit mir bekannten Tools und Workflows erledigen lässt.

Mehr zu Checkmk haben wir hier. Und falls Ihr mal Hilfe für die Checkmk-Befehle auf der Kommandozeile braucht, schaut mal in unsere hauseigene Linux-Terminal-Hilfe cli.help - oder versucht es direkt mit:

curl cli.help/checkmk

Viel Spaß!

Einstiegsbild unter Verwendung von: Foto von Deepanker Verma von Pexels

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"