Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Webサービス運営に必須! Herokuの「ログ」を集積監視するためのAdd-on

Herokuでスタート! はじめてのPaaSアプリケーション開発 第7回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/06/15 14:00

 前回はHerokuでアプリ開発をするために必須のMemcached Add-onを見ました。今回はもう1つの必須Add-onである「ログ関連のAdd-on」を見ていきます。Webサービスを運営する上で、ログの監視は欠かすことができません。システム構築においても、運営時のログ監視のことを考えておく必要があります。本稿では、Herokuのログ集約機能とログ監視を支援するAdd-onを紹介します。

目次

Herokuの料金体系改定について

 本題に入る前に、5月上旬に発表されたHerokuの料金体系の改定について触れておきます。

 5月7日のHerokuのブログにおいて、2015年6月以降、Herokuの料金体系が大きく改定されることがアナウンスされました。

 現在、原稿の料金体系で運用しているアプリケーションのWebコンソールにアクセスすると「This app uses Traditional dynos」というメッセージが表示され、新しい料金体系への変更が促されます。

Heroku料金体系

 

 新しい料金体系では以下の5つのプランがあります。

  • Free
  • Hobby
  • Standard 1X
  • Standard 2X
  • Performance

 それぞれのプランの詳細はこちらの表にまとまっています。以前に比べると、かなりシンプルで分かりやすくなっているのではないでしょうか。改定内容を簡単にまとめると、

  • Dyno Hourベースの料金体系からDynoサイズに基づく月額固定料金となった
  • 無償プランでは1日6時間(以上)のスリープが必須になった
  • 趣味で運用するようなアプリケーションのために、7米ドル/月のHobbyプランが新設された
  • 一部の機能が完全にStandardプラン以上での提供となった

という感じです。

 個人で無償枠を利用してサービスを運用していた人にとっては、7米ドルのコストがかかるようになったのは痛いかもしれませんが、複数Dynoを利用してサービスを運用していた人にとっては、むしろ値下げとなっています[1]

[1] 以前は750時間の無償枠があったので必ず安くなるわけではありませんが。

Herokuアプリケーションからログを出力する

 それでは本題のログについて、話を始めましょう。

 まず、Heroku上で動くアプリケーションからどのようにしてログを出力すればよいかというと、これは単純に標準出力に文字列を出力するだけです。Javaなら「System.out.println」、Rubyなら「puts」だけでもOKです(もちろん、何らかのLoggerクラスを使用したほうがよいですが)。

 一般にオンプレミス、あるいはIaaS上のクラウドサーバ上でアプリを実行する場合には、ログはファイルに出力するように設定することが多いと思います。しかし、Herokuの場合、ファイル出力を指定すると、逆にDyno再起動のタイミングでそれまでに記録したログが消えてう点に注意が必要です。

Herokuのログ集約エンジン「Logplex」

 こうして出力されたログは「Logplex」というログの収集エンジンによって集約されます。例えば、Dynoを2台で運用している場合、それぞれのDynoが別々にログを出力しますが、Logplexはこれらを集約してくれます。そのおかげでユーザは、あたかも1つのアプリケーションサーバがログを出力したかのように統合された形でログを見ることができます[2]

 また、Logplexが集約するログ情報には、ユーザが自分で出力した情報だけでなく、次のようなHeroku自身が出力するログも含まれます。

  • Heroku Router
  • Slug Compiler

 Heroku Routerからのログ出力には、以下の情報が含まれます。

  • method - HTTP Method(GET/POST/DELETEなど)
  • path - Path
  • host - Hostヘッダの値
  • fwd - クライアントIP
  • requestId - リクエストID(アプリケーションにリクエスト転送される際にX-Request-IDとして設定される)
  • dyno - リクエストを処理したDynoのナンバー
  • connect - Dynoへの接続に要した時間(ミリ秒)
  • service - Dyno接続からレスポンスを受け取るまでに要した時間(ミリ秒)
  • status - HTTPステータスコード
  • bytes - HTTPボディサイズ

 一般的なWebアプリケーションが必要とするアクセスログ情報は概ね含まれていると思いますが、特にservice時間が出力されるのがうれしいところです。service時間は、パフォーマンス調整をする際の重要な手掛かりとなります。

[2] そのログがどのDynoから出力されたログであるかは、ログの属性情報として出力されます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 小西 俊司(コニシ シュンジ)

    株式会社Giveryに所属するエンジニア。CODEプロジェクトというエンジニアの成長を促進するプラットフォーム開発のテックリード。Herokuも使った新しいプロダクトを今秋リリース予定。

バックナンバー

連載:Herokuでスタート! はじめてのPaaSアプリケーション開発
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5