ElasticBeanstalk＋Docker環境のログ周りについてまとめてみた

##はじめに
AWSのElasticBeanstalk＋Docker環境でログ周りをみた時に、logrotateとかcronとか設定ファイルの関係性や吐き出すログについてメモ取っていたので、頑張ってツリー構造にしてみました。
その時に見ていたものを中心に書いているので、足りないものがありますのであしからず。

##環境
* ElasticBeanstalk
* Docker running on 64bit Amazon Linux/2.7.4
* 単一EC2インスタンス


##インスタンス内のファイルツリー

###ログファイル群

```
/var
.
├── lib
│    ├─ awslogs
│    │     └── agent-state
│    ├─ logrotate.status
│    └─ docker
│          └── containers
│                  └── [コンテナID]
│                    　　　　　　　　 └── [コンテナID]-json.log
└── log
　    ├─ awslogs.log
　    ├─ cron
　    ├─ eb-docker
　    │      └── containers
　    │             └── eb-current-app
　    │                    ├── rotated
　    │                    └── [コンテナID]-stdouterr.log
　    ├─ rotated
　    ├─ docker-events.log
　    ├─ docker.log
　    ├─ eb-activity.log
　    ├─ nginx
　    │      ├── error.log
　    │      ├── access.log
　    │      └── rotated
　    └─ healthd
　           ├── daemon.log
　           └── rotated
```

* `etc/lib/docker/[コンテナID]/[コンテナID]-json.log`
    * Dockerコンテナが出力する標準のログファイル
    * インスタンスで動作しているアプリが吐くログが出力される
    
* `etc/cron`
    * cronの実行ログ

* `etc/log/eb-docker/containers/[コンテナID]-stdouterr.log`
    * Beanstalk 環境内で実行されている `docker logs` コマンドが出力しているログファイル
    * インスタンスで動作しているアプリが吐くログが出力される
    * `etc/lib/docker/[コンテナID]/[コンテナID]-json.log`と同じものが出力される
    * cloudwatchで監視している場合はこちらのログが転送される

* `etc/log/docker-events.log`
    * コンテナ関連のログ

* `etc/log/docker.log`
    * Docker関連のログ。docker-events.logの内容も含む

* `etc/log/rotated`
    * docker-events.logとdocker.logがログローテートされたものが入る

* `etc/log/eb-activity.log`
    * デプロイが実行された等のEB関連のログ

* `etc/log/nginx/`
    * nginx関連のログ


* `etc/log/healthd/`
    * daemon関連のログ



###ログローテート設定ファイル群
```
/etc
.
├── awslogs
│       └─ config
│             └── beanstalk-log.conf
├── cron.d
│       ├─ 0hourly
│       ├─ awslogs
│       └─ publishlogs
│ 
├── cron.hourly
│       ├─ 0anacron
│       ├─ cron.logrotate.elasticbeanstalk.awslogs.conf
│       ├─ cron.logrotate.elasticbeanstalk.healthd.conf
│       ├─ cron.logrotate.elasticbeanstalk.docker.conf
│       ├─ cron.logrotate.elasticbeanstalk.applogs.conf
│       ├─ cron.logrotate.elasticbeanstalk.dockerdaemon.conf
│       ├─ cron.logrotate.elasticbeanstalk.nginx.conf
│       └─ cron.logcleanup.elasticbeanstalk.healthd.nginx.conf
│ 
├── logrotate.d
│       └─ awslogs 
│ 
└── logrotate.elasticbeanstalk.hourly
　       ├─ logrotate.elasticbeanstalk.awslogs.conf
　       ├─ logrotate.elasticbeanstalk.healthd.conf
　       ├─ logrotate.elasticbeanstalk.docker.conf
　       ├─ logrotate.elasticbeanstalk.applogs.conf
　       ├─ logrotate.elasticbeanstalk.dockerdaemon.conf
　       └─ logrotate.elasticbeanstalk.nginx.conf
```
* `/etc/cron.d/`
    * ここに格納された設定ファイルに従ってcronが実行される
    * 0hourlyだと`01 * * * * root run-parts /etc/cron.hourly`などが書かれている
        * 毎時０１分に`/etc/cron.hourly`以下のファイルを実行するという意味

* `/etc/cron.hourly/`
    * `cron.d/0hourly`でこのディレクトリのファイルが実行される
    * それぞれのconfファイルが`logrotate.elasticbeanstalk.hourly`以下にある対応する設定ファイルでログローテートを実行する

* `/etc/logrotate.elasticbeanstalk.hourly/`
    * 対応するログファイルのログローテートの設定が書かれている

* `/etc/logrotate.elasticbeanstalk.hourly/logrotate.elasticbeanstalk.healthd.conf`
    * etc/log/healthd/daemon.logのログローテート設定
   
* `/etc/logrotate.elasticbeanstalk.hourly/logrotate.elasticbeanstalk.docker.conf`
    * etc/log/docker-events.logのログローテート設定

* `/etc/logrotate.elasticbeanstalk.hourly/logrotate.elasticbeanstalk.dockerdaemon.conf`
    * etc/log/docker.logのログローテート設定

* `/etc/logrotate.elasticbeanstalk.hourly/logrotate.elasticbeanstalk.nginx.conf`
    * etc/log/nginx/のログローテート設定

##ログローテートのまとめ
ログローテートの設定ファイル【logrotate.elasticbeanstalk.hourly/】 
⬆️　
対応する設定ファイルでログローテートを実行【cron.hourly/】
⬆︎
指定した時間にファイルを実行【cron.d/】

##おわりに
EBのログローテートをカスタムしたくて色々調べてまとめて見たが、結構わかりづらかった。
そこのところを別で書くかもしれません。
このファイルは記載すべき！やここ間違ってる！などありましたらお願いいたします。