

# 收集 Java 管理扩展（JMX）指标
<a name="CloudWatch-Agent-JMX-metrics"></a>

可以使用 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 文档](https://docs.oracle.com/en/java/javase/17/management/monitoring-and-management-using-jmx-technology.html)。

------
#### [ Amazon EKS ]

**在 Java 应用程序容器组（pod）上启用 JMX**  
使用 CloudWatch 可观测性 EKS 附加组件时，可以管理使用注释启用 JMX 指标的方式。有关更多信息，请参阅 [使用 Amazon CloudWatch Observability EKS 附加组件或 Helm 图表安装 CloudWatch 代理](install-CloudWatch-Observability-EKS-addon.md)。要从工作负载启用 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 指标](#CloudWatch-Agent-JVM-metrics)。

  此部分包含以下字段：
  + `measurement` – 指定一组要收集的 JVM 指标。有关此处可能使用的值的列表，请参阅 [收集 JVM 指标](#CloudWatch-Agent-JVM-metrics) 表中的**指标**列。

    在每个指标的条目中，您可以选择指定以下一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
+ `kafka`：可选。指定您想要从实例中检索 Apache Kafka 代理指标。有关更多信息，请参阅 [收集 Kafka 指标](#CloudWatch-Agent-Kafka-metrics)。

  此部分包含以下字段：
  + `measurement` – 指定一组要收集的 Kafka 代理指标。有关此处可能使用的值的列表，请参阅 [收集 Kafka 指标](#CloudWatch-Agent-Kafka-metrics) 第一个表中的**指标**列。

    在每个指标的条目中，您可以选择指定以下一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
+ `kafka-consumer`：可选。指定您想要从实例中检索 Apache Kafka 消费者指标。有关更多信息，请参阅 [收集 Kafka 指标](#CloudWatch-Agent-Kafka-metrics)。

  此部分包含以下字段：
  + `measurement` – 指定一组要收集的 Kafka 代理指标。有关此处可能使用的值的列表，请参阅 [收集 Kafka 指标](#CloudWatch-Agent-Kafka-metrics) 第二个指标表中的**指标**列。

    在每个指标的条目中，您可以选择指定以下一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
+ `kafka-producer`：可选。指定您想要从实例中检索 Apache Kafka 生产者指标。有关更多信息，请参阅 [收集 Kafka 指标](#CloudWatch-Agent-Kafka-metrics)。

  此部分包含以下字段：
  + `measurement` – 指定一组要收集的 Kafka 代理指标。有关此处可能使用的值的列表，请参阅 [收集 Kafka 指标](#CloudWatch-Agent-Kafka-metrics) 第三个指标表中的**指标**列。

    在每个指标的条目中，您可以选择指定以下一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
+ `tomcat`：可选。指定您想要从实例中检索 Tomcat 指标。有关更多信息，请参阅 [收集 Tomcat 指标](#CloudWatch-Agent-Tomcat-metrics)。

  此部分包含以下字段：
  + `measurement` – 指定一组要收集的 Tomcat 指标。有关此处可能使用的值的列表，请参阅 [收集 Tomcat 指标](#CloudWatch-Agent-Tomcat-metrics) 表中的**指标**列。

    在每个指标的条目中，您可以选择指定以下一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `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 秒，则将每个指标作为高精度指标进行收集。有关更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。

如果 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 指标
<a name="CloudWatch-Agent-JVM-metrics"></a>

可以使用 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 代理配置文件](CloudWatch-Agent-Configuration-File-Details.md)部分中的 `omit_hostname`。 在 Amazon EKS 上，默认情况下，与 k8s 相关的上下文也会作为指标维度（`k8s.container.name`、`k8s.deployment.name`、`k8s.namespace.name`、`k8s.node.name`、`k8s.pod.name` 和 `k8s.replicaset.name`）发布。可以使用 `aggregation_dimensions` 字段筛选这些内容。  | 
| `name` | 对于 `jvm.gc.collections` 指标，该值是垃圾回收器名称。 对于 `jvm.memory.pool` 指标，该值为内存池名称。  | 

## 收集 Kafka 指标
<a name="CloudWatch-Agent-Kafka-metrics"></a>

可以使用 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 代理配置文件](CloudWatch-Agent-Configuration-File-Details.md)部分中的 `omit_hostname`。 在 Amazon EKS 上，默认情况下，与 k8s 相关的上下文也会作为指标维度（`k8s.container.name`、`k8s.deployment.name`、`k8s.namespace.name`、`k8s.node.name`、`k8s.pod.name` 和 `k8s.replicaset.name`）发布。可以使用 `aggregation_dimensions` 字段筛选这些内容。  | 
| `type` | 请求类型。可能的值为 `produce`、`fetch`、`fetchconsumer` 和 `fetchfollower`。 | 
| `state` | 网络流量方向。可能的值为 `in` 和 `out`。 | 
| `operation` | 同步副本的操作类型。可能的值为 `shrink` 和 `expand`。 | 

**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-id`、`topic` |  每秒使用的平均字节数。 **单位**：字节 **有意义的统计数据：**平均值  | 
|  `kafka.consumer.fetch-size-avg` | [默认]、`client-id`、`topic` |  每次请求提取的字节数。 **单位**：字节 **有意义的统计数据：**最小值、最大值、平均值  | 
|  `kafka.consumer.records-consumed-rate` | [默认]、`client-id`、`topic` |  每秒使用的平均记录数。 **单位**：无 **有意义的统计数据：**平均值  | 

Kafka 消费者指标使用以下维度收集：


| 维度 | 说明 | 
| --- | --- | 
| [默认] | 在 Amazon EC2 上，默认情况下，主机将作为 CloudWatch 代理收集的指标维度进行发布（除非您使用 `metrics` 部分的 `append_dimensions` 字段）。有关更多信息，请参阅[手动创建或编辑 CloudWatch 代理配置文件](CloudWatch-Agent-Configuration-File-Details.md)部分中的 `omit_hostname`。 在 Amazon EKS 上，默认情况下，与 k8s 相关的上下文也会作为指标维度（`k8s.container.name`、`k8s.deployment.name`、`k8s.namespace.name`、`k8s.node.name`、`k8s.pod.name` 和 `k8s.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-id`、`topic` |  主题字节的每秒平均发送数。 **单位**：字节 **有意义的统计数据：**平均值  | 
|  `kafka.producer.compression-rate` | [默认]、`client-id`、`topic` |  主题记录批次的平均压缩率。 **单位**：无 **有意义的统计数据：**平均值  | 
|  `kafka.producer.record-error-rate` | [默认]、`client-id`、`topic` |  导致主题错误的每秒平均记录发送数。 **单位**：无 **有意义的统计数据：**平均值  | 
|  `kafka.producer.record-retry-rate` | [默认]、`client-id`、`topic` |  主题重试记录的平均每秒发送数。 **单位**：无 **有意义的统计数据：**平均值  | 
|  `kafka.producer.record-send-rate` | [默认]、`client-id`、`topic` |  主题记录的每秒平均发送数。 **单位**：无 **有意义的统计数据：**平均值  | 

Kafka 生产者指标使用以下维度收集：


| 维度 | 说明 | 
| --- | --- | 
| [默认] | 在 Amazon EC2 上，默认情况下，主机将作为 CloudWatch 代理收集的指标维度进行发布（除非您使用 `metrics` 部分的 `append_dimensions` 字段）。有关更多信息，请参阅[手动创建或编辑 CloudWatch 代理配置文件](CloudWatch-Agent-Configuration-File-Details.md)部分中的 `omit_hostname`。 在 Amazon EKS 上，默认情况下，与 k8s 相关的上下文也会作为指标维度（`k8s.container.name`、`k8s.deployment.name`、`k8s.namespace.name`、`k8s.node.name`、`k8s.pod.name` 和 `k8s.replicaset.name`）发布。可以使用 `aggregation_dimensions` 字段筛选这些内容。  | 
| `client-id` | 事件 ID | 
| `topic` | Kafka 主题。 | 

## 收集 Tomcat 指标
<a name="CloudWatch-Agent-Tomcat-metrics"></a>

可以使用 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_handler`、`direction` |  处理请求的最长时间。 **单位：**毫秒 **有意义的统计数据：**最大值   | 
|  `tomcat.request_count`  | [默认]、`proto_handler` |  请求总数。 **单位**：无 **有意义的统计数据：**最小值、最大值、平均值   | 

Tomcat 指标使用以下维度收集：


| 维度 | 说明 | 
| --- | --- | 
| [默认] | 在 Amazon EC2 上，默认情况下，主机将作为 CloudWatch 代理收集的指标维度进行发布（除非您使用 `metrics` 部分的 `append_dimensions` 字段）。有关更多信息，请参阅[手动创建或编辑 CloudWatch 代理配置文件](CloudWatch-Agent-Configuration-File-Details.md)部分中的 `omit_hostname`。 在 Amazon EKS 上，默认情况下，与 k8s 相关的上下文也会作为指标维度（`k8s.container.name`、`k8s.deployment.name`、`k8s.namespace.name`、`k8s.node.name`、`k8s.pod.name` 和 `k8s.replicaset.name`）发布。可以使用 `aggregation_dimensions` 字段筛选这些内容。  | 
| `proto_handler` | `proto_handler` 是连接器的标识符，格式为 `<protocol>-<type>-<port>`（例如 `http-nio-8080`）。 | 
| `direction` | 流量方向。可能的值为 `received` 和 `sent`。  | 