帰ってきたMackerel監視シリーズ *1です。 この記事は Mackerel アドベントカレンダー 2019 の14日目です。
昨日はmattnさんの Mackerel を使って10分でメトリクス監視を始める手順 - Qiita でした。
それでは14日目は Batchの監視
です。
MackerelにはBatchの監視をするための仕組みとして mkr
のcommandのオプションの mkr wrap
があります。
例えば次のようなワンライナーのcommandを実行すると失敗時にCRITICALを飛ばし、次回の成功時に自動的にalertを閉じてくれます。
# cat test.php #!/usr/bin/php <?php // 終了ステータスを1にする exit(1); # mkr wrap -a --note="testなのじゃ" -- ./test.php
-w
を指定すればerror時にWARNINGとして通知させることもできます。
細かいoptionについては公式ドキュメントを参考ください。
Batchの実行時間が知りたい
Batchの実行時間はとても大切です。 Batchの突き抜けを防ぐために普段のBatchの実行時間を知っておきたい。 場合によっては突き抜け前にalertを飛ばしたいと思うでしょう。 もちろん、Batchにタイムアウトを設定することはとても正しい実装です。
しかし既存のBatchには設定されておらず、今から手を入れるのが難しい場合も多いのでは無いでしょうか。 そんな方には下記のブログがおすすめです。
horensoを使ってMackerelにメトリックとしてBatchの実行時間を投稿しているため、閾値を設定すれば実行時間を元にalertを飛ばすこともできます。
この方法とmkr wrapをあわせ技を使うと失敗した場合はすぐさまalertを飛ばし、実行時間をメトリックに保存することができます。
id:syou6162 さんの
mackerel_service_metric_reporter
を使わない場合は次のようにします。
# mkr wrap -w -a --note="testなのじゃ" -- ./horenso -T -r '/usr/bin/php /path/report.php' -- '/path/test.php'
horensoの-r
で指定するreporterは複数指定することもできますから、Mackerelの通知以外にもエラー処理をさせたい場合も合わせて設定できます。
今回は report.php
を指定しているようにお好みの言語でreportを書くことができ、下記のようにSTDINにJSON形式で実行開始時間と終了開始時間が入っています。
$json = stream_get_contents(STDIN); print_r(json_decode($json)); // $stdin から startAt と endAt を取り出せば良い /** stdClass Object ( [command] => test.php [commandArgs] => Array ( [0] => /test.php ) [output] => 2019-12-14T22:39:00.677774+09:00 test [stdout] => test [stderr] => [exitCode] => 0 [signaled] => [result] => command exited with code: 0 [hostname] => ip-172-31-36-184 [pid] => 10059 [startAt] => 2019-12-14T22:39:00.60241387+09:00 [endAt] => 2019-12-14T22:39:00.692605848+09:00 [systemTime] => 0.023213 [userTime] => 0.025022 ) **/
もう少し詳しく知りたい人はこちらの記事を参考ください。
更にMackerelのGraph Annotationを組み合わせれば簡単にBatchがどのくらいDBや実行環境のCPUに負荷をかけているかを知ることができます。
Graph Annotationは mkr
でも投稿できますし、もちろんAPI経由でも投稿できます。
reporterの中でGraphと合わせてGraph Annotationの投稿もぜひやってみてください。
horenso のreporterの中でMackerelの通知も一緒にすればいいのでは?
もちろんcheck-apiがあるので、reporterの中で実装すればできます。 そもそもhorensoを挟まずにmkr wrapで直接投稿かreporterとnoticerが設定できると嬉しいですね。
本日ご紹介したBatchの監視は既存のBatchの仕組みを変更することなく、cronの実行時にラップするshなどを用意したり、mrk wrap
を冒頭部分に追加するだけで初めることができる上に、効果は抜群です!
ぜひこの機会にお試しください。
それでは引き続き、Mackerel アドベントカレンダーをお楽しみください。
参考ブログ
追記(2019/12/15)
上記の reporter.php
を誰でも使えるように公開した。
他の言語でも同じようにすれば簡単に投稿できます。