收集 Java Management Extensions (JMX) 指標 - Amazon CloudWatch

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

收集 Java Management Extensions (JMX) 指標

可以使用 CloudWatch 代理程式從您的 Java 應用程式收集 Java Management Extensions (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 Observability 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 代理程式設定檔的 metrics_collected 區段新增 jmx 區段。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 秒,每個指標都將以高解析度指標進行收集。如需詳細資訊,請參閱高解析度指標

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

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

  • 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/PLAINSASL/DIGEST-MD5SASL/CRAM-MD5。應為下列其中一項:SASL/PLAINSASL/DIGEST-MD5SASL/CRAM-MD5TLS SASL/PLAINTLS SASL/DIGEST-MD5TLS SASL/CRAM-MD5

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

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

  • insecure 若針對非 localhost 端點設定代理程式,將此選項設為 true 將跳過要求的驗證。

以下是 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 區段。

可以收集以下指標。

指標 維度 Description

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 指標包含以下維度:

維度 Description

[預設]

根據預設,在 Amazon EC2 上,主機名稱也會發布為 CloudWatch 代理程式收集的指標維度,除非您使用 metrics 區段中的 append_dimensions 欄位。如果需要更多相關資訊,請參閱 手動建立或編輯 CloudWatch 代理程式組態檔案 代理程式區段中的 omit_hostname

根據預設,在 Amazon EKS 上,k8s 相關內容也會發布為指標維度 (k8s.container.namek8s.deployment.namek8s.namespace.namek8s.node.namek8s.pod.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 中介者的以下指標。

指標 維度 Description

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 中介者指標包含以下維度:

維度 Description

[預設]

根據預設,在 Amazon EC2 上,主機名稱也會發布為 CloudWatch 代理程式收集的指標維度,除非您使用 metrics 區段中的 append_dimensions 欄位。如果需要更多相關資訊,請參閱 手動建立或編輯 CloudWatch 代理程式組態檔案 代理程式區段中的 omit_hostname

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

type

請求類型。可能值為 producefetchfetchconsumerfetchfollower

state

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

operation

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

Kafka 消費者指標

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

指標 維度 Description

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 消費者指標包含以下維度:

維度 Description

[預設]

根據預設,在 Amazon EC2 上,主機名稱也會發布為 CloudWatch 代理程式收集的指標維度,除非您使用 metrics 區段中的 append_dimensions 欄位。如果需要更多相關資訊,請參閱 手動建立或編輯 CloudWatch 代理程式組態檔案 代理程式區段中的 omit_hostname

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

client-id

用戶端的 ID。

topic

Kafka 主題。

Kafka 生產者指標

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

指標 維度 Description

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 生產者指標包含以下維度:

維度 Description

[預設]

根據預設,在 Amazon EC2 上,主機名稱也會發布為 CloudWatch 代理程式收集的指標維度,除非您使用 metrics 區段中的 append_dimensions 欄位。如果需要更多相關資訊,請參閱 手動建立或編輯 CloudWatch 代理程式組態檔案 代理程式區段中的 omit_hostname

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

client-id

用戶端的 ID。

topic

Kafka 主題。

收集 Tomcat 指標

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

可以收集以下指標。

指標 維度 Description

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 指標包含以下維度:

維度 Description

[預設]

根據預設,在 Amazon EC2 上,主機名稱也會發布為 CloudWatch 代理程式收集的指標維度,除非您使用 metrics 區段中的 append_dimensions 欄位。如果需要更多相關資訊,請參閱 手動建立或編輯 CloudWatch 代理程式組態檔案 代理程式區段中的 omit_hostname

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

proto_handler

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

direction

流量方向。可能值為 receivedsent