每次 monit 守护进程停止或启动时,Monit 都会发送警报。这是令人讨厌且无用的信息。
根据文档,我设置:
set alert [email protected] but not on { instance }
...应该向该电子邮件发送警报,除非它们属于定义为启动/停止的“实例”类别。
但是,我仍然会收到警报。这太烦人了。显然我一定错过了什么。
我们正在运行 Monit 5.2.4
答案1
Monit 可以根据文件生成多个警报:
Event: | Failure state: | Success state:
---------------------------------------------------------------------
action | "Action done" | "Action done"
checksum | "Checksum failed" | "Checksum succeeded"
bytein | "Download bytes exceeded" | "Download bytes ok"
byteout | "Upload bytes exceeded" | "Upload bytes ok"
connection | "Connection failed" | "Connection succeeded"
content | "Content failed", | "Content succeeded"
data | "Data access error" | "Data access succeeded"
exec | "Execution failed" | "Execution succeeded"
fsflags | "Filesystem flags failed" | "Filesystem flags succeeded"
gid | "GID failed" | "GID succeeded"
icmp | "Ping failed" | "Ping succeeded"
instance | "Monit instance changed" | "Monit instance changed not"
invalid | "Invalid type" | "Type succeeded"
link | "Link down" | "Link up"
nonexist | "Does not exist" | "Exists"
packetin | "Download packets exceeded" | "Download packets ok"
packetout | "Upload packets exceeded" | "Upload packets ok"
permission | "Permission failed" | "Permission succeeded"
pid | "PID failed" | "PID succeeded"
ppid | "PPID failed" | "PPID succeeded"
resource | "Resource limit matched" | "Resource limit succeeded"
saturation | "Saturation exceeded" | "Saturation ok"
size | "Size failed" | "Size succeeded"
speed | "Speed failed" | "Speed ok"
status | "Status failed" | "Status succeeded"
timeout | "Timeout" | "Timeout recovery"
timestamp | "Timestamp failed" | "Timestamp succeeded"
uid | "UID failed" | "UID succeeded"
uptime | "Uptime failed" | "Uptime succeeded"
我们可以通过设置来解决这个问题(更改地址以保护无辜者):
SET ALERT [email protected] ON { invalid, nonexist, timeout, resource, size, timestamp}
SET ALERT [email protected] ON {action, permission, pid, ppid, instance, status}
这成功地将消息路由到我们关心的地址。您可以全局或本地设置它们,但我们的警报只是全局的。
服务测试下的子标题如下: http://mmonit.com/monit/documentation/monit.html 与上述类型相当对应。
对于服务器的每个计划进程或功能,您应该能够用简单的英语提出对您来说重要的事情,并将该需求与服务测试中提到的测试之一相匹配。例如,如果我正在运行 Apache,我知道我关心的是:
- PID文件中的PID是否还在运行?(不存在)
- PID 是否在我不知情的情况下发生了变化?(pid)
- 服务是否及时响应重启?(超时)
对于轮询的自定义守护进程,我可能会关心日志文件是否定期更新状态消息(时间戳)。
答案2
我正在使用 Monit 版本 5.2.5,使用以下命令可以停止发送 monit 警报
set alert [email protected] not {instance}
答案3
只需告诉它在 N 个时间段内重试一定次数后停止即可根据这些例子。
答案4
我无法在 monit 中解决这个问题,而必须在 monit 电子邮件上构建一个处理层,通过拦截在传递之前过滤掉这些 monit 实例通知。
我们正在使用寻呼机职责来积累和发送来自 monit 和其他几个系统的通知,所以在这种情况下,我在 Monit 服务上添加了一个过滤规则,使用基于主题的正则表达式来过滤掉 monit 实例通知电子邮件。