はじめに
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拡張をインストールしておくと、ログをハイライト付きで見ることができるので入れるとよい。