Monit – abyśmy byli pewni, że Domoticz działa…

Ostatnio miałem dużo problemów z Raspberry Pi i kiepskim zapisem na kartę SD. Czego bym nie robił, po dwóch, trzech tygodniach system 'się rozjeżdżał’, finalnie kończąc na 'Memory fault’ i 'Kernel panic’. Kiepska sprawa. Co prawda na Raspberry Pi nie stoją żadne krytyczne usługi, ale ciągłe odzyskiwanie z backupu nie jest najciekawszą pracą, jaką można robić…

Na pewno pomogło przeniesienie systemu Raspberry Pi na dysk HDD, ale dodatkowo można dołączyć sprawdzanie statusu Domoticz – u mnie są problemy z pluginami i czasem lubi nie wystartować.

Pomaga w tym 'monit’ – oprogramowanie, które dba o to, aby nasze procesy były uruchomione, a w razie ich nieprzewidzianego zatrzymania – pojawiły się ponownie. Opisywał to już Łukasz Jokiel na swoim blogu, ale od wiedzy jeszcze nikt nie umarł, dlatego pozwolę sobie opisać to i u siebie.

Na początku zaktualizujmy system:

sudo apt-get update

sudo apt-get upgrade

I zainstalujmy 'monit’

sudo apt-get install monit

Od razu po tym możemy przystąpić do zmian w domyślnym pliku konfiguracyjnym. Jest dość pokaźny, w większości opatrzony komentarzami przy przykładach.

sudo nano /etc/monit/monitrc

Dopiszmy sekcję (zamiast HASŁO podajecie hasło jakim chcecie się logować do monit’a w przeglądarce):

set httpd port 8890 and
use address localhost  # only accept connection from localhost
allow localhost        # allow localhost to connect to the server 
allow admin:HASŁO # and require user 'admin’ with password 'monit’
use address 0.0.0.0    # only accept connection from localhost
allow 0.0.0.0/0.0.0.0
allow @monit    # allow users of group 'monit’ to connect (rw)
allow @users readonly # allow users of group 'users’ to connect readonly

Wszyscy sugerują na końcu, więc dodajmy na końcu również:

check process domoticz with pidfile /var/run/domoticz.pid
start program = „/etc/init.d/domoticz.sh start”
stop  program = „/etc/init.d/domoticz.sh stop”
if failed
   url http://127.0.0.1:80/json.htm?type=command&param=getversion
       and content = '”status” : „OK”’
   for 2 cycles
   then restart
if 5 restarts within 5 cycles then exec „/sbin/reboot”

UWAGA – ostatnia linijka mówi o tym, że jeżeli 10 (2*5) razy nie powiedzie się uruchomienie Domoticz, to nastąpi restart Raspberry Pi – bądźcie świadomi! Do tego – zmieńcie port Domoticz na odpowiedni o Was (127.0.0.1 jest adresem hosta lokalnego) – u mnie jest to 80, domyślnym w Domoticz jest 8080 (dziękuję za sugestię).

Teraz

sudo systemctl enable monit.service
sudo systemctl restart monit.service

Sprawdzamy. Pierwsza komenda sprawdzi poprawność pliku konfiguracyjnego, druga poda pełen status.

sudo monit -t

sudo monit status

Wygląda na to, że działa. Teraz wystarczy

sudo service domoticz stop

i zobaczymy czy monit przywróci go do życia spoza grobu.

Taram! Bangla!

Strona przedstawia się następująco:

Ważne – wpisujecie adres swojego Raspberry, po nim port 8890 (lub taki, jaki ustawiliście w skrypcie konfiguracyjnym monitrc). Jeżeli macie konfiguracje rozproszone (Domoticz na innej maszynie, albo chcecie monitorować procesy na innych Raspberry) – musicie wpisać odpowienie adresy IP i porty.

Mała sugestia – jeżeli będziecie chcieli kiedyś wyłączyć świadomie Domoticz (chcecie coś sprawdzić, dodać nowy plugin powoli, itp.) – monit od razu włączy serwis Domoticz. No, taka jego funkcja. Dlatego to, musicie po kolei wydać polecenia:

sudo /etc/init.d/monit stop 

sudo /etc/init.d/domoticz.sh stop
Zmieniamy, mieszamy, testujemy, sprawdzamy…

I później:

sudo /etc/init.d/domoticz.sh start

sudo /etc/init.d/monit start

Dla pewności, poniżej zawartość całego pliku:

  set daemon 120
  set logfile /var/log/monit.log
  set idfile /var/lib/monit/id
  set statefile /var/lib/monit/state
  set eventqueue
      basedir /var/lib/monit/events
      slots 100
   include /etc/monit/conf.d/*
set httpd port 8890 and
use address localhost
allow localhost
allow admin:xxxxxxxxxxxx
use address 0.0.0.0
allow 0.0.0.0/0.0.0.0
allow @monit
allow @users readonly

check process domoticz with pidfile /var/run/domoticz.pid
start program = „/etc/init.d/domoticz.sh start”
stop  program = „/etc/init.d/domoticz.sh stop”
if failed
   url http://127.0.0.1:80/json.htm?type=command&param=getversion
       and content = '”status” : „OK”’
   for 2 cycles
   then restart
if 5 restarts within 5 cycles then exec „/sbin/reboot”

38 komentarzy do “Monit – abyśmy byli pewni, że Domoticz działa…”

  1. Dziękuję za sugestię. Postaram się odpowiednio profilować artykuły. Do tej pory często po prostu opisywałem i zostawiałem użytkownikowi miejsce na eksperymenty.

    Odpowiedz
  2. Cześć,
    Monit wykonuje swoje zadanie poprawnie – tj. po położeniu Domoticza, podnosi go na nowo. Pytanie mam następujące: monit ma opóźnienie w odświeżaniu informacji nt. statusu działania usługi Domoticza. Czy jest to w jakiś sposób sparametryzowane (czas opóźnienia odświeżania informacji)?

    Odpowiedz
  3. W sumie się nad tym nie zastanawiałem, ale czy nie będzie za to odpowiadał parametr 'set daemon 120 # check services at 2-minute intervals' w monitrc?

    Odpowiedz
  4. Dokładnie tak, set deamon przetestowany na różnych wartościach.

    Kolejne pytanie: zauważyłem, że monit nie jest uruchamiany po restarcie Rpi3. Czy przy jego domyślenj konfiguracji jest to normalne zachowanie? Jeśli tak, to w jaki – bezpieczny – sposób, dodać uruchamianie monit do autostartu?

    Odpowiedz
  5. Wpisy z loga:

    [CET Feb 26 17:17:05] info : Starting Monit 5.20.0 daemon with http interface at [0.0.0.0]:8890
    [CET Feb 26 17:17:05] info : 'raspberrypi' Monit 5.20.0 started
    [CET Feb 26 17:17:05] error : HTTP server — Cannot translate IPv4 socket [0.0.0.0]:8890 — Name or service not known
    [CET Feb 26 17:17:05] error : HTTP server — Cannot translate IPv6 socket [0.0.0.0]:8890 — Name or service not known
    [CET Feb 26 17:17:05] error : 'domoticz' process is not running
    [CET Feb 26 17:17:05] info : 'domoticz' trying to restart
    [CET Feb 26 17:17:05] info : 'domoticz' start: '/etc/init.d/domoticz.sh start'

    Po restarcie Rpi3, przy sprawdzaniu czy monit działał (sudo monit status), dostawałem w konsoli: HTTP server — Cannot translate IPv4 socket [0.0.0.0]:8890 — Name or service not known

    Zastosowałem rozwiazane z wpisem w rc.local.

    sudo nano /etc/rc.local

    wiersz dodany do rc.local:
    home/pi/scripts/runmonit.sh

    zawartość runmonit.sh:
    /usr/bin/sudo systemctl restart monit.service

    Taka kombinacja spowodowała, że monit działa po restarcie Rpi3.

    Nie wiem jednak czy jest to prawidłowe/bezpieczne rozwiązanie.

    Odpowiedz
  6. Świeży log, po zakomentowaniu rc.local i restarcie Rpi3.

    [CET Feb 26 19:50:19] info : Starting Monit 5.20.0 daemon with http interface at [0.0.0.0]:8890
    [CET Feb 26 19:50:19] info : 'raspberrypi' Monit 5.20.0 started
    [CET Feb 26 19:50:19] error : HTTP server — Cannot translate IPv4 socket [0.0.0.0]:8890 — Name or service not known
    [CET Feb 26 19:50:19] error : HTTP server — Cannot translate IPv6 socket [0.0.0.0]:8890 — Name or service not known
    [CET Feb 26 19:50:19] error : 'domoticz' process is not running
    [CET Feb 26 19:50:19] info : 'domoticz' trying to restart
    [CET Feb 26 19:50:19] info : 'domoticz' start: '/etc/init.d/domoticz.sh start'
    [CET Feb 26 19:52:29] info : 'domoticz' process is running with pid 479

    Więc teoretycznie monit działa, czyż nie? A jednak, sprawdzenie czy monit działa po uruchomieniu Rpi3 (sudo monit status), daje dokładnie komunikat:
    Cannot create socket to [0.0.0.0]:8890 — Connection refused

    Dopiero po wpisaniu (sudo systemctl restart monit.service), po sprawdzeniu (sudo monit status), dostaję poprawny raport z działania usług, kóre monit monitoruje.

    Odpowiedz
  7. W sumie to sam Domoticz, bo często jakiś plugin etc przestaje działać i zazwyczaj restart Domoticza pomaga. Dlatego jakby go codziennie w nocy restartować to nawet jak w ciągu dnia coś "padnie" to na drugi dzień już będzie działało.
    To trzeba wpisać w crontab aby o danej godzinie restartować Domoticza?

    Odpowiedz
  8. Cześć,

    Czy aby to zrobić to malina musi być podpięta do internetu po kablu, czy to nie ma znaczenia?

    Niby zrobiłem wszystko tak jak jest w poradniku, a mam coś takiego:

    pi@DOMOTICZ:~ $ sudo monit -t
    'check system' not defined in control file, failed to add automatic configuration (service name DOMOTICZ is used already) — please add 'check system ' manually
    /etc/monit/monitrc:25: Service name conflict, DOMOTICZ already defined '/sbin/reboot'

    pi@DOMOTICZ:~ $ sudo monit status
    'check system' not defined in control file, failed to add automatic configuration (service name DOMOTICZ is used already) — please add 'check system ' manually
    /etc/monit/monitrc:25: Service name conflict, DOMOTICZ already defined '/sbin/reboot'

    Odpowiedz
  9. Witam. Swietny poradnik jak i pozostałe.
    Mam pytanie ponieważ u mnie po resecie Maliny i sprawdzenie statusu Monit:
    Cannot create socket to [0.0.0.0]:8890 — Connection refused

    Czyli monit nie uruchamia się sam po resecie jak zrobić aby uruchamiał się razem z Maliną ?

    Odpowiedz
  10. możliwe, że Monit działa, tylko serwer http nie wstaje, przetestuj – nie uruchamiaj ponownie usługi Monita, wyłącz Domoticza i poczekaj chwile – prawdopodobnie Domoticz wstanie, ewentualnie jako workaround problemu można w CRONie dodać wpis, który spowoduje po restarcie Malinki, na przykład po 2 minutach, restart (jak wyżej) serwisu Monita 🙂

    Odpowiedz
  11. Witam, faktycznie po instalacji i resecie Maliny, Monit jakby nie wstawał. Serwer http nie działa, komenda sudo monit status nie daje pozytywnego rezultatu, ale Domoticz jest restartowany. Po 2 minutach uruchamia się ponownie.

    Odpowiedz
  12. Witam. Jeśli nadal ma ktoś problem z uruchomienie monita po restarcie Raspberry i komunikatem:
    Cannot create socket to [0.0.0.0]:8890 — Connection refused
    wystarczy w sudo nano /etc/monit/monitrc
    usunąć # na początku linii:
    # with start delay 240 # optional: delay the first check by 4-minutes (by
    serwer http wstaje z opóźnieniem ustawionym w tej linijce, ja skróciłem opóźnienie do 65 i jest ok.

    Odpowiedz
  13. Witam, mam problem z połączeniem do myDomoticz po restarcie domoticza połączenie z myDomoticz jest utrzymywane średnio przez dobę a później w myDomoticz jest czerwony ludzik. Jak zmusić monita aby pilnował również tego. Dzięki za pomoc.

    Odpowiedz

Skomentuj Cezar Anuluj pisanie odpowiedzi