目標
將容器日志吐到 AWS CloudWatch 里
創(chuàng)建生成 CloudWatch 訪問權(quán)限
創(chuàng)建一個包含日志權(quán)限的策略
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
將策略分配到具體的用戶上,這邊建議添加一個用戶,新添加的用戶僅選擇程序訪問即可。
在創(chuàng)建用戶后會得到 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 保存另用。
Docker 容器日志
Docker 本身支持直接將日志傳送到 CloudWatch 內(nèi),在 https://docs.docker.com/config/containers/logging/awslogs/ 有詳細介紹,下面展示詳細操作。
創(chuàng)建必要的文件
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
測試日志
創(chuàng)建相關的 CloudWatch 日志組 /my/test 并為其創(chuàng)建一個日志流 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 記錄已經(jīng)上去了。
注意的是,使用 --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