如何让 Monit 重新监控它没有监控的服务?

Gia*_*968 9 linux ubuntu monit

在设计这个问题的答案时,我在 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_address@example.com only on { timeout, nonexist }
Run Code Online (Sandbox Code Playgroud)

问题是我试图通过调用启动/停止项目/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 关注由于满足超时条件而“不受监控”的规则集?

小智 7

Monit包括用于启用和禁用对所有或特定服务的监视的命令。

如果服务已不受监控,您可以使用例如monit monitor mysql或重新启用监控monit monitor all

请注意,您必须启用 Monit HTTP 接口才能使这些命令发挥作用。


Gia*_*968 6

经过一番挖掘,发现 Monit 将系统监控数据存储在“状态”文件中。这个“状态”文件会跟踪哪些服务正在被监控/未监控。

因此,虽然这有点“蛮力”,但它绝对有效。如果某个服务由于超时之类的事情而变得“不受监控”,那么只需从系统中删除 Monit 状态文件,如下所示:

sudo rm /var/lib/monit/state
Run Code Online (Sandbox Code Playgroud)

然后像这样重新启动 Monit,一切都应该很好:

sudo service monit restart
Run Code Online (Sandbox Code Playgroud)

FWIW,在其他系统/设置的monit的“状态”文件会被保存为state或者monit.state甚至.monit.state(以点/周期.前面加上)在另一个目录。当您实际尝试实施此修复程序时,请务必确定该“状态”文件的确切保存位置。