Monit installieren: Unterschied zwischen den Versionen
K (/bin/bash -c hinzugefügt) |
(Starte Monit im init-mode, nicht im daemon-mode) |
||
(12 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Über Monit == | |||
Monit ist ein ressourcensparendes Programm zur Überwachung eines Server oder von [[Daemon|Diensten ("Daemons")]] auf einem Server. | Monit ist ein ressourcensparendes Programm zur Überwachung eines Server oder von [[Daemon|Diensten ("Daemons")]] auf einem Server. | ||
Zeile 7: | Zeile 5: | ||
Es fragt regelmäßig den Zustand des zu überwachenden Prozesses ab und kann bei einem Absturz den Prozess selbstständig neu starten. Für Betriebssystem-Ressourcen, wie Festplatten-Kapazität oder CPU- und RAM-Auslastung, können Schwellwerte angegeben werden, bei deren Überschreitung Monit per E-Mail alarmiert und in eine Log-Datei protokolliert. | Es fragt regelmäßig den Zustand des zu überwachenden Prozesses ab und kann bei einem Absturz den Prozess selbstständig neu starten. Für Betriebssystem-Ressourcen, wie Festplatten-Kapazität oder CPU- und RAM-Auslastung, können Schwellwerte angegeben werden, bei deren Überschreitung Monit per E-Mail alarmiert und in eine Log-Datei protokolliert. | ||
In dieser Beschreibung wird der Start des Servers und von Monit durch den Paketadmin angenommen. Sollte ein davon verschiedener Domain-Admin der "Befehlshaber" sein, so müssen die Pfade entsprechend korrigiert werden. Von "/home/pacs/xyz00" zu "/home/pacs/xyz00/users/ | In dieser Beschreibung wird der Start des Servers und von Monit durch den Paketadmin angenommen. Sollte ein davon verschiedener Domain-Admin der "Befehlshaber" sein, so müssen die Pfade entsprechend korrigiert werden. Von "/home/pacs/xyz00" zu "/home/pacs/xyz00/users/user". | ||
{{Textkasten|rot|Besser systemd benutzen|Achtung: wir empfehlen nicht mehr den Einsatz von monit als Prozessmanager. Alle Anwendungen sollten mit [[Prozessmanagement mit systemd im Userspace|Systemd im Userspace]] gestartet werden. Monit kann weiterhin zur Überwachung des Servers eingesetzt werden.}} | |||
== Konfiguration == | == Konfiguration == | ||
Zeile 15: | Zeile 15: | ||
Wir erstellen also diese Datei im Hauptverzeichnis des Users und sorgen dafür, dass sie nur von diesem gelesen und beschrieben werden kann: | Wir erstellen also diese Datei im Hauptverzeichnis des Users und sorgen dafür, dass sie nur von diesem gelesen und beschrieben werden kann: | ||
< | <syntaxhighlight lang=shell> | ||
xyz00@hxx:~$ cd | xyz00@hxx:~$ cd | ||
xyz00@hxx:~$ touch .monitrc | xyz00@hxx:~$ touch .monitrc | ||
xyz00@hxx:~$ chmod 0600 .monitrc | xyz00@hxx:~$ chmod 0600 .monitrc | ||
xyz00@hxx:~$ edit .monitrc | xyz00@hxx:~$ edit .monitrc | ||
</ | </syntaxhighlight> | ||
Und füllen sie mit folgendem Inhalt: | Und füllen sie mit folgendem Inhalt: | ||
< | <syntaxhighlight lang=shell> | ||
set init | |||
set daemon 600 | set daemon 600 | ||
set logfile /home/pacs/xyz00/var/monit.log | set logfile /home/pacs/xyz00/var/monit.log | ||
Zeile 34: | Zeile 35: | ||
stop program "/bin/bash -c '/home/pacs/xyz00/etc/apache2/apache2_stop'" | stop program "/bin/bash -c '/home/pacs/xyz00/etc/apache2/apache2_stop'" | ||
if failed host example.tld port 8080 with timeout 60 seconds then restart | if failed host example.tld port 8080 with timeout 60 seconds then restart | ||
</ | </syntaxhighlight> | ||
'''Achtung:''' Dieses Beispiel geht davon aus, dass die entsprechenden Start- und Stopskripte existieren und der Pfad zum pidfile des Apachen stimmt. | '''Achtung:''' Dieses Beispiel geht davon aus, dass die entsprechenden Start- und Stopskripte existieren und der Pfad zum pidfile des Apachen stimmt. | ||
Zeile 40: | Zeile 41: | ||
== Monit Starten und Stoppen == | == Monit Starten und Stoppen == | ||
Wird nun per systemd realisiert dazu | |||
noch einen systemd service für Monit anlegen: | |||
''~/.config/systemd/user/monit.service'' | |||
<syntaxhighlight lang=ini> | |||
[Unit] | |||
Description=monit | |||
[Service] | |||
ExecStartPre=rm -f %h/.monit.id | |||
ExecStart=/usr/bin/monit -c %h/.monitrc | |||
[Install] | |||
WantedBy=default.target | |||
</syntaxhighlight> | |||
Service aktivieren und starten: | |||
<syntaxhighlight lang=shell> | |||
$ systemctl --user enable monit.service | |||
$ systemctl --user start monit.service | |||
</syntaxhighlight> | |||
== Managed Server monitoren == | == Managed Server monitoren == | ||
Zeile 57: | Zeile 73: | ||
bei der RAM- und CPU-Auslastung und der Festplatten-Auslastung der E-Mail alarmiert und ins monit.log protokolliert: | bei der RAM- und CPU-Auslastung und der Festplatten-Auslastung der E-Mail alarmiert und ins monit.log protokolliert: | ||
< | <syntaxhighlight lang=shell line> | ||
check system h00.hostsharing.net | check system h00.hostsharing.net | ||
if loadavg (1min) > 5 then alert | if loadavg (1min) > 5 then alert | ||
Zeile 72: | Zeile 88: | ||
if space usage > 85 % then alert | if space usage > 85 % then alert | ||
if inode usage > 85 % then alert | if inode usage > 85 % then alert | ||
</ | </syntaxhighlight> | ||
== Logfiles kontrollieren == | == Logfiles kontrollieren == | ||
Zeile 80: | Zeile 96: | ||
Damit das Logfile nicht zu groß wird, benutzen wir '''logrotate''', das von [[cron]] aufgerufen wird, einmal pro Woche das Logfile komprimiert und zwei alte Versionen hält. Dazu erstellen wir die Konfigdatei .logrotate im Hauptverzeichnis des Users: | Damit das Logfile nicht zu groß wird, benutzen wir '''logrotate''', das von [[cron]] aufgerufen wird, einmal pro Woche das Logfile komprimiert und zwei alte Versionen hält. Dazu erstellen wir die Konfigdatei .logrotate im Hauptverzeichnis des Users: | ||
<syntaxhighlight lang=shell> | |||
touch .logrotate | |||
</syntaxhighlight> | |||
Darin schreiben wir: | Darin schreiben wir: | ||
< | <syntaxhighlight lang=shell line> | ||
compress | compress | ||
Zeile 91: | Zeile 109: | ||
weekly | weekly | ||
} | } | ||
</ | </syntaxhighlight> | ||
Nun brauchen wir noch einen Aufruf von logrotate durch [[cron]]. Bitte beachten, logrotate merkt sich den letzten Zustand der Logdatei in einem Statusfile. Das muss in der [[Cron#Crontab|crontab]] mit angegeben werden. Wir editieren die crontab und schreiben: | Nun brauchen wir noch einen Aufruf von logrotate durch [[cron]]. Bitte beachten, logrotate merkt sich den letzten Zustand der Logdatei in einem Statusfile. Das muss in der [[Cron#Crontab|crontab]] mit angegeben werden. Wir editieren die crontab und schreiben: | ||
<syntaxhighlight lang=shell line> | |||
27 7 * * 5 logrotate -s /home/pacs/xyz00/.logrotate_state /home/pacs/xyz00/.logrotate | |||
</syntaxhighlight> | |||
Damit wird jeden Freitag um 7:27 Uhr das monit.log "rotiert". '''Achtung:''' bitte einen anderen Tag und eine andere Uhrzeit wählen, damit nicht alle logrotates zur gleichen Zeit starten. | Damit wird jeden Freitag um 7:27 Uhr das monit.log "rotiert". '''Achtung:''' bitte einen anderen Tag und eine andere Uhrzeit wählen, damit nicht alle logrotates zur gleichen Zeit starten. | ||
Zeile 104: | Zeile 124: | ||
* [https://www.mmonit.com/monit/documentation/monit.html Monit Dokumentation] | * [https://www.mmonit.com/monit/documentation/monit.html Monit Dokumentation] | ||
* [https://www.mmonit.com/wiki/ Monit Wiki] | * [https://www.mmonit.com/wiki/ Monit Wiki] | ||
[[Kategorie:Installationsanleitungen]] | |||
[[Kategorie:eigene Daemons]] | |||
[[Kategorie:Managed Server]] |
Aktuelle Version vom 14. Februar 2025, 13:46 Uhr
Über Monit
Monit ist ein ressourcensparendes Programm zur Überwachung eines Server oder von Diensten ("Daemons") auf einem Server.
Es fragt regelmäßig den Zustand des zu überwachenden Prozesses ab und kann bei einem Absturz den Prozess selbstständig neu starten. Für Betriebssystem-Ressourcen, wie Festplatten-Kapazität oder CPU- und RAM-Auslastung, können Schwellwerte angegeben werden, bei deren Überschreitung Monit per E-Mail alarmiert und in eine Log-Datei protokolliert.
In dieser Beschreibung wird der Start des Servers und von Monit durch den Paketadmin angenommen. Sollte ein davon verschiedener Domain-Admin der "Befehlshaber" sein, so müssen die Pfade entsprechend korrigiert werden. Von "/home/pacs/xyz00" zu "/home/pacs/xyz00/users/user".
Besser systemd benutzen
Achtung: wir empfehlen nicht mehr den Einsatz von monit als Prozessmanager. Alle Anwendungen sollten mit Systemd im Userspace gestartet werden. Monit kann weiterhin zur Überwachung des Servers eingesetzt werden.
Konfiguration
Monit sucht seine Konfiguration beim Start zuerst in der Datei ~/.monitrc im Homeverzeichnis des Users, der monit startet.
Wir erstellen also diese Datei im Hauptverzeichnis des Users und sorgen dafür, dass sie nur von diesem gelesen und beschrieben werden kann:
xyz00@hxx:~$ cd
xyz00@hxx:~$ touch .monitrc
xyz00@hxx:~$ chmod 0600 .monitrc
xyz00@hxx:~$ edit .monitrc
Und füllen sie mit folgendem Inhalt:
set init
set daemon 600
set logfile /home/pacs/xyz00/var/monit.log
set mailserver localhost
set alert admin@example.tld
check process apache2 with pidfile /home/pacs/xyz00/etc/apache2/run/apache2.pid
start program "/bin/bash -c '/home/pacs/xyz00/etc/apache2/apache2_start'"
stop program "/bin/bash -c '/home/pacs/xyz00/etc/apache2/apache2_stop'"
if failed host example.tld port 8080 with timeout 60 seconds then restart
Achtung: Dieses Beispiel geht davon aus, dass die entsprechenden Start- und Stopskripte existieren und der Pfad zum pidfile des Apachen stimmt.
Monit Starten und Stoppen
Wird nun per systemd realisiert dazu
noch einen systemd service für Monit anlegen:
~/.config/systemd/user/monit.service
[Unit]
Description=monit
[Service]
ExecStartPre=rm -f %h/.monit.id
ExecStart=/usr/bin/monit -c %h/.monitrc
[Install]
WantedBy=default.target
Service aktivieren und starten:
$ systemctl --user enable monit.service
$ systemctl --user start monit.service
Managed Server monitoren
Bei der Nutzung eines Managed Server ist das Hostsharing-Mitglied selbst dafür verantwortlich, die Ressourcen des Servers ausreichend zu dimensionieren. Monit kann helfen Engpässe zu entdecken.
Mit den folgenden Zeilen in der .monitrc wird bei der Überschreitung von bestimmten Schwellwerten beim Load, bei der RAM- und CPU-Auslastung und der Festplatten-Auslastung der E-Mail alarmiert und ins monit.log protokolliert:
check system h00.hostsharing.net
if loadavg (1min) > 5 then alert
if loadavg (5min) > 3 then alert
if memory usage > 85% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert
check device datafs with path /dev/vda2
if failed permission 0660 then alert
if failed uid root then alert
if failed gid "disk" then alert
if space usage > 85 % then alert
if inode usage > 85 % then alert
Logfiles kontrollieren
Monit loggt entsprechend der Konfiguration seine "Taten" in ~/var/monit.log
Damit das Logfile nicht zu groß wird, benutzen wir logrotate, das von cron aufgerufen wird, einmal pro Woche das Logfile komprimiert und zwei alte Versionen hält. Dazu erstellen wir die Konfigdatei .logrotate im Hauptverzeichnis des Users:
touch .logrotate
Darin schreiben wir:
compress
/home/pacs/xyz00/var/monit.log {
rotate 2
weekly
}
Nun brauchen wir noch einen Aufruf von logrotate durch cron. Bitte beachten, logrotate merkt sich den letzten Zustand der Logdatei in einem Statusfile. Das muss in der crontab mit angegeben werden. Wir editieren die crontab und schreiben:
27 7 * * 5 logrotate -s /home/pacs/xyz00/.logrotate_state /home/pacs/xyz00/.logrotate
Damit wird jeden Freitag um 7:27 Uhr das monit.log "rotiert". Achtung: bitte einen anderen Tag und eine andere Uhrzeit wählen, damit nicht alle logrotates zur gleichen Zeit starten.