我希望通过代理将 Docker 容器日志发布到 Amazon CloudWatch。这是否可行?

将 Docker 容器日志推送到 CloudWatch 时可以使用代理。此步骤在​ Docker 实例和互联网流量之间添加了一个额外的安全层。 

在开始之前,请确保设置了您的特定使用案例所需的基本 ​Docker 基础设施。

在此示例解决方法中,基础设施包括:

  • 属于私有子网的一部分的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,它充当 Docker 容器实例。
  • 属于公有子网的一部分的 EC2 实例,它充当代理实例。
  • 安装在私有子网中的 EC2 实例之上的 Docker 守护程序。​此守护程序配置为允许所有容器任务将其标准输出日志推送到 CloudWatch。
  • 作为操作系统 (OS) 的 Amazon Linux 2。

准备您的 Docker 实例

1.    设置 ​Linux 环境变量以将所有流量从 Docker 容器实例路由到您的代理实例。例如:

$ export https_proxy=http://192.0.2.86:8888/
$ export http_proxy=http://192.0.2.86:8888/
$ export no_proxy=localhost,169.254.169.254

注意:​这些是 no_proxy 配置的最低要求。请确保包括您不希望客户端通过代理转到的任何其他目标 IP 地址。​

2.    将 Docker 容器安装到您的 Docker 实例中。例如:

$ sudo yum update -y
$ sudo yum install docker -y
$ sudo docker –version

3.    将您的 Docker 实例更新至最新版本。

4.    验证您的 Docker 安装:

$ docker run hello-world

5.    检查输出。请确保您收到安装验证消息,类似以下内容:

"Hello From Docker!" 
"This message shows that your installation appears to be working correctly."

将您的代理配置添加到 Docker

对于 Docker 引擎安装在 Linux init(包括 Amazon Linux、RHEL 6 或 CentOS 6 分发版本)中的配置:

1.    使用您的首选编辑器打开配置文件 /etc/sysconfig/docker

2.    将您的代理配置添加到此文件。例如:

# Setup proxy
export http_proxy="http://192.0.2.86:8888/"
export https_proxy="http://192.0.2.86:8888/"
export no_proxy="/var/run/docker.sock,localaddress,localhost,169.254.169.254"

注意:​这些是 no_proxy 配置的最低要求。请确保包括您不希望客户端通过代理转到的任何其他目标 IP 地址。​

3.    保存您的配置文件。

4.    重启 Docker 服务:

$ sudo service docker restart

对于 Docker 引擎安装在 Linux systemd 系统管理守护程序(包括 Amazon Linux 2 和 RHEL 7 分发版本)中的配置:

1.    为 Docker 服务创建 systemd 目录。例如:

$ sudo mkdir -p /etc/systemd/system/docker.service.d

2.    根据您的配置创建 HTTP 或 HTTPS 代理文件。例如:

$ vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"
$ vim /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

注意:​这些是 no_proxy 配置的最低要求。请确保包括您不希望客户端通过代理转到的任何其他目标 IP 地址。​

3.    刷新所做更改:

$ sudo systemctl daemon-reload

4.    重启 Docker:

$ sudo systemctl restart docker

5.    验证您的新配置:

$ systemctl show --property=Environment docker

6.    检查输出:

Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

​测试您的 Docker 日志是否已推送到 CloudWatch

1.    在 Docker 中运行 nginx 映像。

2.    使用 Docker awslogs 日志驱动程序将任务的标准输出日志推送到 CloudWatch Logs。例如:

$ sudo docker run -d --name nginx --log-driver=awslogs --log-opt awslogs-region=eu-west-1 --log-opt awslogs-group=DockerLogGroupWithProxy --log-opt awslogs-create-group=true -p 8112:80 nginx

3.    使用 curl 生成您的第一个 Docker 任务的日志。例如:

curl localhost:8112

4.    在 CloudWatch 控制台中查看发送到您的日志组的数据

5.    验证您的 Docker 任务的日志事件是否已推送到 CloudWatch 日志组。例如,查找如下所示的日志事件:

198.51.100.100 - - [19/Sep/2018:10:13:38 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.53.1" "-"

此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2018 年 12 月 6 日