FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: Mitch am 19 Dezember 2014, 14:29:28

Titel: fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: Mitch am 19 Dezember 2014, 14:29:28
Hallo Zusammen,

nachdem ich in letzter Zeit viele Probleme (Performance, Abstürtze, etc.) hatte, wollte ich eine vernüftige Überwachung von fhem einrichten, um eine bessere Verfügbarkeit zu erreichen.

Durch Zufall bin ich auf eine Interessante Lösung von User gandy gestossen: http://forum.fhem.de/index.php/topic,25110.msg204529.html#msg204529
Hierbei wir das kostenlose Tool monit benutzt: http://mmonit.com/monit/

Ich habe den Ansatz von gandy genommen und noch etwas für meine Bedürfnisse erweitert. Ich möchte dies hier gerne zusammen schreiben, damit auch andere interessierte user es hier finden können.

monit installieren
sudo apt-get install monit

monit einrichten. Geht recht einfach, indem man das control file anpasst
sudo nano /etc/monit/monitrc

Hier habe ich erstmal den Webzugriff auf Port 2812 für User der Gruppe dialout eingeschalten:
  set httpd port 2812 and
     allow @dialout


Dann habe ich mir für die zu überwachenden Prozesse "Regeln" definiert. In meinem Fall perl, fhem, mysql, hcitool und sonos.
Hier kann man nach belieben Dinge hinzu packe.
check process perl
       matching "perl"
       start program = "/opt/fhem/fhemstart.sh"
       stop program = "/opt/fhem/fhemstop.sh"
       if cpu usage > 15% for 10 cycles then exec /opt/monit/monitpushover.sh
       if cpu usage > 90% for 10 cycles then restart

check process fhem with pidfile /var/run/fhem/fhem.pid
        start program = "/opt/fhem/fhemstart.sh"
        stop = "/opt/fhem/fhemstop.sh"
        if cpu usage > 15% for 10 cycles then exec /opt/monit/monitpushover.sh
        if failed host localhost port 7070 with send "knock\n" expect "hello." timeout 20 seconds then restart
        if cpu usage > 90% for 10 cycles then restart
        if 5 restarts with 5 cycles then timeout

check process mysql with pidfile /var/run/mysqld/mysqld.pid
       start program = "/usr/sbin/mysqld"
       stop program = "/bin/bash -c 'kill -s SIGTERM `cat /var/run/mysqld.pid`'"
       if cpu usage > 15% for 10 cycles then exec /opt/monit/monitpushover.sh
       if cpu usage > 95% for 10 cycles then restart

check process lescan
        matching "/usr/bin/hcitool lescan"
        if cpu usage > 10% for 10 cycles then exec /opt/monit/monitpushover.sh

check process sonos
        matching "00_SONOS.pm"
        if cpu usage > 10% for 10 cycles then exec /opt/monit/monitpushover.sh


Um das PID File von fhem zu nutzen, muss folgendes globale Attribut gesetzt werden:
attr global pidfilename /var/run/fhem/fhem.pid
Hierbei auf die Rechte achten! (danke an betateilchen)


Ich lasse mich bei bestimmten Dingen (z.B. CPU Last vom Perl Prozess über 15%) per Pushover benachrichtigen.
Hierzu benötigt man einen Account bei Pushover: https://pushover.net/

Ich rufe aus monit den Script monitpushover.sh auf:
#!/bin/sh
/usr/bin/curl -s \
  -F "token=token ID" \
  -F "user=user ID" \
  -F "message=[$MONIT_HOST] $MONIT_SERVICE - $MONIT_DESCRIPTION" \
  https://api.pushover.net/1/messages.json


Im Script muss die Token und User ID entsprechend angepasst werden.

Ansonsten habe ich wie von gandy beschrieben ein Device in fhem angelegt:
define cmd_knock cmdalias knock AS { "hello." }

Dieses wird von monit per if failed host localhost port 7072 with send "knock\n" expect "hello." timeout 20 seconds then restart "überwacht".
Der Vorteil hierbei ist, auch wenn der fhem Prozess noch in der Prozessliste ist, aber hängt, reagiert er nicht mehr auf die telnet Anfrage und sendet kein hello mehr zurück. Dies wird wiederum von monit registriert und ein Neustart von fhem wird initiiert.

Start und Stop von fhem habe ich auch in extra Scripte ausgelagert.

Anbei noch zwei Bilder der monit Weboberfläche.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: forum-merlin am 01 März 2015, 11:01:52
coole sache!
Danke dass Du es aufgeschrieben hast.
Ich packe es mit auf meine To-Do Liste der Dinge die ich dann auf meiner neuen Kiste einpflegen will.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: Alveole am 14 September 2015, 20:59:25
Hallo,
Danke für den Script - funktioniert super!
Nur der Pushover Script geht bei mir nicht. Natürlich habe ich die Userdaten eingetragen
es kommt immer
Zitatcurl: option -F: is badly used here

Hast Du eine Idee und funktioniert das bei Dir?
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: Mitch am 14 September 2015, 23:43:31
Muss ich mal bei mir testen.
Geht aber erst am WE, bin unterwegs.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: Alveole am 16 September 2015, 16:22:17
Hallo,
Mein Problem mit den Pushover-Nachrichten hab ich gelöst - es war nur ein Schreibfehler meinerseits!!!

Nun stellt sich bei mir seit 1 Tag (warum auch immer erst jetzt) das Problem: keine Berechtigung für die pid-Datei.
Du schreibst nur "Hierbei auf die Rechte achten! "
Welche sind dies und wo?

Danke und Sorry für die dumme Frage die mein Fehler war!
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: Mitch am 17 September 2015, 11:14:50
Hatte ich auch, hier die Lösung:

    Auf der Systemkonsole als root: "mkdir -p /var/run/fhem"
    Auf der Systemkonsole als root: "chown -R fhem:root /var/run/fhem"
    in fhem: attr global pidfilename /var/run/fhem/fhem.pid
    in fhem: save config
    in fhem: shutdown restart
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: Amenophis86 am 19 November 2015, 16:42:43
Bei mir ist das Problem, sobald ich den Pi neustarte, ist der Ordner "var/run/fhem" wieder weg und damit lässt sich FHEM nicht starten. Betriebssystem ist OSMC. Eine Lösung, wie man das umgehen kann?
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: Wernieman am 20 November 2015, 10:06:05
Wie ich in einem anderen Thread schon geschrieben habe:
http://forum.fhem.de/index.php/topic,30604.0.html (http://forum.fhem.de/index.php/topic,30604.0.html)

ZitatQuick and Dirty:
Im Init-Script von FHEM den Ordner anlegen lassen und richtige Berechtigung setzen. Dann erst FHEM starten ...

Es ist ein noramles Unix-Doing, das der /var/run Ordner nach einem Neustart gelöscht/wiederangelegt ist, aber eben ohne die Unterordner
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: HansDampfHH am 14 Juli 2016, 20:33:37
Moin, habe auch nun monit laufen und Deine Idee umgesetzt.
Eigentlich schon ganz gut. Monit läuft, FHEM erstellt ein pid-File.

Wenn ich nun testweise FHEM herunterfahre springt monit an und startet FHEM neu weil das pid-File ja fehlt.

Das einzige was bisher nicht funktioniert ist das telnet Kommando:

if failed host localhost port 7072 with send "knock\n" expect "hello" timeout 20 seconds then restart


Wenn ich auf der Kommandozeile "echo "knock" | netcat localhost 7072" eingebe erhalte ich "hello".

Nun wollte ich das testen und habe in FHEM als Rückgabe "hallotest" definiert. Nun sollte monit ja eigentlich darüber stolpern und neu starten.
Aber da tut sich nichts. Hat jemand eine Idee wie ich hier weiter komme?
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: betateilchen am 16 Juli 2016, 12:45:07
Warum muss man einfachste Dinge maximal kompliziert lösen?
Und was nützt mir eine Pushover-Nachricht, dass mein fhem hängt, wenn ich 2000km von zuhause weg bin?

Einen "hängenden" fhem Prozess hatte ich in all den Jahren noch nie, wohl aber ein abgestürztes fhem, bspw. wegen wide-chars in irgendwelchen Frontend Informationen. Ein abgestürztes dhem heilt systemd von ganz alleine durch einen fhem-Neustart, ohne dass es dazu monit bedarf.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: HansDampfHH am 16 Juli 2016, 13:24:59
Dank VPN spielt es keine Rolle, ob ich 100 oder 5.000 Km entfernt bin.
Praktisch nur wenn ich mich direkt zu Hause einwählen kann um zu schauen was los ist bevor die ganze Familie nicht mal mehr Licht anmachen kann.

Das freut mich, dass Dein FHEM noch nie hängen geblieben ist.
Bei mir ist das leider schon vorgekommen. Und ja, ich versuche die Ursache zu beseitigen.
Genau auf diesem Weg kann ich das nämlich genau dann wenn es passiert.

"Warum muss man einfachste Dinge maximal kompliziert lösen?"
Das fragt mich meine Frau auch. Warum ich nicht einfach den Lichtschalter benutze?
Weil es mir Spaß macht.

Edit: send/expect läuft nun. Ich habe den Rückgabewert angepasst.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: Benni am 16 Juli 2016, 13:29:57
Zitat von: HansDampfHH am 16 Juli 2016, 13:24:59
bevor die ganze Familie nicht mal mehr Licht anmachen kann.

eventuell solltest du aber auch dein Gesamtkonzept nochmal überdenken. ;)
Grundsätzliche Funktionen, wie Licht und Heizung sollten idealerweise auch ohne FHEM noch funktionieren.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: betateilchen am 16 Juli 2016, 13:56:05
Zitat von: HansDampfHH am 16 Juli 2016, 13:24:59
Dank VPN spielt es keine Rolle, ob ich 100 oder 5.000 Km entfernt bin.

Egal ob mit VPN oder ohne - wer Wert auf ein "bisschen sicheres" fhem legt, verschafft seiner Installation keinen Zugang von aussen. Und wer glaubt, VPN sei sicher, glaubt auch an Landhausstil und Laminatfussboden - für mich sind das alles Irrwege.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: HansDampfHH am 16 Juli 2016, 14:28:45
@Benni
Es ist eine wirtschaftliche Entscheidung gewesen diverse Steh-/Tischlampen durch EUR 5,- Steckdosen zu steuern.
Natürlich kann man diese auch entfernen und Licht schalten.

Die Grundsatzdiskussion über Sicherheit lass ich mal. Ich habe auch kein wired sondern nutze potentiell unsicher und manipulierbare Funk-/Wlan-Komponenten.
Muss ja jeder selber entscheiden, ob er es praktisch findet auch von unterwegs Komponenten zu schalten. Für mich macht aber gerade das einen großen Faktor bei SmartHome aus.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: betateilchen am 16 Juli 2016, 14:35:59
Zitat von: HansDampfHH am 16 Juli 2016, 14:28:45
Muss ja jeder selber entscheiden, ob er es praktisch findet auch von unterwegs Komponenten zu schalten. Für mich macht aber gerade das einen großen Faktor bei SmartHome aus.

Nur um das klarzustellen: das sind doch zwei völlig getrennte Themen.

Auch ich kann meine fhem Installation von jedem Punkt der Erde aus beeinflussen, an dem es eine Internetverbindung gibt. Aber ich kann das eben, ohne dazu eine direkte Verbindung von meinem Endgerät unterwegs zu meiner fhem Installation zuhause zu benötigen.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: herrmannj am 16 Juli 2016, 14:37:49
sorry, ich muss mal das folgende loswerden, weil ich es unschön finde.

Jemand stellt eine Lösung vor und bekommt als Antwort: "unnötig, überflüssig, brauch ich nicht" etc. Mag ja alles sein, für den TE und Poster hat es aber sichtlich einen Wert. Welchen Wert haben denn aber Allgemeinpositionen wie " er glaubt, VPN sei sicher, glaubt auch an Landhausstil " ?

Tacheless: natürlich kann *eine konkrete VPN Implementierung* mit einem *konkreten Versionsstand* eine bekannte Vulnerability aufweisen - für die es in der Regel ein Update gibt. Völlig anderes Thema.

Hier gehts doch aber darum das sich der TE über die korrekte Funktion seines Servers benachrichtigen lassen möchte. Total valide. Wenn man das nicht benötigt und nichts beitragen mag -> Post überspringen.

vg
joerg
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: betateilchen am 16 Juli 2016, 14:43:25
Hallo Jörg,

Die hier vorgestellte "Lösung" per monit ist bald zwei Jahre alt. Nun hat jemand nach einem dreiviertel Jahr diesen Thread ausgegraben und geschrieben "ich mach das jetzt auch so, wie hier beschrieben". Da sollte einfach erlaubt sein, darauf hinzuweisen, dass es zwischenzeitlich vielleicht auch andere/aktuellere/einfachere Lösungen geben könnte.

Und VPN ist nicht sicher. Egal in welchem Versions- und/oder Patchlevel 😀
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: HansDampfHH am 16 Juli 2016, 15:25:31
"dass es zwischenzeitlich vielleicht auch andere/aktuellere/einfachere Lösungen geben könnte"

Wie wäre es denn der Einfachheit halber gewesen einfach darauf hinzuweisen wie es mittlerweile einfacher geht?
Bin gespannt wie ich es denn noch lösen könnte wobei das hier beschrieben Prozedere nun sehr gut funktioniert.
Monit zu nutzen ist ja ohnehin nicht ganz verkehrt.

Obgleich Deinem Engagement hier finde ich Deine Art zu schreiben oder zu antworten oft nicht angebracht. Sehr schade.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: fiedel am 17 Juli 2016, 10:00:10
ZitatWie wäre es denn der Einfachheit halber gewesen einfach darauf hinzuweisen wie es mittlerweile einfacher geht?
Das hat er uns ja schon verraten:
ZitatEin abgestürztes dhem heilt systemd von ganz alleine durch einen fhem-Neustart, ohne dass es dazu monit bedarf.
Mich würde ja noch interessieren, wie betateilchen nun von außen zugreift. Ich will im Winter mal endlich NGINX mit SSL, BasicAuth und ggf. noch fail2ban als Sicherheitserhöhung einrichten. Das ist vermutlich noch unsicherer als VPN...  ???

Gruß
Frank
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: betateilchen am 17 Juli 2016, 13:17:10
Zitat von: fiedel am 17 Juli 2016, 10:00:10
Das hat er uns ja schon verraten:

Schön, dass es endlich jemandem auffällt :)

Zitat von: fiedel am 17 Juli 2016, 10:00:10
Mich würde ja noch interessieren, wie betateilchen nun von außen zugreift.

Nochmal: ich greife nicht von aussen direkt auf mein fhem zu.

Grundsätzlich habe ich zwei Möglichkeiten, meine fhem "von aussen" Kommandos zu geben.


In beiden Fällen funktioniert die Kommunikation asynchron, ohne eine direkte Verbindung herzustellen. Der umgekehrte Weg läuft über InfoPanels, die alle fünf Minuten aktualisiert und auf einem externen Webserver bereitgestellt werden.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: fiedel am 17 Juli 2016, 20:13:38
Vielen Dank Udo!  Kalender ist nichts für mich - schon gar nicht der von Google, aber das mit den Mails ist interessant. Da gibt es ja auch ein Modul für. Werde das mal im Hinterkopf behalten...

Gruß
Frank
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: betateilchen am 17 Juli 2016, 22:41:24
Meine von fhem genutzten Kalender liegen auf meinem eigenen ownCloud Server, der über ein qualifiziertes SSL Zertifikat verfügt.

Die emails, die ich meinem fhem schicke, sind ebenfalls mit Zertifikat digital unterschrieben, und mein fhem prüft auf diese Tatsache.
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: harway2007 am 18 Juli 2016, 00:51:53
am Anfang schreibt der Author:

Hier habe ich erstmal den Webzugriff auf Port 2812 für User der Gruppe dialout eingeschalten:
Code: [Auswählen]
  set httpd port 2812 and
     allow @dialout
und dann :
Dann habe ich mir für die zu überwachenden Prozesse "Regeln" definiert. In meinem Fall perl, fhem, mysql, hcitool und sonos.
Hier kann man nach belieben Dinge hinzu packe.
usw...

kann mir bitte jemand sagen wo die Scripte hinkommen ????
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: ChrisW am 13 August 2016, 21:43:02
Wenn ich meinen PI neu starte ist der order /var/run/fhem .. wieder weg :(
Ist das normal das das nicht dauerhaft gespeichert bleibt ? fhem hat auch keine Rechnte einen neuen Ordner /Datei anzulegen
Titel: Antw:fhem mit monit Überwachen - fhem Verfügbarkeit
Beitrag von: vencam am 27 Juni 2022, 10:32:14
Der Thread ist zwar schon ne Weile alt, aber vielleicht hilft es ja dem einen oder anderen.

Damit /var/run/fhem automatisch gestartet wird, führt man folgenden Befehl aus:

sudo systemctl edit --full fhem

.. und macht unter [Service] (nach Group=dialout) diese Einträge:

[Service]
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p /var/run/fhem
ExecStartPre=/bin/chown -R fhem:dialout /var/run/fhem


Danach STRG+X und mit J speichern.