ELB配下のEC2内の各アプリログを収集する

NO IMAGE

こんにちは、

 

先日、リビングに敷くためのラグを

パルコの雑貨屋さんで購入しました。

 

インドでの手作りラグは、機械で作るのとは違い

見た目も決して綺麗に整っているわけではないですが、

シンプルで手作り感もあり、気に入っています。

 

で、リビングに置いたわけですよ。

 

ルンバさんの居る、リビングにね。

 

 

対する、ラグは、

http://honda-kagu.net/shop/item/honda/picture/goods/10222_1_expand.jpg

 

こんなイメージのもので、

四隅に、ヒラヒラがついているわけですよ。。。。

 

 

完全に、忘れてましたね。

ルンバさんのことを。

 

で、戦いの結果は、

 

ルンバ:(#`皿´)

ラグ:(_TдT)

 

こんな感じでした、、、ヤマです。

 

 

 

本題

 

 

ELB(AWSサービスの一つ、バランサ)

を一つ構えて、配下にEC2インスタンスを2台設置しました。

 

設置当初は、何も考えて無かったのですが、

ログの扱いをすっかり忘れていたことに、気づきました。

 

ログと言っても、WEBサーバのアクセスログではなく、

アプリから吐き出すログです。

 

セッションはDBに持っており、

どちらのサーバに振られてもいい様になっています。

 

この状況で、以下の解決方法を試してみました。

 

1)ログ出力先をS3にする

 サーバ1もサーバ2も、ログの出力先を同じS3バケットにすることで解決しようとしました。

 施策としては非常に簡単です。

 EC2からS3の特定バケットをマウントするだけ。

 

 結果

  S3へのアクセスが遅すぎて使えない

  実用に耐えられないほどの遅さでしたので、断念。。。

 

 

2)Cloudwatch Logsを利用する

 CloudWatch LogsのAgentをインストールして、定期的にログをCloudWatch Logsへ上げる。

 最初から素直に、この方法にしておけばよかったです。

 

 一つ懸念としては、複数EC2インスタンスから、同じロググループ、ログストリームに

 アップした事がなかったので、実現できるか心配だったこと。

 

 結果

  ほぼリアルタイムで閲覧でき、大満足

 

  各種ログをほぼリアルタイムで同期でき、サーバへアクセスすることなく、

  CloudWatch Logsコンソール上でログを閲覧できるので、かなり役立っています。

 

 

手順を簡単に書いておきます。

前回書いた記事も参考に。「CloudWatch Logs

 

 

1)IAM Roleを設定

 

CloudWatch Logsへのアクセス権限を持つIAM Policyを作り、

それを特定のIAM Roleに割り当てます。

で、そのIAM RoleをEC2インスタンスに割り当てます。

 

2)スクリプト入手&実行

https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py

 

実行権限を与えて、pythonで実行してください。

python ./awslogs-agent-setup.py –region ap-northeast-1

 

 

3)設定ファイル編集

/var/awslogs/etc/awslogs.conf

を良い感じに編集してください。

 

 

この設定を、2つのサーバ(EC2インスタンス上)で設定して、

それぞれのサーバのログを、CloudWatch Logsで収集するようにしました。