让monit先发出警报,然后再重启

时间:2014-08-01 13:17:37

标签: alert restart monit

我想在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

没有儿童的警报&lt; 1但重启5。

monit.log

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

monit summary

Process 'myprocess'            Running

这是monit -v part:

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个周期后重新启动?

1 个答案:

答案 0 :(得分:16)

编辑(重要):请参阅下面的评论,了解Monit的更新版本(根据2019年2月),此行为已得到改进。

这一行:

if does not exist for 3 cycles then restart

表示以下内容:

在检查3次服务不存在之前,请不要执行任何操作,然后重新启动它。这种行为在monit的文档中描述为Failure Tolerance:

  

失败容忍

     

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

     

语法:

     

FOR CYCLES ......或:

     

[TIMES WITHIN] CYCLES ......

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

if does not exist then alert

手动停止服务并确认命令

monit status

现在显示状态&#34;不存在&#34;一旦你阻止它。

所以,回到你的问题:

  1. 是的,可以在1个周期内发送提醒(每封电子邮件)。对于 那你需要定义选项&#34;如果不存在那么警告&#34;对于该服务并正确设置电子邮件警报。假设你愿意 要使用外部eMail-Server,您需要至少定义两个 行(使用gmail配置示例):
  2. SMTP服务器配置

    set mailserver smtp.gmail.com PORT 587 USERNAME "xxxxxxx@xxxxx.xxx" PASSWORD "xxxxx" using TLSV1 with timeout 30 seconds
    

    (请注意,在gmail中,您必须激活&#34;不安全&#34;应用的访问权限才能允许monit使用stmp服务)

    电子邮件收件人

    set alert xxxxxxx@xxxxx.xxx
    

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

    1. 据文档所述,如果定义了容错(在X周期后执行操作),则无法立即更新服务的状态。但您仍然可以定义要立即发送的警报,并在所需的周期内重新启动服务。
    2. 参考文献:

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

      希望它有所帮助!

      此致