Monit 是一个用于管理和监视 Unix 系统的小型开源实用程序。使用 Monit 对进程进行自动维护管理,能在进程出现错误情况下执行有意义的操作。

我们使用 Monit 来监控 ZabbixServer 及其一些依赖的服务,例如 Nginx、MySQL、PHP-FPM。

安装 Monit

下载地址:https://mmonit.com/monit/#download

你可以下载已经编译好的二进制包,或自行编译。我的系统环境是 Debian11。

二进制文件放到/usr/bin,配置文件放到/etc,创建一个/etc/monit.d/文件夹,用来存放监控脚本。

配置

注册服务:vim /lib/systemd/system/monit.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=A small Open Source utility for managing and monitoring Unix systems
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/monit -I
ExecStop=/usr/bin/monit quit
ExecReload=/usr/bin/monit reload

[Install]
WantedBy=multi-user.target

编辑 monitrc, vim /etc/monitrc,取消对 include /etc/monit.d/* 的注释。

编写对 Nginx 的监控脚本

vim /etc/monit.d/nginx

1
2
3
4
5
6
## nginx
check process nginx with pidfile /var/run/nginx.pid
start program = "/usr/sbin/service nginx start"
stop program = "/usr/sbin/service nginx stop"
if failed host 127.0.0.1 port 80 type tcp then restart
if 5 restarts within 5 cycles then timeout

编写对 MySQL 的监控脚本

vim /etc/monit.d/mysql

1
2
3
4
5
6
## mysql
check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/usr/sbin/service mysql start"
stop program = "/usr/sbin/service mysql stop"
if failed unixsocket /var/run/mysqld/mysqld.sock then restart
if 5 restarts within 5 cycles then timeout

编写对 PHP-FPM 的监控脚本

vim /etc/monit.d/php-fpm

1
2
3
4
5
6
## php-fpm
check process php-fpm with pidfile /var/run/php/php7.4-fpm.pid
start program = "/usr/sbin/service php7.4-fpm start"
stop program = "/usr/sbin/service php7.4-fpm stop"
if failed unixsocket /var/run/php/zabbix.sock then restart
if 5 restarts within 5 cycles then timeout

编写对 Zabbix-Server 的监控脚本

vim /etc/monit.d/zabbix-server

1
2
3
4
5
6
## zabbix_server
check process zabbix_server with pidfile /var/run/zabbix/zabbix_server.pid
start program = "/usr/sbin/service zabbix-server start"
stop program = "/usr/sbin/service zabbix-server stop"
if failed host 127.0.0.1 port 10051 type tcp then restart
if 5 restarts within 5 cycles then timeout

systemctl restart monit,使配置生效。

monit status 查看监控状态。

20220222234637

总结

这里使用 monit 一般就是监控 PID,端口、Sock 等,发现状态不正常则重启服务。

其他玩法可以参考下面的文档。

参考文档:https://mmonit.com/monit/documentation/monit.html