如何通過代理將 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" "-"
相關資訊
相關內容
- 已提問 1 個月前lg...
- 已提問 2 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前