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