LoginSignup
17
13

More than 5 years have passed since last update.

Docker Composeで起動したコンテナのログを、Amazon CloudWatch Logsに送る

Posted at

TL;DR

  • Docker Composeで起動したコンテナのログを、Amazon CloudWatch Logsに送るようにしたい
    • 要するに、AWS環境で起動したコンテナのログを集約したい
    • AWS上のコンテナサービスの話は、ここでは置いておく
  • Dockerのlogging driverでAmazon CloudWatch Logs用のドライバがあるので、それを使用するようにdocker-compose.ymlに設定する

Dockerのlogging driver

Dockerコンテナには、ログをどこに出力するかを設定できる、logging driverの仕組みがあります。

Configure logging drivers

デフォルトは、json-file logging driverで、これはホスト側の/var/lib/docker/containers/[コンテナID]/[コンテナID]-json.logに出力されます。

JSON File logging driver

Dockerコンテナのログを、Amazon CloudWatch Logsに出力する

Dockerコンテナが使うlogging driverを、Amazon CloudWatch Logs logging driverに変更することで、DockerコンテナのログをAmazon CloudWatch Logsに送信することができます。
※なお、Amazon CloudWatch Logsにログ出力できるように、EC2へのIAMロールの付与は必要になります

Amazon CloudWatch Logs logging driver

あとは、これをdocker-compose.ymlに設定すればOKです。

Compose file reference / logging

以下のように、services内の各コンテナに対してlogging設定を書いていきます。指定するdriverは、awslogsです。

services:
  xxx:
    ...

    logging:
      driver: awslogs
      options:
        awslogs-region: ap-northeast-1
        awslogs-group: my-log-group

少なくとも、リージョン(awslogs-region)とロググループ(awslogs-group)は指定する必要があります。

また、あらかじめロググループは作成しておく必要があります

ログストリームは、デフォルトではコンテナのID(先頭12桁)が利用されます。

これを変更する場合は、awslogs-streamtagで指定して変更するとよいでしょう。

以下では、tagを使用して「イメージ名.コンテナ名.コンテナID(フル)」がログストリームとなるようにしています。

    logging:
      driver: awslogs
      options:
        awslogs-region: ap-northeast-1
        awslogs-group: my-log-group
        tag: "{{.ImageName}}.{{.Name}}.{{.FullID}}"
17
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
13