New Relic APM を使って叩き起こし続けることにした。
Heroku のスリープについて
会社の元同期に「Dyno寝てるっぽいよ」と教えてもらって、「あ、眠るんだ…」と知りました。知っておきたい!Herokuを使う上では当たり前?の16の常識 | mah365 -
また、Heroku の Personal Apps ページで対象のアプリケーションの六角形アイコンを見てみると、六角形の中に"zzz" が表示されていた。
Dynoとは
Dynoはアプリケーションサーバの1プロセスで、アプリケーションサーバThin(http://code.macournoyer.com/thin/)をベースにしているもののようです。Dynoは追加購入すれば、ユーザは柔軟に増やすことができ、2秒で起動するとのことです。スリープさせないためには。
フレクトのクラウドBlog: Herokuについて調べたことのまとめ -
- Dyno を増設する
- シェルなどで定期的に ping 打つ
- Heroku Addon の New Relic APM を使う
2.は実行用の環境を用意するのが面倒なので今回はパス。
今回は無料プランがあり、Addon ということで簡単に導入できそうな3.を採用。
New Relic APM の導入
上記内容で導入できたと思っていたら、できていなかった。
New Relic のページ見たらアプリケーション情報が表示されず、newrelic agent がそもそも起動してなかったと判明した…。
Java - Play2.2をherokuで動かした時にはまったポイント - Qiita - を参考にやり直したらうまくいったので、方法をきちんとまとめておく。
1) 決済情報を登録する。Heroku ダッシュボードから [Manage Account] → [Billing] で登録しておく。完了していればスキップする。登録していないと 2) で下記エラーが出る。
Adding newrelic:stark on your-app-name... failed ! Please verify your account to install this add-on plan (please enter a credit card) ! For more information, see https://devcenter.heroku.com/categories/billing
2) アドオンを入れる。
$ heroku addons:add newrelic:stark
3) 依存ライブラリを追加する。build.sbt に下記を追記する。
"com.newrelic.agent.java" % "newrelic-agent" % "3.12.1"※newrelic-api は不要だった。
※最初にてきとうに 3.1.0 を選んだらエラー出て、Java8に対応してなかった。今回はJava8を使っているので、対応しているバージョンを選択した。
4) New Relic 関連のファイルを配置する。
ファイル群は New Relic の管理ページ → Application タブのページから取得できるはず。(自分のアプリが正常に連携されてからそのページが開けなくなった…)
・newrelic.yml のみルートディレクトリに配置する。
・それ以外(jarなど)は lib/ に配置する。
5) Procfile にVM引数を追加する。
-J-javaagent:lib/newrelic.jar※Play2.2から JAVA_OPTS に設定してもダメとのこと。
6) ここまでの変更をコミット、Heroku へデプロイする。
$ git add . $ git commit -m "optional message" $ git push heroku master数分後、New Relic の管理ページ →アプリケーションタブのページに自分のアプリ名が表示される。
7) New Relic の Monitoring 対象に自分のサイトを加える。
New Relic の管理ページ → Applications タブ → [自分のアプリ名] → Availability Monitoring → URL Monitor に自分のサイトのURLを入力する。
(参考)1DynoなHerokuをNew Relicでアイドルを回避 - PILOG -
完
感想
簡単だと思ったら色々とハマった。Heroku Scheduler の方が簡単だったかも。(参考)Heroku Scheduler
【環境 】
・Java8・Play Framework 2.2.6