SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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から出力されたログであるかは、ログの属性情報として出力されます。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Logplexの制限

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Herokuでスタート! はじめてのPaaSアプリケーション開発連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8745 2015/06/15 18:04

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング