可以使用 CloudWatch 代理从 Java 应用程序收集 Java 管理扩展(JMX)指标。
CloudWatch 代理支持从以下版本收集这些指标:
JVM 8 及更高版本
Kafka 0.8.2.x 及更高版本
Tomcat 9、10.1 和 11(测试版)
在 JVM 实例中启用 JMX
为了让 CloudWatch 代理能够收集 JMX 指标,应用程序的 JVM 必须使用 com.sun.management.jmxremote.port
系统属性绑定到端口。
java -Dcom.sun.management.jmxremote.port=
port-number
-jarexample.jar
有关更多信息和其他配置,请参阅 JMX 文档
要开始收集 JMX 指标,请在 CloudWatch 代理配置文件的 metrics_collected
部分中添加 jmx
部分。jmx
部分包含以下字段。
jvm
– 可选。指定您想要从实例中检索 Java 虚拟机(JVM)指标。有关更多信息,请参阅 收集 JVM 指标。此部分包含以下字段:
-
measurement
– 指定一组要收集的 JVM 指标。有关此处可能使用的值的列表,请参阅 收集 JVM 指标 表中的指标列。在每个指标的条目中,您可以选择指定以下一个或两个字段:
-
rename
– 为该指标指定不同的名称。 -
unit
– 指定用于该指标的单位,从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatum 的Unit
描述中所示。
-
-
kafka
– 可选。指定您想要从实例中检索 Apache Kafka 代理指标。有关更多信息,请参阅 收集 Kafka 指标。此部分包含以下字段:
-
measurement
– 指定一组要收集的 Kafka 代理指标。有关此处可能使用的值的列表,请参阅 收集 Kafka 指标 第一个表中的指标列。在每个指标的条目中,您可以选择指定以下一个或两个字段:
-
rename
– 为该指标指定不同的名称。 -
unit
– 指定用于该指标的单位,从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatum 的Unit
描述中所示。
-
-
kafka-consumer
– 可选。指定您想要从实例中检索 Apache Kafka 消费者指标。有关更多信息,请参阅 收集 Kafka 指标。此部分包含以下字段:
-
measurement
– 指定一组要收集的 Kafka 代理指标。有关此处可能使用的值的列表,请参阅 收集 Kafka 指标 第二个指标表中的指标列。在每个指标的条目中,您可以选择指定以下一个或两个字段:
-
rename
– 为该指标指定不同的名称。 -
unit
– 指定用于该指标的单位,从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatum 的Unit
描述中所示。
-
-
kafka-producer
– 可选。指定您想要从实例中检索 Apache Kafka 生产者指标。有关更多信息,请参阅 收集 Kafka 指标。此部分包含以下字段:
-
measurement
– 指定一组要收集的 Kafka 代理指标。有关此处可能使用的值的列表,请参阅 收集 Kafka 指标 第三个指标表中的指标列。在每个指标的条目中,您可以选择指定以下一个或两个字段:
-
rename
– 为该指标指定不同的名称。 -
unit
– 指定用于该指标的单位,从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatum 的Unit
描述中所示。
-
-
tomcat
– 可选。指定您想要从实例中检索 Tomcat 指标。有关更多信息,请参阅 收集 Tomcat 指标。此部分包含以下字段:
-
measurement
– 指定一组要收集的 Tomcat 指标。有关此处可能使用的值的列表,请参阅 收集 Tomcat 指标 表中的指标列。在每个指标的条目中,您可以选择指定以下一个或两个字段:
-
rename
– 为该指标指定不同的名称。 -
unit
– 指定用于该指标的单位,从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatum 的Unit
描述中所示。
-
-
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,则需要keystore
和truststore
的条目,分别对应javax.net.ssl.keyStorePassword
和javax.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/PLAIN
、SASL/DIGEST-MD5
和SASL/CRAM-MD5
。应该是以下之一:SASL/PLAIN
、SASL/DIGEST-MD5
、SASL/CRAM-MD5
、TLS SASL/PLAIN
、TLS SASL/DIGEST-MD5
或TLS 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 向操作系统请求用于堆的初始内存量。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
可用于堆的最大内存量。 单位:字节 有意义的统计数据:最大值 |
|
[默认] |
当前堆内存使用情况。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
保证可供堆使用的内存量。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
JVM 向操作系统请求用于非堆用途的初始内存量。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
可用于非堆用途的最大内存量。 单位:字节 有意义的统计数据:最大值 |
|
[默认] |
当前非堆内存使用情况。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
保证可供非堆用途使用的内存量。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
JVM 向操作系统请求用于内存池的初始内存量。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
可用于内存池的最大内存量。 单位:字节 有意义的统计数据:最大值 |
|
[默认]、 |
当前内存池的内存使用情况。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
保证可供内存池使用的内存量。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
当前线程数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
JVM 指标使用以下维度收集:
维度 | 描述 |
---|---|
[默认] |
在 Amazon EC2 上,默认情况下,主机将作为 CloudWatch 代理收集的指标维度进行发布(除非您使用 在 Amazon EKS 上,默认情况下,与 k8s 相关的上下文也会作为指标维度( |
|
对于 对于 |
收集 Kafka 指标
可以使用 CloudWatch 代理收集 Apache Kafka 指标。要对此进行设置,请在 CloudWatch 代理配置文件的 jmx
部分内添加以下一个或多个子部分。
使用
kafka
部分收集 Kafka 代理指标。使用
kafka-consumer
部分收集 Kafka 消费者指标。使用
kafka-producer
部分收集 Kafka 生产者指标。
Kafka 代理指标
可以为 Kafka 代理收集以下指标。
指标 | Dimensions | 描述 |
---|---|---|
|
[默认] |
Kafka 代理收到的消息数量。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
Kafka 代理收到的请求数量。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
向 Kafka 代理发出的导致失败的请求数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
Kafka 代理处理请求所花费的总时间。 单位:毫秒 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
Kafka 代理处理请求所花费的第 50 个百分位数时间。 单位:毫秒 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
Kafka 代理处理请求所花费的第 99 个百分位数时间。 单位:毫秒 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
Kafka 代理处理请求所花费的平均时间。 单位:毫秒 有意义的统计数据:平均值 |
|
[默认]、 |
Kafka 代理接收或发送的字节数。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
在处于等待状态的请求数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
Kafka 代理的分区数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
处于脱机状态的分区数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
未完全复制的分区数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
同步副本扩缩操作的数量。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
跟随副本和领导副本之间消息的最大延迟。 单位:无 有意义的统计数据:最大值 |
|
[默认] |
代理上的活动控制器数量。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
领导副本选择率。如果该值增加,则表示代理失败。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
不正常领导副本选择率。如果该值增加,则表示代理失败。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
请求队列的大小。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
日志刷新计数。 单位:毫秒 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
日志刷新计数的第 50 个百分位数值。 单位:毫秒 有意义的统计数据:最小值、最大值、平均值 |
|
[默认] |
日志刷新计数的第 99 个百分位数值。 单位:毫秒 有意义的统计数据:最小值、最大值、平均值 |
Kafka 代理指标使用以下维度收集:
维度 | 描述 |
---|---|
[默认] |
在 Amazon EC2 上,默认情况下,主机将作为 CloudWatch 代理收集的指标维度进行发布(除非您使用 在 Amazon EKS 上,默认情况下,与 k8s 相关的上下文也会作为指标维度( |
|
请求类型。可能的值为 |
|
网络流量方向。可能的值为 |
|
同步副本的操作类型。可能的值为 |
Kafka 消费者指标
可以为 Kafka 消费者收集以下指标。
指标 | Dimensions | 描述 |
---|---|---|
|
[默认]、 |
所有主题的每秒提取请求数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
消费者落后于生产者的消息数量。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
所有主题每秒使用的平均字节数。 单位:字节 有意义的统计数据:平均值 |
|
[默认]、 |
所有主题每次请求提取的字节数。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
所有主题每秒使用的平均记录数。 单位:无 有意义的统计数据:平均值 |
|
[默认]、 |
每秒使用的平均字节数。 单位:字节 有意义的统计数据:平均值 |
|
[默认]、 |
每次请求提取的字节数。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
每秒使用的平均记录数。 单位:无 有意义的统计数据:平均值 |
Kafka 消费者指标使用以下维度收集:
维度 | 描述 |
---|---|
[默认] |
在 Amazon EC2 上,默认情况下,主机将作为 CloudWatch 代理收集的指标维度进行发布(除非您使用 在 Amazon EKS 上,默认情况下,与 k8s 相关的上下文也会作为指标维度( |
|
事件 ID |
|
Kafka 主题。 |
Kafka 生产者指标
可以为 Kafka 生产者收集以下指标。
指标 | Dimensions | 描述 |
---|---|---|
|
[默认]、 |
I/O 线程等待套接字准备读取或写入所花费的平均时间长度。 单位:无 有意义的统计数据:平均值 |
|
[默认]、 |
每秒向所有服务器发送的平均传出字节数。 单位:字节 有意义的统计数据:平均值 |
|
[默认]、 |
平均请求延迟。 单位:毫秒 有意义的统计数据:平均值 |
|
[默认]、 |
每秒发送的平均请求数。 单位:无 有意义的统计数据:平均值 |
|
[默认]、 |
每秒接收的响应数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
主题字节的每秒平均发送数。 单位:字节 有意义的统计数据:平均值 |
|
[默认]、 |
主题记录批次的平均压缩率。 单位:无 有意义的统计数据:平均值 |
|
[默认]、 |
导致主题错误的每秒平均记录发送数。 单位:无 有意义的统计数据:平均值 |
|
[默认]、 |
主题重试记录的平均每秒发送数。 单位:无 有意义的统计数据:平均值 |
|
[默认]、 |
主题记录的每秒平均发送数。 单位:无 有意义的统计数据:平均值 |
Kafka 生产者指标使用以下维度收集:
维度 | 描述 |
---|---|
[默认] |
在 Amazon EC2 上,默认情况下,主机将作为 CloudWatch 代理收集的指标维度进行发布(除非您使用 在 Amazon EKS 上,默认情况下,与 k8s 相关的上下文也会作为指标维度( |
|
事件 ID |
|
Kafka 主题。 |
收集 Tomcat 指标
可以使用 CloudWatch 代理收集 Apache Tomcat 指标。要对此进行设置,请在 CloudWatch 代理配置文件的 metrics_collected
部分中添加 tomcat
部分。
可以收集以下指标。
指标 | Dimensions | 描述 |
---|---|---|
|
[默认] |
活动会话数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
遇到的错误数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
总处理时间。 单位:毫秒 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
接收和发送的字节数。 单位:字节 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
线程数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
|
[默认]、 |
处理请求的最长时间。 单位:毫秒 有意义的统计数据:最大值 |
|
[默认]、 |
请求总数。 单位:无 有意义的统计数据:最小值、最大值、平均值 |
Tomcat 指标使用以下维度收集:
维度 | 描述 |
---|---|
[默认] |
在 Amazon EC2 上,默认情况下,主机将作为 CloudWatch 代理收集的指标维度进行发布(除非您使用 在 Amazon EKS 上,默认情况下,与 k8s 相关的上下文也会作为指标维度( |
|
|
|
流量方向。可能的值为 |