选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

收集 Java 管理扩展(JMX)指标

聚焦模式
收集 Java 管理扩展(JMX)指标 - Amazon CloudWatch

可以使用 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 Observability EKS 附加组件或 Helm 图表安装 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"

在 JVM 实例中启用 JMX

为了让 CloudWatch 代理能够收集 JMX 指标,应用程序的 JVM 必须使用 com.sun.management.jmxremote.port 系统属性绑定到端口。

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

有关更多信息和其他配置,请参阅 JMX 文档

要开始收集 JMX 指标,请在 CloudWatch 代理配置文件的 metrics_collected 部分中添加 jmx 部分。jmx 部分包含以下字段。

  • jvm – 可选。指定您想要从实例中检索 Java 虚拟机(JVM)指标。有关更多信息,请参阅 收集 JVM 指标

    此部分包含以下字段:

    • measurement – 指定一组要收集的 JVM 指标。有关此处可能使用的值的列表,请参阅 收集 JVM 指标 表中的指标列。

      在每个指标的条目中,您可以选择指定以下一个或两个字段:

      • 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 指标 表中的指标列。

      在每个指标的条目中,您可以选择指定以下一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

jmx 部分还包括可选 append_dimensions 字段:

  • append_dimensions – 可选。仅用于进程指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

以下字段仅用于 Amazon EC2。
  • endpoint – JMX 客户端要连接的地址。格式为 ip:port。如果端点不是本地主机,则必须启用密码身份验证和 SSL。

  • metrics_collection_interval – 可选。指定收集进程指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

    该值是以秒为单位指定的。例如,指定 10 将导致每 10 秒收集一次指标;将其设置为 300,将指定每 5 分钟收集一次指标。

    如果您将该值设置为低于 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 如果代理配置为非本地主机端点,则设置为 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 部分。

可以收集以下指标。

指标 Dimensions 描述

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 上,默认情况下,主机将作为 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 代理收集以下指标。

指标 Dimensions 描述

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 上,默认情况下,主机将作为 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 消费者收集以下指标。

指标 Dimensions 描述

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 上,默认情况下,主机将作为 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 生产者收集以下指标。

指标 Dimensions 描述

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 上,默认情况下,主机将作为 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 部分。

可以收集以下指标。

指标 Dimensions 描述

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 上,默认情况下,主机将作为 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

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。