Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何通過代理將 Docker 容器日誌推送至 CloudWatch 日誌?
我想通過代理將我的 Docker 容器日誌發佈到 Amazon CloudWatch。
簡短描述
當您將 Docker 容器日誌推送到 CloudWatch 時,您可以使用代理。此步驟會在 Docker 執行個體和網際網路繫結流量之間新增一層額外的安全性。
解決方法
首先,請務必針對您的特定使用案例設定您的基本 Docker 基礎架構。
在此範例中,基礎架構包括:
- 作為 Docker 容器執行個體的私有子網路的一部分的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
- 作為代理執行個體的公有子網路一部分的 Amazon EC2 執行個體。
- 安裝在私有子網路中 Amazon EC2 執行個體頂部的 Docker 守護程式。此常駐程式已設定為允許所有容器任務將其標準輸出日誌推送至 CloudWatch。
- Amazon Linux 2 的操作系統 (OS)。
此外,請確定您的 AWS 身分識別與存取管理 (IAM) 角色具有 CloudWatchAgentAdminPolicy、CloudWatchAgentServerPolicy 或與您的私有執行個體相關聯的類似政策。此政策必須允許您建立日誌群組、建立日誌串流,以及進行 PutLogEvents 呼叫。
準備您的 Docker 執行個體
1. 設定 Linux 環境變數,將來自 Docker 容器執行個體的所有流量路由到您的 Proxy 執行個體。在下列範例中,IP 位址適用於做為代理執行個體的 EC2 執行個體:
$ 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 組態的最低需求。請務必包含您不希望用戶端透過 Proxy 存取的任何其他目標 IP 位址。
2. 將 Docker 容器安裝到您的 Docker 執行個體中。請參閱以下範例:
$ sudo yum update -y $ sudo yum install docker -y $ sudo docker version
3. 將您的 Docker 執行個體更新至最新版本。
4. 使用下列命令啟動 Docker 常駐程式:
sudo systemctl start docker
5. 若要允許 Docker 在沒有 sudo 權限的情況下執行,請執行下列命令:
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker docker run hello-world
6. 若要驗證您的 Docker 安裝,請檢閱輸出。請確定您看到類似下列內容的安裝驗證訊息:
"Hello From Docker!" "This message shows that your installation appears to be working correctly."
將您的代理設定添加到 Docker
對於在 Linux 初始化中安裝 Docker 引擎的組態(包括 Amazon Linux、RHEL 6 或 CentOS 6 發行版):
1. 使用您偏好的編輯器開啟設定檔案 /etc/sysconfig/docker 。
2. 將您的代理設定添加到檔案中。使用公用或代理執行個體的私有 IP 位址。請參閱以下範例:
# 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 組態的最低需求。請務必包含您不希望用戶端透過 Proxy 存取的任何其他目標 IP 位址。
3. 儲存您的組態檔案。
4. 重新啟動 Docker 服務:
$ sudo service docker restart
對於在 Linux 系統管理常駐程式中安裝 Docker 引擎的組態 (包括 Amazon Linux 2 和 RHEL 7 發行版本):
1. 建立 Docker 服務的 systemd 目錄。請參閱以下範例:
$ sudo mkdir -p /etc/systemd/system/docker.service.d
2. 根據您的組態,建立 HTTP 或 HTTPS 代理檔案。請參閱以下範例:
$ sudo 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 組態的最低需求。請務必包含您不希望用戶端透過 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 日誌。請參閱以下範例:
$ 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" "-"
相關資訊
- 語言
- 中文 (繁體)
