目标
将容器日志吐到 AWS CloudWatch 里
创建生成 CloudWatch 访问权限
创建一个包含日志权限的策略
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
将策略分配到具体的用户上,这边建议添加一个用户,新添加的用户仅选择程序访问即可。
在创建用户后会得到 AWS_ACCESS_KEY_ID
和 AWS_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=<aws_access_key_id>"
Environment="AWS_SECRET_ACCESS_KEY=<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://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
网友评论