Elastic BeanstalkのCloudWatchの自動生成されるロググループで不必要なロググループを生成したくない

2018-07-30


Elastic Beanstalk(以下、EB)の設定で「CloudWatch Logs へのインスタンスログのストリーミング」を有効にする人多いと思います。
CloudWatchで色んなログを簡単に見られるから良いですよね。
しかし、生成されるロググループが多くて困ってませんか?
プラットホームをNodeJSを選択して一つの環境を立ち上げたら少なくとも下記の六つのロググループが生成されるはずです。

  • ../eb-activity.log
  • ../httpd/access.log
  • ../httpd/error_log
  • ../nginx/access.log
  • ../nginx/error.log
  • ../nodejs/nodejs.log

他のプラットフォームを選んだ時に生成されるログのリストはこれを参照してください。
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html#AWSHowTo.cloudwatchlogs.loggroups

EBアプリケーション一つに環境が二つぐらい運用しているなら12個ぐらいなので気にならないかも知れません。
しかし、色んなアプリを運用していて、環境もテスト用のを生成しては消したりしていたらすごい数になります。
上記の六つのログの中で要らないものがいくつか生成されるから、すごい数の中でそれを見ていたら精神的にきついですよね。
例えば、NodeJSをプラットホームに選択してnginxを利用するならApacheのLogである「../httpd/access.log」と「../httpd/error_log」は要りませんよね。
「../httpd/access.log」や「../httpd/error_log」に実際何かがここに記載されることもありません。
明らかに要らないです。
この二つのロググループを生成されないようにするだけで1/3の無駄が省かれるわけです。
それがEBの仕組みを利用して実現出来たら良いですよね!

出来ません。。。

ここまで言っておいてあれですが、本当に出来ません。
EC2 インスタンス内の/etc/awslogs/config/beanstalklogs.confに生成されるログの設定が書かれているので、.ebextensionsを利用してこれを書き換えてあげれば良いかなと思った時期が俺にもありました。
しかし、まず Elastic Beanstalk がインスタンス内にデフォルトの設定ファイルを作成するため、このタイミングで CloudWatch Logs のロググループが生成されてしまうわけです。

ならば、残る方法はEBの仕組みを使わないようにする方法です。
どう言うことかと言うと、「CloudWatch Logs へのインスタンスログのストリーミング」を有効にせずに、.ebextensions配下の設定ファイルを用いて「CloudWatch Logs エージェント」のインストールや設定を自前で行うことです。
自前で設定を行う時に参考に出来る公式ページは下記の通りです。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/EC2NewInstanceCWL.html
要は「設定ファイル用意して、IAMロールをEC2インスタンスに付与して、ユーザデータを入れてあげてね」です。

ロググループ生成しないだけでこの努力は見合わないので、俺は要らないロググループはCloudWatchページでクリックでぼちぼち削除することにしました。
はぁ。。。