##はじめに
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で監視している場合はこちらのログが転送される
- Beanstalk 環境内で実行されている
-
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
などが書かれている- 毎時01分に
/etc/cron.hourly
以下のファイルを実行するという意味
- 毎時01分に
-
/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のログローテートをカスタムしたくて色々調べてまとめて見たが、結構わかりづらかった。
そこのところを別で書くかもしれません。
このファイルは記載すべき!やここ間違ってる!などありましたらお願いいたします。