CloudWatch 解決方案:Amazon EC2 上的 Kafka 工作負載 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CloudWatch 解決方案:Amazon EC2 上的 Kafka 工作負載

此解決方案可協助您針對 EC2 執行個體上執行的 Kafka 工作負載 (經紀人、生產者和消費者),使用 CloudWatch 代理程式來設定out-of-the-box指標集合。此外,它可協助您設定預先設定的 CloudWatch 儀表板。如需所有 CloudWatch 可觀測性解決方案的一般資訊,請參閱 CloudWatch 可觀測性解決方案

要求

此解決方案適用於下列條件:

優勢

解決方案提供 Kafka 伺服器監控,為下列使用案例提供寶貴的洞見:

  • 透過複寫和同步指標監控 Kafka 叢集運作狀態。

  • 透過請求失敗和延遲以及網路流量來追蹤中介裝置效能。

  • 監控生產者/消費者錯誤、延遲和消費者延遲。

  • 分析 Kafka 叢集的基礎 JVM 效能。

  • 在相同帳戶下透過 解決方案設定的多個 Kafka 叢集、生產者和消費者之間切換。

以下是解決方案的主要優點:

  • 使用 CloudWatch 代理程式組態自動化 Kafka 和基礎 JVM 的指標集合,消除手動檢測。

  • 為 Kafka 和 JVM 指標提供預先設定的合併 CloudWatch 儀表板。儀表板會自動處理使用 解決方案設定的新 Kafka EC2 執行個體的指標,即使您第一次建立儀表板時這些指標不存在。它還允許您將指標分組到邏輯應用程式中,以便於集中和管理。

下圖是此解決方案的儀表板範例。

Kafka 叢集 dashboard showing metrics for partitions, producer/consumer performance, and broker status.

成本

此解決方案會在您的帳戶中建立和使用 資源。您需要支付標準用量的費用,包括下列項目:

  • CloudWatch 代理程式收集的所有指標都會以自訂指標計費。此解決方案使用的指標數目取決於 EC2 主機數目。

    • 為解決方案設定的每個代理程式主機都會發佈 33 個指標加上一個指標 (disk_used_percent),其中每個 EC2 主機的指標計數取決於該主機的磁碟路徑數目。

    • 為解決方案設定的每個生產者主機都會發佈具有 topic維度的三個指標,以及沒有 topic維度的三個指標。對於具有 topic維度的指標,每個主題都計為單獨的指標。

    • 針對解決方案設定的每個取用者主機都會發佈兩個具有topic維度的指標,以及三個沒有topic維度的指標。對於具有主題維度的指標,每個主題都計為單獨的指標。

  • 一個自訂儀表板。

  • CloudWatch 代理程式請求發佈指標的 API 操作。使用此解決方案的預設組態,CloudWatch 代理程式會每分鐘為每個 EC2 主機呼叫 PutMetricData 一次。這表示在每個 EC2 主機的 30*24*60=43,200 30 天內會呼叫 PutMetricData API。

如需 CloudWatch 定價的詳細資訊,請參閱 Amazon CloudWatch 定價

定價計算器可協助您預估使用此解決方案的每月約略成本。

使用 定價計算器來估計您的每月解決方案成本
  1. 開啟 Amazon CloudWatch 定價計算器

  2. 指標區段中,針對指標數量輸入 broker_metrics_count + producer_metrics_count + consumer_metrics_count。計算這些項目,如下所示:

    • broker_metrics_count = (33 + 每個 EC2 主機的平均磁碟路徑數) * number_of_ec2_broker_hosts

    • producer_metrics_count = (3 * average_number_of_topics_per_producer_host + 3) * number_of_ec2_producer_hosts

    • consumer_metrics_count = (2 * average_number_of_topics_per_consumer_host + 3) * number_of_ec2_consumer_hosts

  3. APIs區段中,針對 API 請求的數量,輸入 43200 * number of EC2 instances configured for this solution

    根據預設,CloudWatch 代理程式每分鐘為每個 EC2 主機執行一次 PutMetricData 操作。

  4. 儀表板和警示區段中,針對儀表板數量,輸入 1

  5. 您可以在定價計算器底部查看每月預估成本。

此解決方案的 CloudWatch 代理程式組態

CloudWatch 代理程式是在您的伺服器和容器化環境中持續自動執行的軟體。它從您的基礎設施和應用程式收集指標、日誌和追蹤,並將其傳送到 CloudWatch 和 X-Ray。

如需 CloudWatch 代理程式的詳細資訊,請參閱 使用 CloudWatch 代理程式收集指標、日誌和追蹤

此解決方案中的代理程式組態會收集 Kafka、JVM 和 EC2 的基礎指標。根據預設,CloudWatch 代理程式可以設定為收集比儀表板顯示的更多 Kafka 和 JVM 指標。如需您可以收集的所有 Kafka 指標清單,請參閱 收集 Kafka 指標。如需您可以收集的所有 JVM 指標清單,請參閱 收集 JVM 指標。如需 EC2 指標的清單,請參閱 由 CloudWatch 代理程式在 Linux 和 macOS 執行個體上收集的指標

公開 Kafka 代理程式、生產者和消費者角色的 JMX 連接埠

CloudWatch 代理程式依賴 JMX 來收集與 Kafka 代理程式、生產者和消費者相關的指標。若要實現此目的,您必須在伺服器和應用程式上公開 JMX 連接埠。

對於 Kafka 代理程式,您必須使用JMX_PORT環境變數來設定連接埠。設定此環境變數之後,您必須重新啟動代理程式。檢閱應用程式的啟動指令碼和組態檔案,尋找新增這些引數的最佳位置。

例如,對於 Linux 和 macOS 系統,您可以使用下列命令來設定 JMX 連接埠。請務必指定未使用的連接埠號碼。

export JMX_PORT=port-number

對於 Kafka 生產者和消費者,公開 JMX 連接埠的指示取決於您用於生產者或消費者 JVM 應用程式的工作負載類型。請參閱您應用程式的文件,以尋找這些指示。

一般而言,若要啟用 JMX 連接埠以進行監控和管理,您可以為 JVM 應用程式設定下列系統屬性。下列範例會設定未經驗證的 JMX。如果您的安全政策/要求要求您使用密碼身分驗證或 SSL 啟用 JMX 以進行遠端存取,請參閱 JMX 文件以設定所需的屬性。

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=port-number -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

若要驗證 JMX 連接埠,請執行 ps aux | grep jmxremote.port。結果應會顯示 JVM 程序上已設定 JMX 連接埠。

此解決方案的代理程式組態

代理程式收集的指標會在代理程式組態中定義。解決方案提供代理程式組態,以收集適合解決方案儀表板維度的建議指標。每個 Kafka 角色,例如代理程式、生產者或消費者,都有自己的代理程式組態,可收集 Kafka 指標和基礎 JVM 和 EC2 指標。

部署解決方案的步驟稍後會在 中說明部署您解決方案的代理程式。以下資訊旨在協助您了解如何為您的環境自訂代理程式組態。

您必須為您的環境自訂下列代理程式組態的某些部分:

  • JMX 連接埠號碼是您在本文件上一節中設定的連接埠號碼。連接埠號碼位於組態中的 endpoint行。

  • ClusterName– 這用作收集的代理程式指標的維度。提供有意義的名稱,代表執行 Kafka 代理程式之執行個體的叢集分組。

  • ProcessGroupName– 這用作為代理程式收集的 JVM 指標的維度。提供與您為 提供的相同值ClusterName。這可讓您在解決方案儀表板中檢視與代理程式指標相同的 Kafka 代理程式群組的 JVM 指標。

  • ProducerGroupName– 這用作收集的生產者指標的維度。提供代表生產者執行個體群組的有意義的名稱。對於此值,您可以指定要用於解決方案儀表板中生產者指標合併檢視的生產者應用程式或服務。

  • ConsumerGroupName– 這用作收集消費者指標的維度。提供代表取用者執行個體群組的有意義的名稱 這與 Kafka 中的取用者群組概念不同。這只是一個分組維度,您可以在其中指定要用於解決方案儀表板中消費者指標組合檢視的消費者應用程式或服務

例如,如果您在同一帳戶中有兩個 Kafka 叢集,一個用於order-processing應用程式,另一個用於inventory-management應用程式,您應該在代理程式執行個體的代理程式組態中相應地設定 ClusterNameProcessGroupName維度。

  • 對於order-processing叢集代理程式執行個體,請設定 ClusterName=order-processingProcessGroupName=order-processing

  • 對於inventory-management叢集代理程式執行個體,請設定 ClusterName=inventory-managementProcessGroupName=inventory-management

  • 同樣地,請根據各自的應用程式ConsumerGroupName,為ProducerGroupName生產者執行個體和取用者執行個體設定 。

當您正確設定上述維度時,解決方案儀表板會根據 ClusterNameProducerGroupNameConsumerGroupName維度自動分組指標。儀表板將包含下拉式清單選項,以選取和檢視特定叢集和群組的指標,讓您分別監控個別叢集和群組的效能。

請務必將相關的代理程式組態部署到正確的 EC2 執行個體。每個組態都會儲存為 SSM 參數存放區中的個別參數,如稍後 所述步驟 2:將建議的 CloudWatch 代理程式組態檔案存放在 Systems Manager 參數存放區

下列指示說明生產者、消費者和代理程式角色部署到個別 EC2 執行個體的情況,沒有任何重疊。如果您在相同的 EC2 執行個體上執行多個 Kafka 角色,請參閱 為同一執行個體上的多個 Kafka 角色設定代理程式 以取得詳細資訊。

Kafka 代理程式代理程式的代理程式組態

在部署 Kafka 代理程式的 EC2 執行個體上使用下列 CloudWatch 代理程式組態。將 ClusterName 取代為叢集的名稱,以用於將這些指標分組以用於統一檢視。您為 ClusterName 指定的值會同時用作 ClusterName維度和 ProcessGroupName維度。將 port-number 取代為 Kafka 伺服器的 JMX 連接埠。如果使用密碼身分驗證或 SSL 啟用 JMX 以進行遠端存取,請參閱 收集 Java 管理延伸模組 (JMX) 指標 以取得有關視需要設定 TLS 或授權的資訊。

此組態中顯示的 EC2 指標 (在 JMX 區塊外部顯示的組態) 僅適用於 Linux 和 macOS 執行個體。如果您使用的是 Windows 執行個體,您可以選擇在組態中省略這些指標。如需在 Windows 執行個體上收集的指標資訊,請參閱 由 CloudWatch 代理程式在 Windows Server 執行個體上收集的指標

{ "metrics": { "namespace": "CWAgent", "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "jmx": [ { "endpoint": "localhost:port-number", "kafka": { "measurement": [ "kafka.request.time.avg", "kafka.request.failed", "kafka.request.count", "kafka.purgatory.size", "kafka.partition.under_replicated", "kafka.partition.offline", "kafka.network.io", "kafka.leader.election.rate", "kafka.isr.operation.count" ] }, "append_dimensions": { "ClusterName": "ClusterName" } }, { "endpoint": "localhost:port-number", "jvm": { "measurement": [ "jvm.classes.loaded", "jvm.gc.collections.count", "jvm.gc.collections.elapsed", "jvm.memory.heap.committed", "jvm.memory.heap.max", "jvm.memory.heap.used", "jvm.memory.nonheap.committed", "jvm.memory.nonheap.max", "jvm.memory.nonheap.used", "jvm.threads.count" ] }, "append_dimensions": { "ProcessGroupName": "ClusterName" } } ], "disk": { "measurement": [ "used_percent" ] }, "mem": { "measurement": [ "used_percent" ] }, "swap": { "measurement": [ "used_percent" ] }, "netstat": { "measurement": [ "tcp_established", "tcp_time_wait" ] } } } }

Kafka 生產者的代理程式組態

在部署 Kafka 生產者的 Amazon EC2 執行個體上使用下列 CloudWatch 代理程式組態。將 ProducerGroupName 取代為您想要用來將指標分組以進行統一檢視的應用程式或群組名稱。使用 Kafka 生產者應用程式的 JMX 連接埠取代 port-number

解決方案不會為 Kafka 生產者啟用 JVM 指標,因為解決方案儀表板不會為生產者顯示與 JVM 相關的 JVM 指標。您也可以自訂代理程式組態來發出 JVM 指標,不過,與生產者相關的 JVM 指標不會顯示在解決方案儀表板上。

{ "metrics": { "namespace": "CWAgent", "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "jmx": [ { "endpoint": "localhost:port-number", "kafka-producer": { "measurement": [ "kafka.producer.request-rate", "kafka.producer.byte-rate", "kafka.producer.request-latency-avg", "kafka.producer.response-rate", "kafka.producer.record-error-rate", "kafka.producer.record-send-rate" ] }, "append_dimensions": { "ProducerGroupName": "ProducerGroupName" } } ] } } }

Kafka 消費者的代理程式組態

在執行 Kafka 消費者的 EC2 執行個體上使用下列 CloudWatch 代理程式組態。將 ConsumerGroupName 取代為應用程式或群組的名稱,以用於針對統一檢視將這些指標分組。將 port-number 取代為 Kafka 消費者應用程式的 JMX 連接埠。

解決方案不會為 Kafka 消費者啟用 JVM 指標,因為解決方案儀表板不會為消費者顯示與 JVM 相關的 JVM 指標。您也可以自訂代理程式組態來發出 JVM 指標,但與消費者相關的 JVM 指標不會顯示在解決方案儀表板上。

{ "metrics": { "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "jmx": [ { "endpoint": "localhost:port-number", "kafka-consumer": { "measurement": [ "kafka.consumer.fetch-rate", "kafka.consumer.total.bytes-consumed-rate", "kafka.consumer.records-consumed-rate", "kafka.consumer.bytes-consumed-rate", "kafka.consumer.records-lag-max" ] }, "append_dimensions": { "ConsumerGroupName": "ConsumerGroupName" } } ] } } }

部署您解決方案的代理程式

根據使用案例,安裝 CloudWatch 代理程式有數種方法。我們建議您針對此解決方案使用 Systems Manager。它提供主控台體驗,並可讓您更輕鬆地管理單一 AWS 帳戶中的受管伺服器機群。當您沒有執行現有組態的 CloudWatch 代理程式時,本節中的指示會使用 Systems Manager 和 。您可以依照中的步驟,檢查 CloudWatch 代理程式是否正在執行確認 CloudWatch 代理程式正在執行中

如果您已在部署工作負載和管理代理程式組態的 EC2 主機上執行 CloudWatch 代理程式,您可以略過本節中的指示,並遵循現有的部署機制來更新組態。請務必根據角色 (經紀人、生產者或消費者) 將代理程式組態與您現有的代理程式組態合併,然後部署合併的組態。如果您使用 Systems Manager 來存放和管理 CloudWatch 代理程式的組態,您可以將組態合併到現有的參數值。如需詳細資訊,請參閱管理 CloudWatch 代理程式組態檔案

注意

使用 Systems Manager 部署下列 CloudWatch 代理程式組態,將取代或覆寫 EC2 執行個體上任何現有的 CloudWatch 代理程式組態。您可以修改此組態,以符合您的唯一環境或使用案例。此解決方案中定義的指標是建議儀表板所需的最低值。

部署程序包含下列步驟:

  • 步驟 1:確保目標 EC2 執行個體具有所需的 IAM 許可。

  • 步驟 2:將建議的代理程式組態檔案儲存在 Systems Manager 參數存放區中。

  • 步驟 3:使用 AWS CloudFormation 堆疊在一或多個 EC2 執行個體上安裝 CloudWatch 代理程式。

  • 步驟 4:確認代理程式設定已正確設定。

您必須根據代理程式、生產者和取用者部署在相同的 EC2 執行個體或不同的執行個體上,來重複這些步驟。例如,如果 Kafka 代理程式、生產者和消費者部署在個別執行個體上,而沒有重疊,您必須針對代理程式、生產者和消費者 EC2 執行個體,使用適當的代理程式組態重複這些步驟三次。

步驟 1:確保目標 EC2 執行個體具有所需的 IAM 許可

您必須授予 Systems Manager 安裝和設定 CloudWatch 代理程式的許可。您還必須授予 CloudWatch 代理程式從 EC2 執行個體發佈遙測到 CloudWatch 的許可。確定連接至執行個體的 IAM 角色已連接 CloudWatchAgentServerPolicyAmazonSSMManagedInstanceCore IAM 政策。

步驟 2:將建議的 CloudWatch 代理程式組態檔案存放在 Systems Manager 參數存放區

參數存放區透過安全地儲存和管理組態參數,簡化在 EC2 執行個體上安裝 CloudWatch 代理程式,無需使用硬式編碼值。這可確保更安全且靈活的部署程序,實現集中式管理,並簡化跨多個執行個體的組態更新。

使用下列步驟,將建議的 CloudWatch 代理程式組態檔案儲存為參數存放區中的參數。

建立 CloudWatch 代理程式組態檔案做為參數
  1. 在 https://https://console.aws.amazon.com/systems-manager/ 開啟 AWS Systems Manager 主控台。

  2. 從導覽窗格中,選擇應用程式管理參數存放區

  3. 請依照下列步驟,為組態建立新的參數。

    1. 選擇 Create parameter (建立參數)

    2. 提供將存放 CloudWatch 代理程式組態的 參數名稱,例如AmazonCloudWatch-Kafka-Producer-Configuration生產者、AmazonCloudWatch-Kafka-Consumer-Configuration消費者或AmazonCloudWatch-Kafka-Broker-Configuration代理程式。如果您在單一 EC2 上有多個 Kafka 角色,請據以命名角色,以便於識別。此值稍後將用於將此組態分發至 EC2 執行個體上執行的代理程式。

    3. 針對參數層,選擇標準

    4. 類型選擇字串

    5. 針對資料類型,選擇文字

    6. 方塊中,貼上 CloudWatch 代理程式組態的完整文字。請務必為此執行個體託管的 Kafka 角色選取 JSON 區塊。分別存放代理Kafka 生產者的代理程式組態程式Kafka 代理程式代理程式的代理程式組態、生產者和消費者的組態Kafka 消費者的代理程式組態時,請參閱 、 和 中提供的組態。如果您在相同的 EC2 執行個體上執行多個 Kafka 角色,請務必視需要合併組態,如相同執行個體為同一執行個體上的多個 Kafka 角色設定代理程式上的 所述

    7. 選擇 Create parameter (建立參數)

步驟 3:安裝 CloudWatch 代理程式並使用 AWS CloudFormation 範本套用組態

您可以使用 AWS CloudFormation 安裝代理程式,並將其設定為使用您在先前步驟中建立的 CloudWatch 代理程式組態。

為此解決方案安裝和設定 CloudWatch 代理程式
  1. 使用此連結開啟 AWS CloudFormation 快速建立堆疊精靈:https://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-1.0.0.json

  2. 確認主控台上選取的區域是執行 Kafka 工作負載的區域。

  3. 針對堆疊名稱,輸入名稱來識別此堆疊,例如 CWAgentInstallationStack

  4. 參數區段中,指定下列項目:

    1. 對於 CloudWatchAgentConfigSSM,輸入您先前建立的代理程式組態的 Systems Manager 參數名稱,例如AmazonCloudWatch-Kafka-Broker-Configuration代理程式、AmazonCloudWatch-Kafka-Producer-Configuration生產者和AmazonCloudWatch-Kafka-Consumer-Configuration消費者。

    2. 若要選取目標執行個體,您有兩個選項。

      1. 針對 InstanceIds,指定以逗號分隔的執行個體 IDs 清單,列出您要使用此組態安裝 CloudWatch 代理程式IDs。您可以列出單一執行個體或數個執行個體。

      2. 如果您要大規模部署,您可以指定 TagKey 和對應的 TagValue,以使用此標籤和值鎖定所有 EC2 執行個體。如果您指定 TagKey,則必須指定對應的 TagValue。(對於 Auto Scaling 群組,aws:autoscaling:groupName請為 TagKey 指定 ,並為要部署到 Auto Scaling 群組內所有執行個體的 TagValue 指定 Auto Scaling 群組名稱。)

        如果您同時指定 InstanceIdsTagKeys 參數,則會優先使用 InstanceIds,並忽略標籤。

  5. 檢閱設定,然後選擇建立堆疊

如果您想要先編輯範本檔案以進行自訂,請選擇建立堆疊精靈下的上傳範本檔案選項,以上傳編輯的範本。如需詳細資訊,請參閱在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-1.0.0.json

注意

此步驟完成後,此 Systems Manager 參數將與目標執行個體中執行的 CloudWatch 代理程式相關聯。這表示:

  1. 如果刪除 Systems Manager 參數,代理程式將停止。

  2. 如果已編輯 Systems Manager 參數,組態變更會自動套用到代理程式,排程頻率預設為 30 天。

  3. 如果您想要立即套用變更至此 Systems Manager 參數,您必須再次執行此步驟。如需關聯的詳細資訊,請參閱在 Systems Manager 中使用關聯

步驟 4:確認代理程式設定已正確設定

您可以依照中的步驟來驗證是否已安裝 CloudWatch 代理程式確認 CloudWatch 代理程式正在執行中。如果 CloudWatch 代理程式未安裝並執行,請確定您已正確設定所有項目。

如果一切設定正確,您應該會看到 Kafka 指標發佈到 CloudWatch。您可以檢查 CloudWatch 主控台來驗證它們是否正在發佈。

驗證 Kafka 指標是否已發佈至 CloudWatch
  1. 透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

  2. 選擇指標所有指標

  3. 請確定您已選取部署解決方案的區域,然後選擇自訂命名空間 CWAgent

  4. 搜尋本文件客服人員組態區段中提到的指標,例如kafka.partition.offline代理程式、kafka.consumer.fetch.rate消費者或kafka.producer.request-rate生產者。如果您看到這些指標的結果,則指標會發佈至 CloudWatch。

建立 Kafka 解決方案儀表板

此儀表板會顯示 Kafka 和基礎 JVM 新發出的指標。此儀表板為生產者、代理程式和消費者提供 Kafka 工作負載運作狀態的最佳參與者檢視。最高參與者檢視會顯示每個指標的前 10 個小工具。這可讓您一目了然地識別極端值。

解決方案儀表板不會顯示 EC2 指標。若要檢視 EC2 指標,您需要使用 EC2 自動儀表板來查看 EC2 結束的指標,並使用 EC2 主控台儀表板來查看 CloudWatch 代理程式收集的 EC2 指標。如需 AWS 服務自動儀表板的詳細資訊,請參閱 檢視單一服務的 CloudWatch 儀表板 AWS

若要建立儀表板,您可以使用下列選項:

  • 使用 CloudWatch 主控台建立儀表板。

  • 使用 AWS CloudFormation 主控台部署儀表板。

  • 下載 AWS CloudFormation 基礎設施做為程式碼,並將其整合為持續整合 (CI) 自動化的一部分。

透過使用 CloudWatch 主控台建立儀表板,您可以在實際建立和收費之前預覽儀表板。

注意

在此解決方案 AWS CloudFormation 中使用 建立的儀表板會顯示部署解決方案的區域指標。請務必在發佈 JVM 和 Kafka 指標的區域中建立 AWS CloudFormation 堆疊。

如果您已在 CloudWatch 代理程式組態CWAgent中指定 以外的自訂命名空間,則必須變更儀表板的 AWS CloudFormation 範本,以CWAgent將 取代為您正在使用的自訂命名空間。

透過 CloudWatch Console 建立儀表板
注意

解決方案儀表板目前僅顯示 G1 垃圾收集器的垃圾收集相關指標,這是最新 Java 版本的預設收集器。如果您使用的是不同的垃圾回收演算法,則與垃圾回收相關的小工具是空的。不過,您可以透過變更儀表板 CloudFormation 範本,並將適當的廢棄項目集合類型套用至廢棄項目集合相關指標的名稱維度,來自訂這些小工具。例如,如果您使用的是平行垃圾回收,請將垃圾回收計數指標 name=\"G1 Young Generation\"name=\"Parallel GC\"的 變更為 jvm.gc.collections.count

  1. 使用此連結開啟 CloudWatch 主控台建立儀表板https://https://console.aws.amazon.com/cloudwatch/home?#dashboards?dashboardTemplate=ApacheKafkaOnEc2&referrer=os-catalog。

  2. 確認主控台上選取的區域是執行 Kafka 工作負載的區域。

  3. 輸入儀表板的名稱,然後選擇建立儀表板

    為了輕鬆區分此儀表板與其他區域中類似的儀表板,建議您在儀表板名稱中包含區域名稱,例如 KafkaDashboard-us-east-1

  4. 預覽儀表板,然後選擇儲存以建立儀表板。

透過 建立儀表板 AWS CloudFormation
  1. 使用此連結開啟 AWS CloudFormation 快速建立堆疊精靈:https://https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/Kafka_EC2/CloudWatch/CFN/v1.0.0/dashboard-template-1.0.0.json

  2. 確認主控台上選取的區域是執行 Kafka 工作負載的區域。

  3. 針對堆疊名稱,輸入名稱來識別此堆疊,例如 KafkaDashboardStack

  4. 參數區段中,指定 DashboardName 參數下的儀表板名稱。

    為了輕鬆區分此儀表板與其他區域中類似的儀表板,建議您在儀表板名稱中包含區域名稱,例如 KafkaDashboard-us-east-1

  5. 在功能和轉換下確認轉換的存取功能。請注意,CloudFormation 不會新增任何 IAM 資源。

  6. 檢閱設定,然後選擇建立堆疊

  7. 在堆疊狀態為 CREATE_COMPLETE 之後,請選擇建立的堆疊下方的資源索引標籤,然後選擇實體 ID 下方的連結以前往儀表板。您也可以在 CloudWatch 主控台中存取儀表板,方法是選擇主控台左側導覽窗格中的儀表板,然後在自訂儀表板下尋找儀表板名稱。

如果您想要編輯範本檔案以針對任何用途進行自訂,您可以使用建立堆疊精靈下的上傳範本檔案選項來上傳編輯的範本。如需詳細資訊,請參閱在AWS CloudFormation 主控台上建立堆疊。您可以使用此連結來下載範本:https://https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/Kafka_EC2/CloudWatch/CFN/v1.0.0/dashboard-template-1.0.0.json

注意

解決方案儀表板目前僅顯示 G1 垃圾收集器的垃圾收集相關指標,這是最新 Java 版本的預設收集器。如果您使用的是不同的垃圾回收演算法,則與垃圾回收相關的小工具是空的。不過,您可以透過變更儀表板 CloudFormation 範本,並將適當的廢棄項目集合類型套用至廢棄項目集合相關指標的名稱維度,來自訂這些小工具。例如,如果您使用的是平行垃圾回收,請將垃圾回收計數指標 name=\"G1 Young Generation\"name=\"Parallel GC\"的 變更為 jvm.gc.collections.count

開始使用 Kafka 儀表板

以下是您可以使用新的 Kafka 儀表板來嘗試的一些任務。這些任務可讓您驗證儀表板是否正常運作,並提供您使用它來監控 Kafka 叢集的實作體驗。嘗試這些方法時,您將熟悉導覽儀表板和解譯視覺化指標。

使用下拉式清單

儀表板會在頂端提供下拉式清單,可用來篩選和選取您要監控的特定 Kafka 叢集、生產者和取用者群組。

  • 若要顯示特定 Kafka 叢集的指標,請在 Kafka 叢集下拉式清單中選取該叢集名稱。

  • 若要顯示特定 Kafka 生產者群組的指標,請在 Kafka 生產者下拉式清單中選取該生產者群組名稱。

  • 若要顯示特定 Kafka 取用者群組的指標,請在 Kafka 取用者群組下拉式清單中選取該取用者群組名稱。

驗證叢集運作狀態

叢集概觀區段中,尋找複寫和同步中複本小工具下的分割區理想情況下,這些值應為零或小數字。任何這些指標的較大值都可能表示 Kafka 叢集需要調查的問題。

調查中介裝置效能

中介裝置區段中,尋找失敗的擷取請求失敗的生產者請求小工具。這些分別顯示擷取和產生操作的失敗請求數量。高故障率可能表示需要進一步調查的代理程式或網路連線問題。

監控生產者效能

生產者群組概觀區段中,尋找平均請求率平均請求延遲平均記錄傳送/錯誤率小工具。這些將為您提供所選群組中生產者如何執行的概觀。您也可以深入查看生產者區段中特定生產者和主題的指標。

監控消費者延遲

消費者群組概觀區段中,尋找消費者延遲小工具。這會顯示消費者在處理所訂閱分割區中最新位移的訊息時落後多長時間。理想情況下,消費者延遲應該是低或零。高消費者延遲可能表示消費者無法跟上資料生產的速度,導致潛在的資料遺失或處理延遲。您也可以深入查看消費者區段中特定消費者和主題的指標。

為同一執行個體上的多個 Kafka 角色設定代理程式

中列出的 Kafka 角色個別組態此解決方案的 CloudWatch 代理程式組態僅適用於在個別 EC2 執行個體上部署生產者、消費者和代理程式角色時,不會有任何重疊。如果您在相同的 Amazon EC2 執行個體上執行多個 Kafka 角色,您有兩個選項:

  • 建立單一代理程式組態檔案,列出並設定在該執行個體上部署之所有 Kafka 角色的所有指標。如果您要使用 Systems Manager 來管理代理程式組態,這是偏好的選項。

    如果您選擇此選項,且多個 Kafka 角色屬於相同的 JVM 程序,則必須為代理程式組態中的每個 Kafka 角色指定相同的端點。如果多個 Kafka 角色是不同 JVM 程序的一部分,則每個角色的端點可能會有所不同,取決於該程序設定的 JMX 連接埠。

  • 為每個 Kafka 角色建立單獨的代理程式組態檔案,並設定代理程式以套用這兩個組態檔案。如需套用多個組態檔案的說明,請參閱 建立多個 CloudWatch 代理程式組態檔案

下列範例顯示 CloudWatch 代理程式組態,其中生產者和取用者角色在同一個 JVM 程序的執行個體上執行。在此情況下,在以下組態的生產者和取用者部分中,連接埠號碼必須相同。如果這兩個角色是做為不同 JVM 程序的一部分執行,您可以根據每個個別 JVM 程序的 JMX 連接埠,為每個角色指定不同的連接埠號碼。

{ "metrics": { "namespace": "CWAgent", "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "jmx": [ { "endpoint": "localhost:port-number", "kafka-producer": { "measurement": [ "kafka.producer.request-rate", "kafka.producer.byte-rate", "kafka.producer.request-latency-avg", "kafka.producer.response-rate", "kafka.producer.record-error-rate", "kafka.producer.record-send-rate" ] }, "append_dimensions": { "ProducerGroupName": "ProducerGroupName" } }, { "endpoint": "localhost:port-number", "kafka-consumer": { "measurement": [ "kafka.consumer.fetch-rate", "kafka.consumer.total.bytes-consumed-rate", "kafka.consumer.records-consumed-rate", "kafka.consumer.bytes-consumed-rate", "kafka.consumer.records-lag-max" ] }, "append_dimensions": { "ConsumerGroupName": "ConsumerGroupName" } } ] } } }