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 для печати сообщения.


person Bidyut    schedule 10.01.2019    source источник


Ответы (1)


Вы можете использовать два варианта:

  1. Monit предоставляет переменную ENV для полного сообщения об ошибке в $MONIT_DESCRIPTION, содержащую строку типа mem usage of 1.0% matches resource limit [mem usage>0.5%].

  2. Monit предоставляет переменную ENV для абсолютного использования памяти в $MONIT_PROCESS_MEMORY, содержащую целое число, например 2844.

Полный список доступных переменных ENV см. в документации Monit.

Эти переменные 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()
person boppy    schedule 09.06.2019