监测:访问警报中的测试阈值

时间:2019-01-10 14:34:58

标签: monit

我已设置 Monit 来监视进程的内存使用情况,一旦超过阈值,检查将exec使用Python脚本。 Python脚本将发出Slack通知。

要求是,在超出阈值时,我需要打印内存使用情况

Monit配置文件如下:

 check process testprocess with pidfile /mnt/codebase/userserver_4444.pid
    start program = "/bin/"
    as uid ubuntu and gid admin
    if memory usage > 50% for 5 cycles then exec "/usr/bin/python /opt/scripts/slacker.py <channel_name> <User> <Level>  <Message>"

我收到以下松弛消息:

Alert : Host-test
 172.39.11.115 USER-MEM High-memory-for-1-cycles

但是我希望消息是:

Alert : tpg-prod-user-16-115
172.31.16.115 USER-MEM 55% High-memory-for-1-cycles

这里55%是违反阈值时消耗的内存。 我需要知道,是否有一种方法来访问使用率值,并将其作为参数传递给Python脚本以打印消息。

1 个答案:

答案 0 :(得分:0)

您可以使用两个选项:

  1. Monit为$MONIT_DESCRIPTION上的完整错误消息提供了一个ENV变量,其中包含类似mem usage of 1.0% matches resource limit [mem usage>0.5%]的字符串。

  2. Monit在$MONIT_PROCESS_MEMORY处提供绝对内存使用量的ENV变量,其中包含2844之类的整数。

有关可用的ENV变量的完整列表,请参见Monit documentation

这些ENV变量仅对子线程可见,因此您必须包装调用:

# will create a file "/tmp/$MONIT_PROCESS_MEMORY"
[...] then exec "/usr/bin/touch /tmp/$MONIT_PROCESS_MEMORY"

# will create a file "/tmp/2844"
[...] then exec "/bin/bash -c '/usr/bin/touch /tmp/$MONIT_PROCESS_MEMORY'"

# will create a file "/tmp/py_2844"
[...] then exec "/usr/bin/python /tmp/monit1.py"

/tmp/monit1.py在哪里

import os

with open("/tmp/py_%s" % (os.environ['MONIT_PROCESS_MEMORY']), 'w') as f:
    f.close()