mkr wrap
を使うことで、cronなどで定期実行されるプログラムの成否を監視できます。
% mkr wrap -- /path/to/your-batch ...
上記のようにコマンドを実行すると、コマンドが失敗(非ゼロで終了)した場合にMackerel上にアラートを発生させます。
アラートは実行ホストのチェック監視アラートとして登録されます。Mackerelに情報を投稿するためのAPIキーや、ホストIDは設定ファイル(mackerel-agent.conf)から自動で取得されますが、明示的に指定することもできます。
crontabに登録する
例えば、毎時11分に実行されるバッチの場合以下のように指定するだけです。
11 * * * * mkr wrap -- /path/to/your-batch ...
アラート発生の様子
コマンド実行が失敗した場合、以下のスクリーンショットのようにMackerel上でアラートが発生します。
失敗内容と実行したコマンド自身が表示されます。そのため、パスワードなど、外部に漏れて欲しくない秘匿情報をコマンドやそのオプションに含めないように注意してください。
詳細な利用方法
冒頭でも述べたとおり mkr wrap
は特別な指定無く、簡単に使用できます。
% mkr wrap [options] -- /path/to/your-batch ...
--
の後ろの実際に実行されるバッチジョブのコマンドを記述します。--
の前に必要に応じたいくつかのオプションを利用できます。
-n, --name
- 監視名
% mkr wrap -n your-check-monitor -- /path/to/your-batch
ジョブに対するチェック監視名を明示的に指定します。このオプションが指定されない場合には引数から自動的にチェック監視名("mkrwrap-{{コマンド名}}-{{ハッシュ値6桁}}"のような形式)が作られますが、わかりやすさのために明示的に指定することをオススメします。
チェック監視として扱われるため、ホスト内でユニークなチェック監視名である必要があります。名前がバッティングしないように注意してください。
-d, --detail
- コマンド出力の送信
監視情報の送信時にデフォルトではコマンド出力はMackerelに送信されませんが、このオプションを使うことで送信され、Mackerelの画面上で確認可能になります。ただし、1024文字以上の出力は切り捨てられます。
このオプションを利用する場合、コマンド内容同様に秘匿情報の扱いには気をつけてください。
-N, --note
- 注意書き
注意書きを指定します。アラートが発生した際に、アラートのメッセージにこの注意書きの内容が含まれます。
-H, --host
- ホストIDを指定する
mkr wrap
は設定ファイルからホストIDを自動的に取得しますが、明示的に指定したい場合にこのオプションを利用します。
-w, --warning
- WARNINGとしてアラートする
mkr wrap
はデフォルトではコマンド失敗をCRITICALとしてアラートしますが、このオプションを指定すれば、WARNINGとしてアラートします。
-a, --auto-close
- コマンド成功時にアラートを自動閉塞する
既報のアラートがある時、後続の同じ設定のバッチジョブが成功した場合にそれを自動閉塞します。デフォルトでは自動閉塞しないため、アラートは手動で明示的に閉じる必要があります。
このオプションの挙動は一時領域に結果を保存し、次回実行時にそれを読み出す形となるため、永続的なディスク領域がある環境で利用してください。
-I, --notification-interval
- 通知再送間隔を指定する
デフォルトではアラート発生時もしくはアラート状態変更時にのみしか通知がおこなわれませんが、このオプションを使うことで発生中のアラートの通知を定期的に送信できます。
15m
, 1h
, 1h30m
のような形式で指定しますが、最短の間隔は 10m
(10分)となり、それより指定が短い場合には10分として設定されます。
MACKEREL_APIKEY
環境変数 - APIキーの指定
APIキーを明示的に指定します。環境変数のみで、コマンドラインオプションで指定することはできません。
注意点
ほとんどのケースで発生はしませんが、パーミッションの関係で、mackerel-agent.confやホストIDを格納しているidファイルからの、APIキーやホストIDの取得に失敗する可能性があります。
これは、独自にそれらのファイルのパーミッションを、注意深く0600などに設定している場合にのみ発生しえます。バッチジョブの実行ユーザーが、mackerel-agentの実行ユーザーとは多くの場合異なるためです。
この場合、これらのファイルのパーミッションやユーザー権限を調整するか、コマンドに明示的にAPIキーやホストIDを指定するようにしてください。