

# 集成 Amazon MSK
<a name="managed-prometheus-collectors-msk-setup"></a>

借助 Amazon CloudWatch 托管式 Prometheus 收集器，您可以自动发现并收集 Amazon MSK 集群中的 Prometheus 指标。在 Amazon MSK 集群上启用开源监控系统时，其会通过 Java 管理扩展（JMX）Exporter 和 Node Exporter 公开 Prometheus 指标。托管式收集器连接到 VPC，并使用基于 DNS 的服务发现从所有代理抓取这些指标，然后将这些指标直接传输至 CloudWatch。借助此集成，无需部署任何代理，即可在 CloudWatch 中监控主机级指标、JVM 级指标以及 Kafka 代理指标。

**注意**  
当 Amazon CloudWatch 托管式 Prometheus 收集器将 Amazon MSK 指标传输至 CloudWatch 时，会自动针对每个指标丰富用于标识其来源的属性。每个指标都包含收集器的检测范围、记录 AWS 账户和区域的云属性，以及收集器从指标名称推断出的单位。使用 PromQL 查询指标时，可以对这些属性进行筛选和分组。

## 先决条件
<a name="managed-prometheus-collectors-msk-prerequisites"></a>

此过程假设您已熟悉 Amazon MSK 集群管理和 Amazon VPC 联网概念。
+ 处于预配置模式的 Amazon MSK 集群，配备标准代理或快速代理。托管式收集器不支持 Amazon MSK 无服务器。
+ 集群上已启用开源监控系统。有关更多信息，请参阅《Amazon MSK 开发人员指南》**中的 [Prometheus 的开源监控系统](https://docs.aws.amazon.com/msk/latest/developerguide/open-monitoring.html)。
+ 至少两个子网位于不同的可用区
+ 允许收集器访问代理端口 11001 和 11002 的安全组

## 步骤 1：启用开源监控系统
<a name="managed-prometheus-collectors-msk-enable-monitoring"></a>

在 Amazon MSK 集群上启用开源监控系统，以公开 Prometheus 指标。有关启用开源监控系统的说明，请参阅《Amazon MSK 开发人员指南》**中的 [Prometheus 的开源监控系统](https://docs.aws.amazon.com/msk/latest/developerguide/open-monitoring.html)。

```
aws kafka update-monitoring \
  --cluster-arn "arn:aws:kafka:{{us-west-2}}:{{123456789012}}:cluster/{{my-cluster}}/{{abc123-def456}}" \
  --current-version "{{K1A2B3C4D5}}" \
  --open-monitoring '{
    "Prometheus": {
      "JmxExporter": {"EnabledInBroker": true},
      "NodeExporter": {"EnabledInBroker": true}
    }
  }'
```

**注意**  
仅使用 `--open-monitoring` 参数即可公开 Prometheus 端口 11001 和 11002 上的端点。增强监控层级（如 `PER_TOPIC_PER_PARTITION`）与开源监控系统相互独立，可能会产生额外费用，因此请仅在需要该级别的 Amazon MSK 指标时才进行设置。

## 步骤 2：获取集群的 DNS 名称
<a name="managed-prometheus-collectors-msk-dns"></a>

Amazon MSK 提供集群级 DNS 名称，该名称可解析所有代理 IP。将此用于服务发现，可使监控系统在代理更换和集群扩展时保持弹性。

获取集群 DNS 名称（删除特定于代理的前缀，例如 `b-1.` 或 `b-2.`）：

```
aws kafka get-bootstrap-brokers --cluster-arn "arn:aws:kafka:{{us-west-2}}:{{123456789012}}:cluster/{{my-cluster}}/{{abc123-def456}}"
```

例如，如果引导代理返回 `b-1.my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com`，则使用 `my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com` 作为集群 DNS 名称。

## 步骤 3：配置抓取配置
<a name="managed-prometheus-collectors-msk-scrape-config"></a>

以下是用于 Amazon MSK 的抓取配置示例。在下一步创建抓取程序时，您将引用此配置。有关 配置选项的更多信息，请参阅 [抓取程序配置](managed-prometheus-collectors-scraper-configuration.md)。

```
global:
  scrape_interval: 60s
  external_labels:
    cluster_name: {{my-msk-cluster}}

scrape_configs:
  - job_name: 'msk-jmx'
    dns_sd_configs:
      - names:
          - {{my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com}}
        type: A
        port: 11001
    relabel_configs:
      - source_labels: [__meta_dns_name]
        target_label: broker_dns
      - source_labels: [__address__]
        target_label: instance
      - target_label: compute_platform
        replacement: 'msk'

  - job_name: 'msk-node'
    dns_sd_configs:
      - names:
          - {{my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com}}
        type: A
        port: 11002
    relabel_configs:
      - source_labels: [__meta_dns_name]
        target_label: broker_dns
      - source_labels: [__address__]
        target_label: instance
      - target_label: compute_platform
        replacement: 'msk'
```

## 步骤 4：创建抓取程序
<a name="managed-prometheus-collectors-msk-create-scraper"></a>

使用上一步中用于 Amazon MSK 代理的抓取配置，创建具有 CloudWatch 目标的抓取程序。

------
#### [ AWS API ]

使用 `CreateScraper` API 操作，以便创建具有 CloudWatch 目标的抓取程序。将子网、安全组及数据集信息替换为您自己的值。

```
POST /scrapers HTTP/1.1

{
  "alias": "msk-metrics-scraper",
  "source": {
    "vpcConfiguration": {
      "subnetIds": ["{{subnet-subnet-id-1}}", "{{subnet-subnet-id-2}}"],
      "securityGroupIds": ["{{sg-security-group-id}}"]
    }
  },
  "destination": {
    "cloudWatchConfiguration": {
      "datasetArn": "arn:aws:cloudwatch:{{us-west-2}}:{{123456789012}}:dataset/default"
    }
  },
  "scrapeConfiguration": {
    "configurationBlob": "{{base64-encoded-blob}}"
  }
}
```

------
#### [ AWS CLI ]

使用 `create-scraper` 命令，以便创建具有 CloudWatch 目标的抓取程序。将子网、安全组及数据集信息替换为您自己的值。

```
aws amp create-scraper \
  --alias "msk-metrics-scraper" \
  --source '{
    "vpcConfiguration": {
      "subnetIds": ["{{subnet-subnet-id-1}}", "{{subnet-subnet-id-2}}"],
      "securityGroupIds": ["{{sg-security-group-id}}"]
    }
  }' \
  --scrape-configuration configurationBlob=$(cat {{msk-config.yaml}} | base64 -w 0) \
  --destination '{
    "cloudWatchConfiguration": {
      "datasetArn": "arn:aws:cloudwatch:{{us-west-2}}:{{123456789012}}:dataset/default"
    }
  }'
```

------

## 可用指标
<a name="managed-prometheus-collectors-msk-available-metrics"></a>
+ **JMX Exporter（端口 11001）**：Kafka 代理内部信息，包括主题指标、分区指标、请求速率、消费者延迟以及未完全复制分区。
+ **Node Exporter（端口 11002）**：主机级指标，包括 CPU、内存、磁盘 I/O 和网络吞吐量。

有关可用指标的完整列表，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的[托管式收集器收集的 MSK 指标](https://docs.aws.amazon.com/prometheus/latest/userguide/prom-msk-integration.html#prom-msk-metrics)。

## 验证指标收集
<a name="managed-prometheus-collectors-msk-validate"></a>

要确认收集器同时传输 JMX 和 Node Exporter 指标，需在 CloudWatch 中使用 [Query Studio](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-PromQL-QueryStudio.html) 运行以下查询。如果每个查询都返回数据点，则收集器已成功抓取相应的导出程序。

以下查询从 JMX Exporter（端口 11001）返回代理级 Kafka 指标。其报告代理主题活动的平均速率，例如流经代理的消息数和字节数。数据点确认收集器正在抓取 Kafka 代理指标。

```
kafka_server_BrokerTopicMetrics_MeanRate
```

以下查询从 Node Exporter（端口 11002）返回主机级 CPU 使用率。其用 100 减去五分钟时段内的平均空闲 CPU 速率，从而得出代理正在使用的 CPU 百分比。数据点确认收集器正在抓取主机级指标。

```
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
```

## 查看自动控制面板
<a name="managed-prometheus-collectors-msk-dashboards"></a>

在收集器开始将 Amazon MSK 指标传输至 CloudWatch 之后，CloudWatch 控制台会提供名为 **MSK OTel** 的自动控制面板。要将其打开，请访问 [MSK OTel](https://console.aws.amazon.com/cloudwatch/home?#dashboards/templates/msk-otel)，或登录 AWS 管理控制台，打开 CloudWatch 控制台，在导航窗格中选择**控制面板**，接着选择**自动控制面板**，然后选择 **MSK OTel**。无需自行构建任何小组件或控制面板，即可开始监控集群。

如果自动控制面板满足您的需求，即可直接使用。要打造量身定制的监控体验，您可以将其中的任何小组件添加到自定义控制面板中。有关自定义控制面板的更多信息，请参阅[使用 CloudWatch 控制面板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

## 跨账户可观测性
<a name="managed-prometheus-collectors-msk-cross-account"></a>

对于跨账户 Amazon MSK 监控，建议使用 Amazon CloudWatch 指标集中化。有关更多信息，请参阅 [CloudWatch 指标集中化](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html)。

有关使用角色链接的其他跨账户抓取程序配置，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的[跨账户 Amazon MSK 集成](https://docs.aws.amazon.com/prometheus/latest/userguide/prom-msk-cross-account.html)。

## 目前的局限性
<a name="managed-prometheus-collectors-msk-limitations"></a>
+ 托管式收集器不支持 Amazon MSK 无服务器集群。
+ 托管式收集器不支持公有访问和 KRaft 元数据模式。
+ 每个 Amazon MSK 集群和 CloudWatch 数据集组合都需要一个收集器。