LoginSignup
4
4

More than 5 years have passed since last update.

AWS ECSのDockerログをpapertrailで収集する

Last updated at Posted at 2017-04-13

DockerコンテナでRailsとかを運用していると気になるのがログの管理。何らかの理由でコンテナが正常に起動しなかったり、障害時に原因を探るためにログを見たい…という時にいちいちDockerコンテナに入ってログを確認するの面倒です。なので、papertrailというサービスを利用しています。

これは複数のサーバやコンテナのログを一つに集約して tail コマンドのようにログファイルを閲覧できるいい感じのサービスです。似たようなものとして最近出た logDNA というのもあります。ほぼ同じような機能です。

AWS ECSの設定

papertrailのタスク定義

ログには /var/run/docker.sock を利用するので、最初にボリュームを作成しておきます。

項目 内容
ボリューム名名前 dockersock(自由に)
ソースパス /var/run/docker.sock

公式でDockerイメージがあるのでそれを利用します。

項目 内容
コンテナ名 papertrail(自由に)
イメージ gliderlabs/logspout
メモリ制限 ハード(128MB)
ポートマッピング なし
CPUユニット数 100
コマンド syslog://logs00.papertrailapp.com:000000(papertrailで発行されたアドレス)
マウントポイント 先程作った dockersock
コンテナパス /var/run/docker.sock

タスク定義は以上です。

デプロイ

あとは稼働しているクラスタにpapertrailのタスクを実行します。「クラスター」→「タスク」→「新しいタスクの実行」でOKです。追加後は、以下のような感じになっていると思います。

ecs.png

Railsの設定

次にpapertailで収集したいログの出力先をアプリケーション側で設定します。今回はRailsを例にします。

config/enviroments/production.rb

各環境設定ファイルに以下のような感じで書くことでログが標準出力になります。

logger           = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.log_tags  = [:subdomain, :uuid]
config.logger    = ActiveSupport::TaggedLogging.new(logger)

これでアプリケーション側の設定は完了です。

papertrail.png

たぶんこんな感じでログが流れてきます。検索も色々できるので捗ると思います。

papertrailからS3へ

papertrailは基本的にテンポラリ的な使い方になります。 tail がメイン。なのでログファイルの永続化は別に考える必要があります。幸いにもpapertrail(logDNAも)にはS3に転送する機能があります。

設定は簡単で、バケット名を設定して、papertrailのIAMアカウントを書き込み許可権限を与えるだけで1日1回ローテーションファイルを配置してくれます。

ただし、papertrailに送った全てのログが1つのファイルにマージして保存されるので、複数サービスを運用している場合は全部混ざってしまいます。後から解析する場合は、自前でフィルタするようにしなくてはならないのが微妙な所ですね…。

なので綺麗にログの永続化をしたいならfluentd→S3のような形を別途作ってあげたほうが良いかもしれません🤔

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4