# HG changeset patch # User Oleksandr Gavenko # Date 1581593442 -7200 # Node ID 3a97cc7e1b39b805faf44702ee949e172f1849d0 # Parent 6163ed9ff6de47c4fef6c16931c4221a27b25ee9 About monit. diff -r 6163ed9ff6de -r 3a97cc7e1b39 monit.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/monit.rst Thu Feb 13 13:30:42 2020 +0200 @@ -0,0 +1,193 @@ + +======= + monit +======= +.. contents:: + :local: + +Official docs +============= + +https://mmonit.com/monit/documentation/monit.html + Main docs. +https://mmonit.com/wiki/Monit/ConfigurationExamples + Real-world configuration examples. +https://mmonit.com/wiki/Monit/FAQ + FAQ + +Debugging monit +=============== + +Run standalone:: + + monit -c /path/to/monitrc + +Check syntax:: + + monit -t + monit -t -c /path/to/monitrc + +Override log file location in config:: + + set log /var/log/monit.log + +or with CLI option:: + + monit -l /var/log/monit.log + +Do not go into background:: + + monit -I + +Make verbose output:: + + monit -v + monit -vv + +Full length commant may look like:: + + sudo monit -v status + sudo monit -Iv validate + sudo monit -Ivv -c /path/to/monitrc + +To debug start/stop scripts write wrapper that redirects STDIO to file:: + + #/bin/sh + exec 1>my.log + exec 2>my.log + echo "$@" + exec "$@" +Limiting server to ``localhost``:: + + set httpd port 2812 + use address localhost + allow localhost + allow admin:monit + +Monit modes +=========== + +* In ``active`` mode (the default), Monit will pro-actively monitor a service and in case of +problems raise alerts and/or restart the service. +* In ``passive`` mode, Monit will passively monitor a service and will raise alerts, but will not +try to fix a problem by executing start, stop or restart. +* In ``manual`` mode, Monit will enter active mode only if a service was started via Monit. + +Example:: + + check process App with pidfile /var/run/app.pid + start program = "/usr/bin/app start" + stop program = "/usr/bin/app stop" + mode passive + +Alerting +======== +:: + + check process memcached with match memcached + start program = "/usr/bin/systemctl start memcached" + stop program = "/usr/bin/systemctl stop memcached" + if failed host 127.0.0.1 port 11211 protocol MEMCACHE then restart + if cpu > 70% for 2 cycles then alert + if cpu > 98% for 5 cycles then restart + if 2 restarts within 3 cycles then timeout + + check process myapp with pidfile /run/myapp.pid + if does not exist then alert + + check filesystem Ubuntu with path /dev/sda1 + if space usage > 90% then alert + check filesystem Home with path /dev/sda3 + if space usage > 90% then alert + + check host app_name with address 127.0.0.1 + start "/sbin/start app_name" + stop "/sbin/stop app_name" + if failed port 80 protocol HTTP + request /ok + with timeout 5 seconds + then restart + +Running monit by systemd +======================== +:: + + [Unit] + Description=Pro-active monitoring utility for unix systems + After=network.target + Documentation=man:monit(1) https://mmonit.com/wiki/Monit/HowTo + + [Service] + Type=simple + KillMode=process + ExecStart=/usr/local/bin/monit -I + ExecStop=/usr/local/bin/monit quit + ExecReload=/usr/local/bin/monit reload + Restart = on-abnormal + StandardOutput=null + + [Install] + WantedBy=multi-user.target + +https://mmonit.com/wiki/Monit/Systemd + Official docs. + +Monitor systemd process +======================= + +With pid-file:: + + check process nginx with pidfile /var/run/nginx.pid + start program = "/bin/systemctl start nginx" + stop program = "/bin/systemctl stop nginx" + +If process without pid-file:: + + check program MyApp with path "systemctl --quiet is-active MyApp" + if status != 0 then ... + +There is a way to tell systemd to create pid-file if process doesn't to it itself:: + + ExecStartPost=/bin/sh -c "echo $MAINPID > /run/myapp.pid" + +By matching program name:: + + check process MyApp matching 'myapp.*' + start program = /bin/app + stop program = something.. + +Can systemd replace monit? +========================== + +No. Systemd has only basic check if process is running. Imaging that process is stuck. You need some +active probes, like HTTP health endpoint. + +Systemd has limited capabilities for notifying with ``OnFailure``:: + + [Service] + Restart=always + RestartSecs=30 + + [Unit] + OnFailure=... + +Reverse proxy for monit +======================= + +Ngnix:: + + server { + listen 80; + server_name my.server.name; + location /monit/ { + allow 127.0.0.1; + allow 192.0.0.0/8; + deny all; + + proxy_pass http://127.0.0.1:2812; + proxy_set_header Host $host; + rewrite ^/monit/(.*) /$1 break; + proxy_ignore_client_abort on; + } + } +