我已设置 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脚本以打印消息。
答案 0 :(得分:0)
您可以使用两个选项:
Monit为$MONIT_DESCRIPTION
上的完整错误消息提供了一个ENV变量,其中包含类似mem usage of 1.0% matches resource limit [mem usage>0.5%]
的字符串。
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()