Docker + AWS CloudWatch 收集容器日志

目标

将容器日志吐到 AWS CloudWatch 里

创建生成 CloudWatch 访问权限

创建一个包含日志权限的策略

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

将策略分配到具体的用户上,这边建议添加一个用户,新添加的用户仅选择程序访问即可。
在创建用户后会得到 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 保存另用。

Docker 容器日志

Docker 本身支持直接将日志传送到 CloudWatch 内,在 https://docs.docker.com/config/containers/logging/awslogs/ 有详细介绍,下面展示详细操作。

创建必要的文件

mkdir -p /etc/systemd/system/docker.service.d/
vim /etc/systemd/system/docker.service.d/aws-credentials.conf

键入刚刚保存的 AK 和 SK

[Service]
Environment="AWS_ACCESS_KEY_ID="
Environment="AWS_SECRET_ACCESS_KEY="

保存后 reload systemctl 并重启 docker

sudo systemctl daemon-reload
sudo service docker restart

测试日志

创建相关的 CloudWatch 日志组 /my/test 并为其创建一个日志流 test-stream

接下来我们测试一下日志输出的情况

docker run --log-driver="awslogs" --log-opt awslogs-region="cn-north-1" --log-opt awslogs-group="/my/test" --log-opt awslogs-stream="test-stream" busybox echo hello

运行命令,可以在 CloudWatch test-stream 中看到 hello 记录已经上去了。

注意的是,使用 --log-driver="awslogs"docker logs 相关命令已不可用,请注意。

相关参考

https://wdullaer.com/blog/2016/02/28/pass-credentials-to-the-awslogs-docker-logging-driver-on-ubuntu/

https://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/using_cloudwatch_logs.html

https://cloud.tencent.com/developer/section/1091818

https://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/using_cloudwatch_logs.html

你可能感兴趣的:(Docker + AWS CloudWatch 收集容器日志)