Supervisorで常駐化している任意のプロセスをMackerelでモニターする
はじめに
supervisorを運用していて、まれにプロセスが落ちているときはないでしょうか?
Mackerelエージェントに、監視結果を出力するコマンドを登録することで、任意の常駐化プロセスをモニターしてみます。
環境
尚、動作環境はEC2上に構築してみました。
- OS: Amazon Linux 2016.03
supervisord自体のモニターは公式プラグインでする
公式チェックプラグインを使うとsupervisord自体の死活監視は簡単に行うことができます。
プラグインのインストール
$ yum install mackerel-check-plugins
設定
Mackerelの設定ファイル(/etc/mackerel-agent/mackerel-agent.conf
)に、下記のように設定を追加します。
[plugin.checks.supervisord]
command = "check-procs -p supervisord"
参考URL
supervisorctl statusコマンドを使ってモニターする
supervisorctl status {program name}
コマンドを使って、任意のプロセスの状態をモニターします。
スクリプトの作成
pythonで簡単なスクリプトを作成してみます。
やっていることは単純です。
-
supervisorctl status
で出力される文字を分解 - 配列の2番目に状態を表す文字が入っているので、その状態によって、exitコードを切り分ける
- exitコードは、それぞれ、0: OK, 1: WARNING, 2: CRITICAL, 左記以外: UNKNOWN の意味になる
- 標準出力に情報を出力しておくと、Mackerelに送信されるので便利
import sys
import commands
def main():
output = commands.getoutput('supervisorctl status example_program')
print(output)
parts = output.split()
print(parts[0])
print(parts[1])
if (parts[0] == 'example_program'):
if (parts[1] in ['RUNNING']):
sys.exit(0)
if (parts[1] in ['STARTING','BACKOFF']):
sys.exit(1)
if (parts[1] in ['STOPPED','STOPPING','EXITED','FATAL']):
sys.exit(2)
sys.exit(9)
if __name__ == '__main__':
main()
実行結果
$ sudo python ./check_supervisor_example_program.py
example_program RUNNING pid 25436, uptime 0:35:27
example_program
RUNNING
設定
check-procs
のときと同様に、設定ファイルに下記の設定を追加する。
[plugin.checks.supervisord_example_program]
command = "python /path/to/check_supervisor_example_program.py"
参考URL
モニター結果
example_programがSTOPPED
の場合
supervisordが停止している場合
おわりに
あまり需要がないかもしれませんが、supervisorに限らず、監視したい項目を簡単なスクリプトでモニターできますので、トライしてみると良いかと。
Author And Source
この問題について(Supervisorで常駐化している任意のプロセスをMackerelでモニターする), 我々は、より多くの情報をここで見つけました https://qiita.com/imunew/items/eb7bb6e092185ececb89著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .