收集 Java 管理延伸模組 (JMX) 指標 - Amazon CloudWatch

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

收集 Java 管理延伸模組 (JMX) 指標

您可以使用 CloudWatch 代理程式,從您的 Java 應用程式收集 Java 管理延伸 (JMX) 指標。

CloudWatch 代理程式支援從下列版本收集這些指標:

  • JVM 8 和更新版本

  • Kafka 0.8.2.x 及更新版本

  • Tomcat 9、10.1 和 11 (測試版)

Amazon EC2
在 JVM 執行個體中啟用 JMX

若要讓 CloudWatch 代理程式能夠收集 JMX 指標,應用程式的 JVM 必須使用com.sun.management.jmxremote.port系統屬性繫結至連接埠。

java -Dcom.sun.management.jmxremote.port=port-number -jar example.jar

如需詳細資訊和其他組態,請參閱 JMX 文件

Amazon EKS
在 Java 應用程式 Pod 上啟用 JMX

使用 CloudWatch 可觀測性 EKS 附加元件時,您可以管理如何使用註釋啟用 JMX 指標。如需詳細資訊,請參閱使用 Amazon CloudWatch 可觀測性 EKS 附加元件或 Helm Chart 安裝 CloudWatch 代理程式 Amazon CloudWatch 。若要從工作負載啟用 JMX 指標集合,請在 PodTemplate區段下將下列註釋新增至工作負載資訊清單檔案:

  • instrumentation.opentelemetry.io/inject-java: "true"

  • 下列一或多個項目:

    • 對於 JVM 指標: cloudwatch.aws.amazon.com/inject-jmx-jvm: "true"

    • 對於 Kafka 代理程式指標: cloudwatch.aws.amazon.com/inject-jmx-kafka: "true"

    • 對於 Kafka 消費者指標: cloudwatch.aws.amazon.com/inject-jmx-kafka-consumer: "true"

    • 對於 Kafka 生產者指標: cloudwatch.aws.amazon.com/inject-jmx-kafka-producer: "true"

    • 對於 Tomcat 指標: cloudwatch.aws.amazon.com/inject-jmx-tomcat: "true"

若要開始收集 JMX 指標,請在 CloudWatch 代理程式組態檔案的 jmx metrics_collected區段內新增區段。jmx 區段可以包含下列欄位。

  • jvm - 選用。指定您要從執行個體擷取 Java 虛擬機器 (JVM) 指標。如需詳細資訊,請參閱收集 JVM 指標

    此區段可以包含下列欄位:

    • measurement – 指定要收集的 JVM 指標陣列。如需此處要使用之可能值的清單,請參閱 收集 JVM 指標 的資料表中的 Metric (指標) 資料欄。

      在每個指標的項目中,您可以選擇性指定以下一個或兩個項目:

      • rename – 為此指標指定不同的名稱。

      • unit – 指定此指標使用的單位,覆寫此指標的預設單位。您指定的單位必須是有效的 CloudWatch 指標單位,如 MetricDatumUnit 說明所列示。

  • kafka – 選用。指定您要從執行個體擷取 Apache Kafka 代理程式指標。如需詳細資訊,請參閱收集 Kafka 指標

    此區段可以包含下列欄位:

    • measurement – 指定要收集的 Kafka 代理程式指標陣列。如需此處可能值的清單,請參閱 中第一個資料表中的指標收集 Kafka 指標

      在每個指標的項目中,您可以選擇性指定以下一個或兩個項目:

      • rename – 為此指標指定不同的名稱。

      • unit – 指定此指標使用的單位,覆寫此指標的預設單位。您指定的單位必須是有效的 CloudWatch 指標單位,如 MetricDatumUnit 說明所列示。

  • kafka-consumer – 選用。指定您要從執行個體擷取 Apache Kafka 取用者指標。如需詳細資訊,請參閱收集 Kafka 指標

    此區段可以包含下列欄位:

    • measurement – 指定要收集的 Kafka 代理程式指標陣列。如需此處可能使用的值清單,請參閱 中第二個指標表格中的指標收集 Kafka 指標

      在每個指標的項目中,您可以選擇性指定以下一個或兩個項目:

      • rename – 為此指標指定不同的名稱。

      • unit – 指定此指標使用的單位,覆寫此指標的預設單位。您指定的單位必須是有效的 CloudWatch 指標單位,如 MetricDatumUnit 說明所列示。

  • kafka-producer – 選用。指定您要從執行個體擷取 Apache Kafka 生產者指標。如需詳細資訊,請參閱收集 Kafka 指標

    此區段可以包含下列欄位:

    • measurement – 指定要收集的 Kafka 代理程式指標陣列。如需此處可能使用的值清單,請參閱 中第三個指標表格中的指標收集 Kafka 指標

      在每個指標的項目中,您可以選擇性指定以下一個或兩個項目:

      • rename – 為此指標指定不同的名稱。

      • unit – 指定此指標使用的單位,覆寫此指標的預設單位。您指定的單位必須是有效的 CloudWatch 指標單位,如 MetricDatumUnit 說明所列示。

  • tomcat – 選用。指定您要從執行個體擷取 Tomcat 指標。如需詳細資訊,請參閱收集 Tomcat 指標

    此區段可以包含下列欄位:

    • measurement – 指定要收集的 Tomcat 指標陣列。如需此處要使用之可能值的清單,請參閱 收集 Tomcat 指標 的資料表中的 Metric (指標) 資料欄。

      在每個指標的項目中,您可以選擇性指定以下一個或兩個項目:

      • rename – 為此指標指定不同的名稱。

      • unit – 指定此指標使用的單位,覆寫此指標的預設單位。您指定的單位必須是有效的 CloudWatch 指標單位,如 MetricDatumUnit 說明所列示。

jmx 區段也可以包含選用append_dimensions欄位:

  • append_dimensions - 選用。其他僅用於程序指標的維度。如果您指定此欄位,則除了使用 append_dimensions 欄位中指定的維度 (用於代理程式收集的所有類型指標) 之外,也會使用您在此欄位指定的內容。

下列欄位僅適用於 Amazon EC2。
  • endpoint – 要連線的 JMX 用戶端地址。格式是 ip:port。如果端點不是 localhost,則必須啟用密碼身分驗證和 SSL。

  • metrics_collection_interval - 選用。指定收集程序指標的頻率,以覆寫組態檔案中 agent 區段指定的全域 metrics_collection_interval

    此值是以秒數指定。例如,指定每隔 10 秒收集 10 個原因指標,也就是將其設定為每 5 分鐘收集 300 個指定指標。

    如果您將此值設為低於 60 秒,每個指標都將以高解析度指標進行收集。如需詳細資訊,請參閱高解析度指標

如果使用密碼身分驗證或 SSL 啟用 JMX 以進行遠端存取,您可以使用下列欄位。

  • password_file - 選用。指定密碼金鑰的 Java 屬性檔案。檔案必須是唯讀的,且僅限於執行 CloudWatch 代理程式的使用者。如果啟用密碼身分驗證,這需要與 com.sun.management.jmxremote.password.file 屬性中提供的 JMX 密碼檔案中的項目相同的使用者名稱和密碼對。如果啟用 SSL,則需要 keystore和 的項目,truststorejavax.net.ssl.trustStorePassword分別對應至 javax.net.ssl.keyStorePassword和 。

  • username – 如果啟用密碼身分驗證,請指定符合所提供密碼檔案中使用者名稱的使用者名稱。

  • keystore_path – 如果啟用 SSL,請指定 Java 金鑰存放區的完整路徑,其中包含私有金鑰和公有金鑰的憑證。對應至 javax.net.ssl.keyStore 屬性。

  • keystore_type – 如果啟用 SSL,請指定要使用的金鑰存放區的類型。對應至 javax.net.ssl.keyStoreType 屬性。

  • truststore_path – 如果已啟用 SSL,請指定 Java 信任存放區的完整路徑,其中必須包含遠端 JMX 伺服器的公有憑證。對應至 javax.net.ssl.trustStore 屬性。

  • truststore_type – 如果啟用 SSL,請指定要使用的信任存放區的類型。對應至 javax.net.ssl.trustStoreType 屬性。

  • remote_profile - 選用。支援的 JMX 遠端設定檔是 TLS 搭配 SASL 設定檔:SASL/DIGEST-MD5SASL/PLAINSASL/CRAM-MD5。應為下列其中一項:SASL/PLAINSASL/DIGEST-MD5TLS SASL/DIGEST-MD5、、 SASL/CRAM-MD5 TLS SASL/PLAINTLS SASL/CRAM-MD5

  • realm - 選用。遠端設定檔 所需的領域SASL/DIGEST-MD5

  • registry_ssl_enabled – 如果已啟用 RMI 登錄驗證。如果 JVM 設定為 ,則設為 truecom.sun.management.jmxremote.registry.ssl=true

  • insecure 設定為 true,以在代理程式設定為非localhost 端點時選擇退出所需的驗證。

以下是 CloudWatch 代理程式組態檔案的 jmx區段範例。

{ "metrics": { "metrics_collected": { "jmx": [ { "endpoint": "remotehost:1314", "jvm": { "measurement": [ "jvm.memory.heap.init", "jvm.memory.nonheap.used" ] }, "kafka": { "measurement": [ "kafka.request.count", { "name": "kafka.message.count", "rename": "KAFKA_MESSAGE_COUNT", "unit": "Count" } ] }, "username": "cwagent", "keystore_path": "/path/to/keystore", "keystore_type": "PKCS12", "truststore_path": "/path/to/truststore", "truststore_type": "PKCS12" }, { "endpoint": "localhost:1315", "kafka-producer": { "measurement": [ "kafka.producer.request-rate" ] }, "append_dimensions": { "service.name": "kafka/1" } } ] } } }

收集 JVM 指標

您可以使用 CloudWatch 代理程式來收集 Java 虛擬機器 (JVM) 指標。若要設定此項目,請在 CloudWatch 代理程式組態檔案的 jmx 區段中新增 jvm 區段。

可以收集以下指標。

指標 維度 描述

jvm.classes.loaded

【預設】

已載入類別的總數。

單位:

有意義的統計資料:最小值、最大值、平均值

jvm.gc.collections.count

【預設】、 name

已發生的垃圾回收總數。

單位:

有意義的統計資料:最小值、最大值、平均值

jvm.gc.collections.elapsed

【預設】、 name

大約累積的垃圾回收經過時間。

單位:毫秒

有意義的統計資料:最小值、最大值、平均值

jvm.memory.heap.init

【預設】

JVM 從作業系統請求用於堆積的初始記憶體量。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.memory.heap.max

【預設】

可用於堆積的記憶體數量上限。

單位:位元組

有意義的統計資料:上限

jvm.memory.heap.used

【預設】

目前的堆積記憶體用量。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.memory.heap.committed

【預設】

保證可用於堆積的記憶體數量。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.memory.nonheap.init

【預設】

JVM 從作業系統請求的初始記憶體量,用於非堆積用途。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.memory.nonheap.max

【預設】

可用於非堆積用途的記憶體數量上限。

單位:位元組

有意義的統計資料:最大值

jvm.memory.nonheap.used

【預設】

目前非堆積記憶體用量。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.memory.nonheap.committed

【預設】

保證可用於非堆積用途的記憶體數量。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.memory.pool.init

【預設】、 name

JVM 從作業系統請求記憶體集區的初始記憶體數量。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.memory.pool.max

【預設】、 name

可用於記憶體集區的記憶體數量上限。

單位:位元組

有意義的統計資料:上限

jvm.memory.pool.used

【預設】、 name

目前的記憶體集區記憶體用量。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.memory.pool.committed

【預設】、 name

保證可用於記憶體集區的記憶體數量。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

jvm.threads.count

【預設】

目前的執行緒數目。

單位:

有意義的統計資料:最小值、最大值、平均值

JVM 指標的收集維度如下:

維度 描述

【預設】

在 Amazon EC2 上,除非您使用 metrics區段中的 append_dimensions 欄位,否則主機也會發佈為 CloudWatch 代理程式收集的指標維度。如需手動建立或編輯 CloudWatch 代理程式組態檔案詳細資訊,請參閱 客服人員一節omit_hostname中的 。

根據預設,在 Amazon EKS 上,k8s 相關內容也會發佈為指標維度 k8s.namespace.name(k8s.container.namek8s.deployment.namek8s.pod.name、、 k8s.node.namek8s.replicaset.name)。您可以使用 aggregation_dimensions 欄位篩選這些項目。

name

對於 jvm.gc.collections 指標,值為垃圾收集器名稱。

對於jvm.memory.pool指標,值為記憶體集區名稱。

收集 Kafka 指標

您可以使用 CloudWatch 代理程式來收集 Apache Kafka 指標。若要設定此項,請在 CloudWatch 代理程式組態檔案的 jmx區段內新增下列一或多個子區段。

  • 使用 kafka區段來收集 Kafka 代理程式指標。

  • 使用kafka-consumer區段來收集 Kafka 消費者指標。

  • 使用 kafka-producer區段來收集 Kafka 生產者指標。

Kafka 代理程式指標

可針對 Kafka 代理程式收集下列指標。

指標 維度 描述

kafka.message.count

【預設】

Kafka 代理程式接收的訊息數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.request.count

【預設】、 type

Kafka 代理程式收到的請求數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.request.failed

【預設】、 type

導致失敗的 Kafka 代理程式請求數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.request.time.total

【預設】、 type

Kafka 代理程式為服務請求所花費的總時間。

單位:毫秒

有意義的統計資料:最小值、最大值、平均值

kafka.request.time.50p

【預設】、 type

Kafka 代理程式為服務請求所花費的第 50 個百分位數。

單位:毫秒

有意義的統計資料:最小值、最大值、平均值

kafka.request.time.99p

【預設】、 type

Kafka 代理程式為服務請求所花費的第 99 個百分位數時間。

單位:毫秒

有意義的統計資料:最小值、最大值、平均值

kafka.request.time.avg

【預設】、 type

Kafka 代理程式為服務請求所花費的平均時間。

單位:毫秒

有意義的統計資料:平均

kafka.network.io

【預設】、 state

Kafka 代理程式接收或傳送的位元組數。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

kafka.purgatory.size

【預設】、 type

等待中的請求數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.partition.count

【預設】

Kafka 代理程式上的分割區數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.partition.offline

【預設】

離線的分割區數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.partition.under_replicated

【預設】

複寫不足的分割區數目。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.isr.operation.count

【預設】、 operation

同步內複本的數量會縮減並展開操作。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.max.lag

【預設】

跟隨者和領導者複本之間訊息的最大延遲。

單位:

有意義的統計資料:最大值

kafka.controller.active.count

【預設】

代理程式上的作用中控制器數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.leader.election.rate

【預設】

領導者選擇率。如果增加,則表示代理程式失敗。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.unclean.election.rate

【預設】

不乾淨的領導者選擇率。如果增加,則表示代理程式失敗。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.request.queue

【預設】

請求佇列的大小。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.logs.flush.time.count

【預設】

日誌排清計數。

單位:毫秒

有意義的統計資料:最小值、最大值、平均值

kafka.logs.flush.time.median

【預設】

日誌排清計數的第 50 個百分位數。

單位:毫秒

有意義的統計資料:最小值、最大值、平均值

kafka.logs.flush.time.99p

【預設】

日誌排清計數的第 99 個百分位數。

單位:毫秒

有意義的統計資料:最小值、最大值、平均值

Kafka 代理程式指標的收集維度如下:

維度 描述

【預設】

在 Amazon EC2 上,除非您使用 metrics區段中的 append_dimensions 欄位,否則主機也會發佈為 CloudWatch 代理程式收集的指標維度。如需手動建立或編輯 CloudWatch 代理程式組態檔案詳細資訊,請參閱 客服人員一節omit_hostname中的 。

根據預設,在 Amazon EKS 上,k8s 相關內容也會發佈為指標維度 k8s.namespace.name(k8s.container.namek8s.deployment.namek8s.pod.name、、 k8s.node.namek8s.replicaset.name)。您可以使用 aggregation_dimensions 欄位篩選這些項目。

type

請求類型。可能值為 producefetchfetchconsumerfetchfollower

state

網路流量的方向。可能值為 inout

operation

同步內複本的操作類型。可能值為 shrinkexpand

Kafka 消費者指標

可以為 Kafka 消費者收集下列指標。

指標 維度 描述

kafka.consumer.fetch-rate

【預設】、 client-id

每秒所有主題的擷取請求數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.consumer.records-lag-max

【預設】、 client-id

消費者落後於生產者的訊息數量。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.consumer.total.bytes-consumed-rate

【預設】、 client-id

每秒所有主題耗用的平均位元組數。

單位:位元組

有意義的統計資料:平均

kafka.consumer.total.fetch-size-avg

【預設】、 client-id

針對所有主題,每個請求擷取的位元組數。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

kafka.consumer.total.records-consumed-rate

【預設】、 client-id

每秒所有主題使用的平均記錄數。

單位:

有意義的統計資料:平均

kafka.consumer.bytes-consumed-rate

【預設】、client-idtopic

每秒耗用的平均位元組數。

單位:位元組

有意義的統計資料:平均

kafka.consumer.fetch-size-avg

【預設】、client-idtopic

每個請求擷取的位元組數。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

kafka.consumer.records-consumed-rate

【預設】、client-idtopic

每秒耗用的平均記錄數。

單位:

有意義的統計資料:平均

Kafka 消費者指標的收集維度如下:

維度 描述

【預設】

在 Amazon EC2 上,除非您使用 metrics區段中的 append_dimensions 欄位,否則主機也會發佈為 CloudWatch 代理程式收集的指標維度。如需手動建立或編輯 CloudWatch 代理程式組態檔案詳細資訊,請參閱 客服人員一節omit_hostname中的 。

根據預設,在 Amazon EKS 上,k8s 相關內容也會發佈為指標維度 k8s.namespace.name(k8s.container.namek8s.deployment.namek8s.pod.name、、 k8s.node.namek8s.replicaset.name)。您可以使用 aggregation_dimensions 欄位篩選這些項目。

client-id

用戶端的 ID。

topic

Kafka 主題。

Kafka 生產者指標

可以為 Kafka 生產者收集下列指標。

指標 維度 描述

kafka.producer.io-wait-time-ns-avg

【預設】、 client-id

I/O 執行緒等待準備好讀取或寫入的通訊端所花費的平均時間長度。

單位:

有意義的統計資料:平均

kafka.producer.outgoing-byte-rate

【預設】、 client-id

每秒傳送至所有伺服器的平均傳出位元組數。

單位:位元組

有意義的統計資料:平均

kafka.producer.request-latency-avg

【預設】、 client-id

平均請求延遲。

單位:毫秒

有意義的統計資料:平均

kafka.producer.request-rate

【預設】、 client-id

每秒傳送的平均請求數。

單位:

有意義的統計資料:平均

kafka.producer.response-rate

【預設】、 client-id

每秒收到的回應數。

單位:

有意義的統計資料:最小值、最大值、平均值

kafka.producer.byte-rate

【預設】、client-idtopic

主題每秒傳送的平均位元組數。

單位:位元組

有意義的統計資料:平均

kafka.producer.compression-rate

【預設】、client-idtopic

主題之記錄批次的平均壓縮率。

單位:

有意義的統計資料:平均

kafka.producer.record-error-rate

【預設】、client-idtopic

造成主題錯誤的每秒平均記錄傳送次數。

單位:

有意義的統計資料:平均

kafka.producer.record-retry-rate

【預設】、client-idtopic

為主題傳送的平均每秒重試記錄數。

單位:

有意義的統計資料:平均

kafka.producer.record-send-rate

【預設】、client-idtopic

主題每秒傳送的平均記錄數。

單位:

有意義的統計資料:平均

Kafka 生產者指標的收集維度如下:

維度 描述

【預設】

在 Amazon EC2 上,除非您使用 metrics區段中的 append_dimensions 欄位,否則主機也會發佈為 CloudWatch 代理程式收集的指標維度。如需手動建立或編輯 CloudWatch 代理程式組態檔案詳細資訊,請參閱 客服人員一節omit_hostname中的 。

根據預設,在 Amazon EKS 上,k8s 相關內容也會發佈為指標維度 k8s.namespace.name(k8s.container.namek8s.deployment.namek8s.pod.name、、 k8s.node.namek8s.replicaset.name)。您可以使用 aggregation_dimensions 欄位篩選這些項目。

client-id

用戶端的 ID。

topic

Kafka 主題。

收集 Tomcat 指標

您可以使用 CloudWatch 代理程式來收集 Apache Tomcat 指標。若要設定此項目,請在 CloudWatch 代理程式組態檔案的 metrics_collected 區段中新增 tomcat 區段。

可以收集以下指標。

指標 維度 描述

tomcat.sessions

【預設】

作用中工作階段的數量。

單位:

有意義的統計資料:最小值、最大值、平均值

tomcat.errors

【預設】、 proto_handler

遇到的錯誤數目。

單位:

有意義的統計資料:最小值、最大值、平均值

tomcat.processing_time

【預設】、 proto_handler

總處理時間。

單位:毫秒

有意義的統計資料:最小值、最大值、平均值

tomcat.traffic

【預設】、 proto_handler

接收和傳送的位元組數。

單位:位元組

有意義的統計資料:最小值、最大值、平均值

tomcat.threads

【預設】、 proto_handler

執行緒的數量。

單位:

有意義的統計資料:最小值、最大值、平均值

tomcat.max_time

【預設】、proto_handlerdirection

處理請求的時間上限。

單位:毫秒

有意義的統計資料:最大值

tomcat.request_count

【預設】、 proto_handler

請求總數。

單位:

有意義的統計資料:最小值、最大值、平均值

Tomcat 指標的收集維度如下:

維度 描述

【預設】

在 Amazon EC2 上,除非您使用 metrics區段中的 append_dimensions 欄位,否則主機也會發佈為 CloudWatch 代理程式收集的指標維度。如需手動建立或編輯 CloudWatch 代理程式組態檔案詳細資訊,請參閱 客服人員一節omit_hostname中的 。

根據預設,在 Amazon EKS 上,k8s 相關內容也會發佈為指標維度 k8s.namespace.name(k8s.container.namek8s.deployment.namek8s.pod.namek8s.node.name、 和 k8s.replicaset.name)。您可以使用 aggregation_dimensions 欄位篩選這些項目。

proto_handler

proto_handler 是連接器的識別符,以 <protocol>-<type>-<port> 格式提供 (例如 http-nio-8080)。

direction

流量方向。可能值為 receivedsent