我想在monit中处理一种连锁操作。


检查过程并立即发出警报。
循环数后重新启动过程。


我的尝试(到目前为止):

check process myprocess with pidfile /run/my.pid
  start program = "/path/to/binary start" with timeout 60 seconds
  stop program = "/path/to/binary stop" with timeout 60 seconds
  if not exist for 3 cycles then restart
  if not exist then alert
  if 3 restarts within 3 cycles then timeout


在出现故障的PID时不发出警报并保持“运行”状态,但在3个周期后重新启动。

check process myprocess with pidfile /run/my.pid
  start program = "/path/to/binary start" with timeout 60 seconds
  stop program = "/path/to/binary stop" with timeout 60 seconds
  if not exist for 3 cycles then restart
  if children < 1 for 1 cycles then alert
  if 3 restarts within 3 cycles then timeout


没有小于1的儿童警报,但从5开始重新启动。

monit.log

[CEST Aug  1 15:09:30] error    : 'myprocess' process is not running


监控摘要

Process 'myprocess'            Running


这里ist monit -v部分:

Existence      = if does not exist 3 times within 3 cycle(s) then restart else
                 if succeeded 1 times within 1 cycle(s) then alert
Pid            = if changed 1 times within 1 cycle(s) then alert
Ppid           = if changed 1 times within 1 cycle(s) then alert
Children       = if less than 1 1 times within 1 cycle(s) then alert else if
                 succeeded 1 times within 1 cycle(s) then alert
Timeout        = If restarted 3 times within 3 cycle(s) then unmonitor


那么问题是:是否可以在1个周期内发送警报并将状态更改为“未运行”并在3个周期后重新启动?

最佳答案

编辑(重要):有关改进的Monit的新版本(截至2019年2月),请参见下面的评论。



这行:

if does not exist for 3 cycles then restart


表示以下内容:

在检查3次该服务不存在之前,请不要执行任何操作,然后重新启动该服务。 monit的文档中将此行为描述为“容错”:


容错

默认情况下,如果操作匹配并且服务设置,则执行该操作
处于错误状态。但是,您可能要求测试失败不止于
在触发错误事件和更改服务状态之前一次
失败了。这有助于避免收到有关虚假错误的警报,
这可能会发生,尤其是在网络测试中。

句法:

循环...或:

[Times Within]循环...


因此,Monit不会更改服务的状态,直到它在接下来的X个周期内失败为止。为了确认此声明,只需删除此服务的容错能力,并仅使用:

if does not exist then alert


手动停止服务并确认命令

monit status


停止后,立即显示状态“不存在”。

因此,回到您的问题:


是的,可以在1个周期内发送警报(按电子邮件)。对于
您需要为该服务定义选项“如果不存在,则发出警报”,并正确设置电子邮件警报。假设你会
要使用外部电子邮件服务器,您需要定义至少两个
行(使用gmail的配置示例):


SMTP服务器配置

set mailserver smtp.gmail.com PORT 587 USERNAME "[email protected]" PASSWORD "xxxxx" using TLSV1 with timeout 30 seconds


(请注意,在gmail中,您必须激活“不安全”应用程序的访问权限,以允许监控程序使用stmp服务)



电子邮件收件人

set alert [email protected]


都在文件/ etc / monit / monitrc中。有关这两行的更多信息,请参考官方文档。


据文档说明,如果定义了容错(X周期后执行操作),则不能立即更新服务状态。但是,您仍然可以定义要立即发送的警报,并在所需的周期内重新启动服务。


参考文献:

Monit的文档:https://mmonit.com/monit/documentation/monit.html

希望能帮助到你!

问候

关于alert - 让monit首先发出警报,然后再重新启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25081180/

10-11 13:07