在设计时这个问题的答案在 Ubuntu 12.04.5 设置上测试此 MySQL Monit 规则集时我遇到了一个问题:
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
group mysql
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306
with timeout 15 seconds
then restart
if 5 restarts within 5 cycles
then timeout
alert [email protected] only on { timeout, nonexist }
问题是我试图通过/etc/init.d/
(更像是 CentOS/RedHat 系统构造)来调用启动/停止项,而不是使用/usr/sbin/service
更适合 Ubuntu/Debian 系统的系统。
好吧,我的错……但问题是你看到了那if 5 restarts within 5 cycles then timeout
部分吗?这似乎让我很为难。由于/etc/init.d/mysql start
命令无法工作,系统尝试了 5 次重新启动,失败了 5 次,然后超时。超时条件似乎导致 MySQL 服务规则集被我的 Monit 忽略。
我已多次重新启动 Monit 服务,甚至重新调整了规则集以查看是否有帮助,但这些似乎都没有影响任何事情。
我该怎么做才能让 Monit 注意由于满足超时条件而“未监控”的规则集?
答案1
监控包括命令启用或禁用对所有或特定服务的监控。
monit monitor mysql
如果某个服务不再受到监控,您可以使用 例如或重新启用监控monit monitor all
。
请注意,您必须启用 Monit HTTP 接口才能使这些命令起作用。
答案2
经过一番挖掘,我们发现 Monit 将系统监控数据存储在一个“状态”文件中。这个“状态”文件会跟踪哪些服务正在被监控/未被监控。
因此,虽然这有点“蛮力”,但确实有效。如果某个服务由于超时等原因变为“不受监控”,则只需从系统中删除 Monit 状态文件,如下所示:
sudo rm /var/lib/monit/state
然后像这样重新启动 Monit,一切都会好起来:
sudo service monit restart
值得一提的是,在其他系统/设置中,Monit“状态”文件可能会保存为state
或monit.state
甚至.monit.state
(在其前面加上一个点/句号.
)在另一个目录中。当您实际尝试实施此修复时,请务必确定该“状态”文件的确切保存位置。