本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CloudWatch 解決方案:Amazon EC2 上的 NGINX 工作負載
此解決方案可協助您針對在 EC2 執行個體上執行的 NGINX 應用程式,使用 CloudWatch 代理程式來設定out-of-the-box指標集合。如需所有 CloudWatch 可觀測性解決方案的一般資訊,請參閱 CloudWatch 可觀測性解決方案。
要求
此解決方案與下列條件相關:
-
支援的版本:NGINX 1.24 版
-
運算:Amazon EC2
-
在指定的 中,在所有 NGINX 工作負載中最多支援 500 個 EC2 執行個體 AWS 區域
-
CloudWatch 代理程式的最新版本
-
Prometheus Exporter:nginxinc/nginx-prometheus-exporter (Apache 2.0 授權)
-
EC2 執行個體上安裝的 SSM 代理程式
注意
AWS Systems Manager (SSM 代理程式) 預先安裝在 AWS 和信任的第三方提供的一些 Amazon Machine Image AMIs) 上。如果未安裝代理程式,您可以使用作業系統類型的程序手動安裝代理程式。
優勢
解決方案提供 NGINX 監控,為下列使用案例提供寶貴的洞見:
-
檢閱連線指標以識別潛在的瓶頸、連線問題或非預期的使用。
-
分析 HTTP 請求磁碟區以了解 NGINX 的整體流量負載。
以下是解決方案的主要優點:
-
使用 CloudWatch 代理程式組態自動化 NGINX 的指標集合,消除手動檢測。
-
為 NGINX 指標提供預先設定的合併 CloudWatch 儀表板。儀表板會自動處理使用 解決方案設定之新 NGINX EC2 執行個體的指標,即使您第一次建立儀表板時這些指標不存在。
下圖是此解決方案的儀表板範例。

成本
此解決方案會在您的帳戶中建立和使用 資源。您需要支付標準用量的費用,包括下列項目:
-
CloudWatch 代理程式為此解決方案收集的所有指標都會使用內嵌指標格式 (EMF) 發佈至 CloudWatch Logs。這些 CloudWatch 日誌會根據其磁碟區和保留期間收費。因此,您不需要為此解決方案的任何 PutMetricData API 呼叫付費。從您的日誌擷取和擷取的指標會以自訂指標計費。此解決方案使用的指標數目取決於 EC2 主機數目。
-
針對解決方案設定的每個 NGINX EC2 主機總共發佈八個指標。
-
-
一個自訂儀表板。
如需 CloudWatch 定價的詳細資訊,請參閱 Amazon CloudWatch 定價
定價計算器可協助您預估使用此解決方案的每月約略成本。
使用 定價計算器來估算每月解決方案成本
-
針對選擇區域,選取 AWS 區域 您要部署解決方案的 。
-
在指標區段中,針對指標數量輸入
8 * number of EC2 instances configured for this solution
。 -
在日誌區段中,針對標準日誌:資料擷取,輸入 CloudWatch Agent 在所有 EC2 主機中產生的每日預估日誌磁碟區。例如,五個 EC2 執行個體每天產生的位元組少於 1000 個。設定完成後,您可以使用 CloudWatch Logs 提供的
IncomingBytes
指標來檢查位元組用量。請務必選取適當的日誌群組。 -
在日誌區段中,針對日誌儲存/存檔 (標準和已取代的日誌),選取
Yes to Store Logs: Assuming 1 month retention
。如果您決定對保留期進行自訂變更,請修改此值。 -
在儀表板和警示區段中,針對儀表板數量,輸入
1
。 -
您可以在定價計算器底部查看每月預估成本。
此解決方案的 CloudWatch 代理程式組態
CloudWatch 代理程式是可在您的伺服器和容器化環境中持續自主執行的軟體。它會從您的基礎設施和應用程式收集指標、日誌和追蹤,並將其傳送至 CloudWatch 和 X-Ray。
如需 CloudWatch 代理程式的詳細資訊,請參閱 使用 CloudWatch 代理程式收集指標、日誌和追蹤。
此解決方案中的代理程式組態會收集一組指標,協助您開始監控和觀察 NGINX 工作負載。CloudWatch 代理程式可設定為收集比儀表板預設顯示的更多 NGINX 指標。如需您可以收集的所有 NGINX 指標清單,請參閱 NGINX OSS 的指標
設定 CloudWatch 代理程式之前,您必須先設定 NGINX 以公開其指標。其次,您必須安裝和設定第三方 Prometheus 指標匯出工具。
公開 NGINX 指標
注意
下列命令適用於 Linux。檢查 NGINX for Windows 頁面
您必須先啟用stub_status
模組。在 NGINX 組態檔案中新增位置區塊。在 的 server
區塊中新增下列行nginx.conf
,以啟用 NGINX 的stub_status
模組:
location /nginx_status { stub_status on; allow 127.0.0.1; # Allow only localhost to access deny all; # Deny all other IPs }
重新載入 NGINX 之前,請驗證您的 NGINX 組態:
sudo nginx -t
此驗證命令有助於防止任何無法預期的錯誤,這可能會導致您的網站被縮減。下列範例示範成功的回應:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
成功驗證更新後的組態後,請重新載入 NGINX (預期不會輸出):
sudo systemctl reload nginx
此命令會指示 NGINX 程序重新載入組態。與完全重新啟動相比,重新載入更為優雅。重新載入會使用新組態啟動新的工作者程序,並正常關閉舊的工作者程序。
測試 NGINX 狀態端點:
curl http://127.0.0.1/nginx_status
下列範例示範成功的回應:
Active connections: 1 server accepts handled requests 6 6 6 Reading: 0 Writing: 1 Waiting: 0
下列範例示範失敗回應 (在繼續之前檢閱先前的步驟):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>The page is not found</title> ...
設定 Prometheus 指標匯出工具
從官方 GitHub 儲存庫
下列範例示範 AMD64 的 命令:
cd /tmp wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v1.3.0/nginx-prometheus-exporter_1.3.0_linux_amd64.tar.gz tar -xzvf nginx-prometheus-exporter_1.3.0_linux_amd64.tar.gz sudo cp nginx-prometheus-exporter /usr/local/bin/ rm /tmp/nginx-prometheus-exporter*
執行 Prometheus 匯出工具,並將其指向 NGINX stub 狀態頁面:
nohup /usr/local/bin/nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1/nginx_status &>/dev/null &
下列範例示範回應 (背景任務 ID 和 PID):
[1] 74699
測試 NGINX Prometheus 端點
驗證 NGINX Prometheus 匯出工具已開始公開相關指標:
curl http://localhost:
port-number
/metrics
下列範例示範成功的回應:
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 0 go_gc_duration_seconds{quantile="0.25"} 0 ... # HELP nginx_connections_accepted Accepted client connections # TYPE nginx_connections_accepted counter nginx_connections_accepted 14 # HELP nginx_connections_active Active client connections # TYPE nginx_connections_active gauge nginx_connections_active 1 ... # TYPE promhttp_metric_handler_requests_total counter promhttp_metric_handler_requests_total{code="200"} 1 promhttp_metric_handler_requests_total{code="500"} 0 promhttp_metric_handler_requests_total{code="503"} 0
此解決方案的代理程式組態
代理程式收集的指標在代理程式組態中定義。解決方案提供代理程式組態,以收集適合解決方案儀表板維度的建議指標。
部署解決方案的步驟稍後會在 中說明部署解決方案的代理程式。以下資訊旨在協助您了解如何自訂您環境的代理程式組態。
您必須為您的環境自訂代理程式和 Prometheus 組態的某些部分,例如 Prometheus 匯出工具使用的連接埠號碼。
Prometheus 匯出工具使用的連接埠可以使用下列命令進行驗證:
sudo netstat -antp | grep nginx-prom
下列範例示範回應 (請參閱連接埠值 9113):
tcp6 0 0 :::9113 :::* LISTEN 76398/nginx-prometh
NGINX 主機的代理程式組態
具有 Prometheus 監控功能的 CloudWatch 代理程式需要兩種組態來湊集 Prometheus 指標。每個組態都會儲存為 SSM 參數存放區中的個別參數,如稍後 所述步驟 2:將建議的 CloudWatch 代理程式組態檔案存放在 Systems Manager 參數存放區。
第一個組態適用於 Prometheus 匯出工具,如 Prometheus 的 scrape_config
Prometheus 組態
將 port-number
取代為您伺服器的連接埠。
global: scrape_interval: 30s scrape_timeout: 10s scrape_configs: - job_name: 'nginx' metrics_path: /metrics static_configs: - targets: ['localhost:
port-number
'] ec2_sd_configs: - port:port-number
relabel_configs: - source_labels: ['__meta_ec2_instance_id'] target_label: InstanceId metric_relabel_configs: - source_labels: ['__name__'] regex: 'nginx_up|nginx_http_requests_total|nginx_connections_.*' action: keep
CloudWatch 代理程式組態
根據先前的 CloudWatch 代理程式組態,這些指標會使用內嵌指標格式 (EMF) 透過 CloudWatch Logs 發佈。這些日誌設定為使用日誌群組 nginx
。您可以使用代表 CloudWatch 日誌的不同名稱來自訂 log_group_name
。
如果您使用的是 Windows Server,請將下列組態中的 prometheus_config_path
設定為 C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus.yaml
。
{ "agent": { "metrics_collection_interval": 60 }, "logs": { "metrics_collected": { "prometheus": { "log_group_name": "nginx", "prometheus_config_path": "/opt/aws/amazon-cloudwatch-agent/etc/prometheus.yaml", "emf_processor": { "metric_declaration_dedup": true, "metric_namespace": "CWAgent", "metric_declaration":[ { "source_labels":["InstanceId"], "metric_selectors":["nginx_up", "nginx_http_requests_total", "nginx_connections*"], "dimensions": [["InstanceId"]] } ] } } } } }
部署解決方案的代理程式
根據使用案例,安裝 CloudWatch 代理程式有數種方法。我們建議您使用此解決方案的 Systems Manager。它提供主控台體驗,並可讓您更輕鬆地管理單一 AWS 帳戶中的受管伺服器機群。本節中的指示使用 Systems Manager,當您沒有執行現有組態的 CloudWatch 代理程式時,適用於 。您可以依照中的步驟,檢查 CloudWatch 代理程式是否正在執行確認 CloudWatch 代理程式正在執行中。
如果您已在部署工作負載和管理代理程式組態的 EC2 主機上執行 CloudWatch 代理程式,您可以略過本節中的指示,並遵循現有的部署機制來更新組態。請務必將新的 CloudWatch 代理程式和 Prometheus 組態與您現有的組態合併,然後部署合併的組態。如果您使用 Systems Manager 來存放和管理 CloudWatch 代理程式的組態,您可以將組態合併到現有的參數值。如需詳細資訊,請參閱管理 CloudWatch 代理程式組態檔案。
注意
使用 Systems Manager 部署下列 CloudWatch 代理程式組態,將取代或覆寫 EC2 執行個體上任何現有的 CloudWatch 代理程式組態。您可以修改此組態,以符合您的唯一環境或使用案例。組態中定義的指標是儀表板提供解決方案所需的最低數量。
部署程序包含下列步驟:
-
步驟 1:確保目標 EC2 執行個體具有所需的 IAM 許可。
-
步驟 2:將建議的代理程式組態檔案儲存在 Systems Manager 參數存放區中。
-
步驟 3:使用 堆疊在一或多個 EC2 執行個體上安裝 CloudWatch AWS CloudFormation 代理程式。
-
步驟 4:確認代理程式設定已正確設定。
步驟 1:確保目標 EC2 執行個體具有所需的 IAM 許可
您必須授予 Systems Manager 安裝和設定 CloudWatch 代理程式的許可。您必須授予 CloudWatch 代理程式從 EC2 執行個體發佈遙測到 CloudWatch 的許可。您也必須授予 CloudWatch 代理程式 EC2 讀取存取權。EC2 InstanceId 需要 EC2 讀取存取權,才能新增為指標維度。此額外需求由 驅動prometheus.yaml
,如上所述,因為它 __meta_ec2_instance_id
透過 EC2 服務探索使用 。
確定連接至執行個體的 IAM 角色已連接 CloudWatchAgentServerPolicy、AmazonSSMManagedInstanceCore 和 AmazonEC2ReadOnlyAccess IAM 政策。
-
若要建立角色,請參閱 建立 IAM 角色,以便在 Amazon EC2 執行個體上搭配 CloudWatch 代理程式使用
-
建立角色之後,請將角色連接至 EC2 執行個體。若要將角色連接至 EC2 執行個體,請遵循將 IAM 角色連接至執行個體中的步驟。
步驟 2:將建議的 CloudWatch 代理程式組態檔案存放在 Systems Manager 參數存放區
參數存放區可安全地存放和管理組態參數,簡化在 EC2 執行個體上安裝 CloudWatch 代理程式,無需使用硬式編碼值。這可確保更安全且靈活的部署程序,實現集中式管理,並簡化跨多個執行個體的組態更新。
使用下列步驟,將建議的 CloudWatch 代理程式組態檔案儲存為參數存放區中的參數。
建立 CloudWatch 代理程式組態檔案做為參數
在 https AWS Systems Manager ://https://console.aws.amazon.com/systems-manager/
。 -
確認主控台上選取的區域是執行 NGINX 的區域。
-
從導覽窗格中,選擇應用程式管理、參數存放區
-
請依照下列步驟為組態建立新的參數。
-
選擇 Create parameter (建立參數)。
-
在名稱方塊中,輸入您將在後續步驟中用來參考 CloudWatch 代理程式組態檔案的名稱。例如
AmazonCloudWatch-NGINX-CloudWatchAgent-Configuration
。 -
(選用) 在描述方塊中,輸入 參數的描述。
-
針對參數層,選擇標準。
-
在類型選擇字串。
-
針對資料類型,選擇文字。
-
在值方塊中,貼上 中列出的對應 JSON 區塊NGINX 主機的代理程式組態。請務必視需要自訂 。例如,相關的
log_group_name
。 -
選擇 Create parameter (建立參數)。
-
建立 Prometheus 組態檔案做為參數
開啟 AWS Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/
://www.。 -
從導覽窗格中,選擇應用程式管理、參數存放區
-
請依照下列步驟為組態建立新的參數。
-
選擇 Create parameter (建立參數)。
-
在名稱方塊中,輸入您將在後續步驟中用來參考組態檔案的名稱。例如
AmazonCloudWatch-NGINX-Prometheus-Configuration
。 -
(選用) 在描述方塊中,輸入 參數的描述。
-
針對參數層,選擇標準。
-
在類型選擇字串。
-
針對資料類型,選擇文字。
-
在值方塊中,貼上 中列出的對應 YAML 區塊NGINX 主機的代理程式組態。請務必視需要自訂 。例如,根據 的相關連接埠號碼
targets
。 -
選擇 Create parameter (建立參數)。
-
步驟 3:安裝 CloudWatch 代理程式並使用 AWS CloudFormation 範本套用組態
您可以使用 AWS CloudFormation 安裝代理程式,並將其設定為使用您在先前步驟中建立的 CloudWatch 代理程式組態。
安裝和設定此解決方案的 CloudWatch 代理程式
-
使用此連結開啟 AWS CloudFormation 快速建立堆疊精靈: https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/CloudWatchAgent/CFN/v1.0.0/cw-agent-installation-template-with-prometheus-config-1.0.0.json
。 -
確認主控台上選取的區域是執行 NGINX 工作負載的區域。
-
針對堆疊名稱,輸入名稱來識別此堆疊,例如
CWAgentInstallationStack
。 -
在參數區段中,指定下列項目:
-
針對 CloudWatchAgentConfigSSM,輸入您先前建立之代理程式組態的 AWS Systems Manager 參數名稱,例如
AmazonCloudWatch-NGINX-CloudWatchAgent-Configuration
。 -
針對 PrometheusConfigSSM,輸入您先前建立之代理程式組態的 AWS Systems Manager 參數名稱,例如
AmazonCloudWatch-NGINX-Prometheus-Configuration
。 -
若要選取目標執行個體,您有兩個選項。
-
針對 InstanceIds,指定執行個體 IDs 清單的逗號分隔清單,列出您要使用此組態安裝 CloudWatch 代理程式IDs。您可以列出單一執行個體或數個執行個體。
-
如果您要大規模部署,您可以指定 TagKey 和對應的 TagValue,以使用此標籤和值鎖定所有 EC2 執行個體。如果您指定 TagKey,則必須指定對應的 TagValue。(對於 Auto Scaling 群組,
aws:autoscaling:groupName
請為 TagKey 指定 ,並為要部署到 Auto Scaling 群組內所有執行個體的 TagValue 指定 Auto Scaling 群組名稱。)
-
-
-
檢閱設定,然後選擇建立堆疊。
如果您想要先編輯範本檔案以進行自訂,請選擇建立堆疊精靈下的上傳範本檔案選項,以上傳編輯的範本。如需詳細資訊,請參閱在 AWS CloudFormation 主控台上建立堆疊。您可以使用以下連結來下載範本:https://https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/CloudWatchAgent/CFN/v1.0.0/cw-agent-installation-template-with-prometheus-config-1.0.0.json
注意
此步驟完成後,此 Systems Manager 參數將與目標執行個體中執行的 CloudWatch 代理程式相關聯。這表示:
-
如果已刪除 Systems Manager 參數,代理程式將停止。
-
如果已編輯 Systems Manager 參數,組態變更會自動套用到代理程式,排程頻率預設為 30 天。
-
如果您想要立即套用變更至此 Systems Manager 參數,則必須再次執行此步驟。如需關聯的詳細資訊,請參閱在 Systems Manager 中使用關聯。
步驟 4:確認代理程式設定已正確設定
您可以依照中的步驟來驗證 CloudWatch 代理程式是否已安裝確認 CloudWatch 代理程式正在執行中。如果 CloudWatch 代理程式未安裝並執行,請確定您已正確設定所有項目。
-
請確定您已連接具有 EC2 執行個體正確許可的角色,如中所述步驟 1:確保目標 EC2 執行個體具有所需的 IAM 許可。
-
請確定您已正確設定 Systems Manager 參數的 JSON。請遵循 使用 安裝 CloudWatch 代理程式的故障診斷 AWS CloudFormation 中的步驟。
如果一切設定正確,則您應該會看到 NGINX 指標發佈至 CloudWatch。您可以檢查 CloudWatch 主控台,以確認它們正在發佈。
驗證 NGINX 指標是否已發佈至 CloudWatch
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 -
選擇指標、所有指標。
-
請確定您已選取部署解決方案的區域,然後選擇自訂命名空間 CWAgent。
-
搜尋 等指標
nginx_http_requests_total
。如果您看到這些指標的結果,則會將指標發佈至 CloudWatch。
建立 NGINX 解決方案儀表板
此解決方案提供的儀表板會透過彙總和呈現所有執行個體的指標,來呈現 NGINX 工作負載指標。儀表板會顯示每個指標的前 10 個貢獻者 (每個指標前 10 個小工具) 的明細。這可協助您快速識別對觀察指標有重大貢獻的極端值或執行個體。
若要建立儀表板,您可以使用下列選項:
使用 CloudWatch 主控台建立儀表板。
使用 AWS CloudFormation 主控台部署儀表板。
下載 AWS CloudFormation 基礎設施做為程式碼,並將其整合為持續整合 (CI) 自動化的一部分。
透過使用 CloudWatch 主控台建立儀表板,您可以在實際建立和收費之前預覽儀表板。
注意
在此解決方案 AWS CloudFormation 中使用 建立的儀表板會顯示部署解決方案的 區域的指標。請務必在發佈 NGINX 指標的區域中建立 AWS CloudFormation 堆疊。
如果您已在 CloudWatch 代理程式組態CWAgent
中指定 以外的自訂命名空間,則必須變更儀表板的 CloudFormation 範本,以CWAgent
將 取代為您正在使用的自訂命名空間。
透過 CloudWatch Console 建立儀表板
-
使用此連結開啟 CloudWatch 主控台建立儀表板:https://https://console.aws.amazon.com/cloudwatch/home?#dashboards?dashboardTemplate=NginxOnEc2&referrer=os-catalog。
-
確認主控台上選取的區域是執行 NGINX 工作負載的區域。
-
輸入儀表板的名稱,然後選擇建立儀表板。
為了輕鬆區分此儀表板與其他區域中的類似儀表板,建議您在儀表板名稱中包含區域名稱,例如
NGINXDashboard-us-east-1
。 -
預覽儀表板,然後選擇儲存以建立儀表板。
透過 建立儀表板 AWS CloudFormation
-
使用此連結開啟 AWS CloudFormation 快速建立堆疊精靈: https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/NGINX_EC2/CloudWatch/CFN/v1.0.0/dashboard-template-1.0.0.json
。 -
確認主控台上選取的區域是執行 NGINX 工作負載的區域。
-
針對堆疊名稱,輸入名稱來識別此堆疊,例如
NGINXDashboardStack
。 -
在參數區段中,指定 DashboardName 參數下的儀表板名稱。
-
為了輕鬆區分此儀表板與其他區域中的類似儀表板,建議您在儀表板名稱中包含區域名稱,例如
NGINXDashboard-us-east-1
。 -
在功能和轉換下確認轉換的存取功能。請注意,CloudFormation 不會新增任何 IAM 資源。
-
檢閱設定,然後選擇建立堆疊。
-
在堆疊狀態為 CREATE_COMPLETE 之後,請選擇建立的堆疊下方的資源索引標籤,然後選擇實體 ID 下方的連結以前往儀表板。您也可以在 CloudWatch 主控台中存取儀表板,方法是選擇主控台左側導覽窗格中的儀表板,然後在自訂儀表板下尋找儀表板名稱。
如果您想要先編輯範本檔案以進行自訂,請選擇建立堆疊精靈下的上傳範本檔案選項,以上傳編輯的範本。如需詳細資訊,請參閱在 AWS CloudFormation 主控台上建立堆疊。您可以使用以下連結來下載範本:https://https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/NGINX_EC2/CloudWatch/CFN/v1.0.0/dashboard-template-1.0.0.json
NGINX 儀表板入門
以下是您可以使用新 NGINX 儀表板嘗試的一些任務。這些任務可讓您驗證儀表板是否正常運作,並為您提供一些實際操作體驗,以使用它來監控 NGINX 工作負載。嘗試這些方法時,您將熟悉導覽儀表板和解譯視覺化指標。
檢閱連線指標
在連線區段中,您可以找到數個關鍵指標,這些指標可讓您深入了解 NGINX 伺服器的用戶端連線處理。監控這些連線指標可協助您識別潛在的瓶頸、連線問題或非預期的連線模式。
-
接受的用戶端連線
-
作用中用戶端連線
-
已處理的用戶端連線
-
讀取請求的連線
-
閒置用戶端連線
-
寫入回應的連線
分析 HTTP 請求磁碟區
HTTP 請求區段中的request
指標會顯示 NGINX 伺服器處理的 HTTP 請求總數。隨著時間的推移追蹤此指標可協助您了解 NGINX 基礎設施的整體流量負載,並規劃資源分配和相應地擴展。