はじめに
AWS EC2内のDockerコンテナ上で動くサービス(docker-composeで管理)のログをCloudWatchLogsに投げ、VSCodeでリアルタイム監視ができるまでの手順をまとめる。
- Dockerのlog driverについて
- CloudWatchLogsへの登録
- VSCodeのAWS拡張についてとログの閲覧
Dockerのlog driverについて
Dockerの標準機能で/var/lib/docker/containers/にコンテナ内のログを出力するようになっている。そのため、Linuxのlogrotate等を使用する必要はない。
docker-composeでの実装例は以下の通り。
version: "3"
services:
hello:
image: "busybox:latest"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
CloudWatchLogsへの登録
上記で解説した、Dockerのlog driverを使用してログの出力先をCloudWatchLogsに変更することができる。
docker-composeでの実装例は以下の通り。
version: '3'
services:
app:
build:
context: .
dockerfile: prod/Dockerfile
restart: always
expose:
- 8000
environment:
- TZ=Asia/Tokyo
logging:
driver: awslogs
options:
awslogs-region: ap-northeast-1
awslogs-group: log-group-name
tag: "{{.ImageName}}.{{.Name}}.{{.FullID}}"
nginx:
build:
context: .
dockerfile: nginx/Dockerfile
restart: always
ports:
- 8080:80
depends_on:
- app
logging:
driver: awslogs
options:
awslogs-region: ap-northeast-1
awslogs-group: log-group-name
tag: "{{.ImageName}}.{{.Name}}.{{.FullID}}"
docker-composeではサービスごとにlog driverの設定を記述する。
awslogs-groupにはマネジメントコンソールで作成したロググループ名を書く。
VSCodeのAWS拡張についてとログの閲覧
VSCodeの拡張機能の検索窓にawsと打ち込めば、下の画像のようなAWS Toolkitが表示されるので、それをインストールする。

リージョンとアクセスキーを指示に従って設定する。

上の画像のCloudWatch Logsのタブを開くとロググループが表示されるので、右クリックしview log streamを選択する。
Output Colorizer拡張をインストールしておくと、ログをハイライト付きで見ることができるので入れるとよい。