はてなの監視サービスマカレルはシンプルで俺でも使い方がわかる。
表記のことをやってみた記録です。
Elasticbeanstalk の worker環境
Elasticbeanstalkでは、いわゆるWebサービス用の環境だけじゃなく、なんか裏でcronでまわしときたいような
バックグラウンド処理タスクをやらせる専用環境をつくることもできる。
ワーカー環境を作ったあとは、定期的な処理をつくるのは超簡単。
プロジェクトのルート直下にcronの書式で設定を書いたcron.yamlってファイルを置くだけ。
こんな感じ
version: 1 cron: - name: some_task schedule: "0,5,10,15,20,25,30,35,40,45,50,55 * * * *" url: /some_task
このurlってとこに書いたURLに、scheduleのとこに書いたスケジュールでPOSTリクエストがいくようになる。
だから、そのリクエストを受けたら適切な処理が行われるようにしとけばいいだけ。
うちではRailsで受けて処理をしてる。
監視する
その処理の結果も含めて、定期実行がちゃんと出来てることを監視したかったので、Mackerelのログ監視を導入した。
手順
まず、ログ監視とかしてくれるマカレルのプラグインを入れる。
設定ファイルがちょっと変わります。
これが正解なのかわからないけど、3ファイルに分けて順番に実行してもらう。
01-add-sudoer.configでは、マカレルのyumレポジトリを登録するのに必要なのでsudoできるようにする。
02-mackerel.configでは、マカレル本体をインストールすると同時にYumレポジトリを登録
03-mackerel-plugin.configでは、マカレルのcheckプラグインをYumで入れ、設定ファイルを作ってマカレルのえ~人とを起動する。
公式のドキュメントではこの辺を見よう
ログ監視をおこなう - Mackerel ヘルプ
チェック監視に公式チェックプラグイン集を使う - Mackerel ヘルプ
設定ファイルについて
ログチェック
ドキュメントに書いてあるが、
[plugin.checks.好きな名前]
から始まる設定でログを監視し、特定の文字列が多かったらアラート出すとかできる。
[plugin.checks.application_log] command = "/usr/local/bin/check-log --file /var/app/current/log/production.log --pattern FATAL"
Gistに書いた上記の設定では、EBでRailsを動かしている時のアプリのログ(/var/app/current/log/production.log)にFATALって言う文字列が含まれる個数をみる
もっと細かく設定できるが、上記だけではFATALがでてきたら問答無用にマカレルのアラートが発生する。
カスタムメトリック
もっと面白いのが、任意のコマンドを実行してその結果を監視項目にすることができるカスタムメトリックだ。
やり方はここに書いてある。
ホストのカスタムメトリックを投稿する - Mackerel ヘルプ
[plugin.metrics.crawl_cron_number] command = ' num=$(tail -n 10 /var/app/current/log/production.log | grep -c /some_task) ; echo "cron_number.some_task ${num} $(date +%s)" '
Gistに書いた上記の例では、シェルのコマンドを実行してその結果をグラフに表示してる。
/var/app/current/log/production.logの最新10行をとってきて、そのうち/some_taskって文字列が含まれる行数を返す。
これだけでマカレルでグラフがみられる。