

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 设置 Amazon Managed Service for Prometheus 以获取高可用性数据
<a name="AMP-ingest-high-availability"></a>

当您将数据发送到 Amazon Managed Service for Prometheus 时，数据会自动在该区域的 AWS 可用区间复制，并由提供可扩展性、可用性和安全性的主机集群提供给您。您可能需要添加额外的高可用性故障安全功能，具体取决于您的特定设置。有两种常见的方法可以为您的设置增加高可用性安全性：
+ 如果您有多个容器或实例具有相同数据，则可以将这些数据发送到 Amazon Managed Service for Prometheus，并自动删除重复数据。这有助于确保您的数据将发送到 Amazon Managed Service for Prometheus 工作区。

  有关对高可用性数据进行重复数据消除的更多信息，请参阅 [对发送到 Amazon Managed Service for Prometheus 的高可用性指标进行重复数据删除](AMP-ingest-dedupe.md)。
+ 如果您想确保即使 AWS 区域不可用的情况下也可以访问数据，则可以将指标发送到另一个区域的第二个工作区。

  有关将指标数据发送到多个工作区的更多信息，请参阅 [利用跨区域工作区在 Amazon Managed Service for Prometheus 中增加高可用性](AMP-send-to-multiple-workspaces.md)。

**Topics**
+ [对发送到 Amazon Managed Service for Prometheus 的高可用性指标进行重复数据删除](AMP-ingest-dedupe.md)
+ [使用 Prometheus 将高可用性数据发送到 Amazon Managed Service for Prometheus](Send-high-availability-data.md)
+ [使用 Prometheus Operator Helm 图表为 Amazon Managed Service for Prometheus 设置高可用性数据](Send-high-availability-data-operator.md)
+ [使用 Distro 向适用于 Prometheus 的亚马逊托管服务发送高可用性数据 AWS OpenTelemetry](Send-high-availability-data-ADOT.md)
+ [使用 Prometheus 社区 Helm 图表向 Amazon Managed Service for Prometheus 发送高可用性数据](Send-high-availability-prom-community.md)
+ [有关 Amazon Managed Service for Prometheus 中高可用性配置常见问题的解答](HA_FAQ.md)
+ [利用跨区域工作区在 Amazon Managed Service for Prometheus 中增加高可用性](AMP-send-to-multiple-workspaces.md)

# 对发送到 Amazon Managed Service for Prometheus 的高可用性指标进行重复数据删除
<a name="AMP-ingest-dedupe"></a>

您可以将来自多个 Prometheus *代理*（在代理模式下运行的 Prometheus 实例）的数据发送到 Amazon Managed Service for Prometheus 工作区。如果其中一些实例记录并发送相同的指标，则您的数据将具有更高的可用性（即使其中一个代理停止发送数据，Amazon Managed Service for Prometheus 工作区仍将接收来自另一个实例的数据）。但是，您希望 Amazon Managed Service for Prometheus 工作区自动删除重复的指标，这样您就不会多次看到这些指标，也不会多次对数据摄取和存储付费。

要让 Amazon Managed Service for Prometheus 自动删除来自多个 Prometheus 代理的重复数据，您需要为发送重复数据的代理组指定一个*集群名称*，并为每个实例指定一个*副本名称*。集群名称将实例标识为具有共享数据，副本名称允许 Amazon Managed Service for Prometheus 识别每个指标的来源。最终存储的指标包括集群标签，但不包括副本，因此这些指标似乎来自单一来源。

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

以下主题介绍如何发送数据以及如何包含 `cluster` 和 `__replica__` 标签，以便 Amazon Managed Service for Prometheus 自动删除重复数据。

**重要**  
如果您未设置重复数据删除，则需要为发送到 Amazon Managed Service for Prometheus 的所有数据样本付费。这些数据样本包括重复的样本。

# 使用 Prometheus 将高可用性数据发送到 Amazon Managed Service for Prometheus
<a name="Send-high-availability-data"></a>

要使用 Prometheus 设置高可用性配置，您必须在高可用性组的所有实例上应用外部标签，以便 Amazon Managed Service for Prometheus 可以进行识别。使用 `cluster` 标签将 Prometheus 实例代理标识为高可用性组的一部分。使用 `__replica__` 标签分别标识组中的每个副本。要使重复数据删除功能起作用，您需要同时应用 `__replica__` 和 `cluster` 标签。

**注意**  
`__replica__` 标签的格式为在单词 `replica` 前后使用两个下划线符号。

**示例：代码片段**

在以下代码片段中，`cluster` 标签标识 Prometheus 实例代理 `prom-team1`，`_replica_` 标签标识副本 `replica1` 和 `replica2`。

```
cluster: prom-team1
__replica__: replica1
```

```
cluster: prom-team1
__replica__: replica2
```

由于 Amazon Managed Service for Prometheus 存储带有这些标签的高可用性副本的数据样本，因此当样本被接受时，它会删除 `replica` 标签。这意味着您当前的序列只有 1:1 的序列映射，而不是每个副本一个序列。保留了 `cluster` 标签。

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

# 使用 Prometheus Operator Helm 图表为 Amazon Managed Service for Prometheus 设置高可用性数据
<a name="Send-high-availability-data-operator"></a>

要使用 Helm 中的 Prometheus Operator 设置高可用性配置，必须在高可用性组的所有实例上应用外部标签，以便 Amazon Managed Service for Prometheus 可以识别它们。您还必须在 Prometheus Operator Helm 图表上设置 `replicaExternalLabelName` 和 `externalLabels` 属性。

**示例：YAML 标头**

在以下 YAML 标头中，在 `externalLabel` 中添加了 `cluster` 以将 Prometheus 实例代理标识为高可用性组的一部分，并且 `replicaExternalLabels` 标识该组中的每个副本。

```
replicaExternalLabelName: __replica__
externalLabels:
cluster: prom-dev
```

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

# 使用 Distro 向适用于 Prometheus 的亚马逊托管服务发送高可用性数据 AWS OpenTelemetry
<a name="Send-high-availability-data-ADOT"></a>

AWS Distro for OpenTelemetry (ADOT) 是该项目的安全且可用于生产的发行版。 OpenTelemetry ADOT 为您提供源代码 APIs、库和代理，因此您可以收集分布式跟踪和指标以进行应用程序监控。有关 ADOT 的信息，请参阅[关于 Open Tel AWS emetry 发行版。](https://aws-otel.github.io/about)

要将 ADOT 设置为高可用性配置，必须配置 ADOT 收集器容器镜像，并将外部标签`cluster`应用于 Prometheus `__replica__` AWS 远程写入导出器。此导出器通过 `remote_write` 终端节点将您抓取的指标发送到 Amazon Managed Service for Prometheus 工作区。在 Remote Write Exporter 上设置这些标签时，可以防止在冗余副本运行时保留重复的指标。有关 AWS Prometheus 远程写入导出器的更多信息，请参阅适用于 Prometheus 的亚马逊 Prometheus 托管服务的 [Prometheus 远程写入导出器入门](https://aws-otel.github.io/docs/getting-started/prometheus-remote-write-exporter)。

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

# 使用 Prometheus 社区 Helm 图表向 Amazon Managed Service for Prometheus 发送高可用性数据
<a name="Send-high-availability-prom-community"></a>

要使用 Prometheus 社区 Helm 图表设置高可用性配置，您必须在高可用性组的所有实例上应用外部标签，以便 Amazon Managed Service for Prometheus 可以进行识别。以下是如何将 `external_labels` 从 Prometheus 社区 Helm 图表中添加到 Prometheus 的单个实例的示例。

```
server:
global:
  external_labels:
      cluster: monitoring-cluster
      __replica__: replica-1
```

**注意**  
如果您想要多个副本，则必须使用不同的副本值多次部署图表，因为 Prometheus 社区 Helm 图表不允许您在直接从控制器组增加副本数量时动态设置副本值。如果您更偏好自动设置 `replica` 标签，请使用 prometheus-operator Helm 图表。

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

# 有关 Amazon Managed Service for Prometheus 中高可用性配置常见问题的解答
<a name="HA_FAQ"></a>

## 我是否应该将值 *\$1\$1replica\$1\$1* 包含在另一个标签中以跟踪采样点？
<a name="HA_FAQ_replica-label"></a>

 在高可用性设置中，Amazon Managed Service for Prometheus 通过在 Prometheus 实例集群中选出领导来确保数据样本不会重复。如果领导副本在 30 秒内停止发送数据样本，则 Amazon Managed Service for Prometheus 会自动将另一个 Prometheus 实例设置为领导副本，并从新领导那里摄取数据，包括任何丢失的数据。因此，答案是否定的，不建议这样做。 这样做可能会导致以下问题：
+  在选择新领导期间，在 **PromQL** 中查询 `count` 返回的值可能会高于预期值。
+  在选择新领导期间，`active series` 数增加了，达到了 `active series limits`。有关更多信息，请参阅 [AMP 配额](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP_quotas.html)。

## Kubernetes 似乎有自己的 *cluster* 标签，而且没有对我的指标进行重复数据删除。如何修复此问题？
<a name="HA_FAQ_cluster-label"></a>

Kubernetes 1.28 中引入了一个带有 `cluster` 标签的新指标 `apiserver_storage_size_bytes`。这会导致 Amazon Managed Service for Prometheus 中的重复数据删除功能出现问题，这取决于 `cluster` 标签。在 Kubernetes 1.3 中，该标签重命名为 `storage-cluster_id`（在 1.28 和 1.29 的后续补丁中也进行了重命名）。如果您的集群发出带有 `cluster` 标签的指标，则 Amazon Managed Service for Prometheus 无法对关联的时间序列进行重复数据删除。我们建议您将 Kubernetes 集群升级到最新的补丁版本，以避免出现此问题。或者，您也可以在 `apiserver_storage_size_bytes` 指标上重新标记 `cluster` 标签，然后再将其摄取到 Amazon Managed Service for Prometheus。

**注意**  
*有关 Kubernetes 变更的更多详细信息，请参阅 Kubernetes 项目中的 apiserver\$1storage\$1size\$1bytes 指标[将标签集群重命名为 storage\$1cluster\$1](https://github.com/kubernetes/kubernetes/pull/124283) id。 GitHub*

# 利用跨区域工作区在 Amazon Managed Service for Prometheus 中增加高可用性
<a name="AMP-send-to-multiple-workspaces"></a>

要为您的数据添加跨区域可用性，您可以将指标发送到跨 AWS 区域的多个工作空间。Prometheus 支持多个写入器和跨区域写入。

以下示例说明如何设置在代理模式下运行的 Prometheus 服务器，以便使用 Helm 将指标发送到不同区域的两个工作区。

```
extensions:
      sigv4auth:
        service: "aps"
     
    receivers:
      prometheus:
        config:
          scrape_configs:
            - job_name: 'kubernetes-kubelet'
              scheme: https
              tls_config:
                ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
                insecure_skip_verify: true
              bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
              kubernetes_sd_configs:
              - role: node
              relabel_configs:
              - action: labelmap
                regex: __meta_kubernetes_node_label_(.+)
              - target_label: __address__
                replacement: kubernetes.default.svc.cluster.local:443
              - source_labels: [__meta_kubernetes_node_name]
                regex: (.+)
                target_label: __metrics_path__
                replacement: /api/v1/nodes/$${1}/proxy/metrics
     
    exporters:
      prometheusremotewrite/one:
        endpoint: "https://aps-workspaces.workspace_1_region.amazonaws.com/workspaces/ws-workspace_1_id/api/v1/remote_write"
        auth:
          authenticator: sigv4auth
      prometheusremotewrite/two:
        endpoint: "https://aps-workspaces.workspace_2_region.amazonaws.com/workspaces/ws-workspace_2_id/api/v1/remote_write"
        auth:
          authenticator: sigv4auth
     
    service:
      extensions: [sigv4auth]
      pipelines:
        metrics/one:
          receivers: [prometheus]
          exporters: [prometheusremotewrite/one]
        metrics/two:
          receivers: [prometheus]
          exporters: [prometheusremotewrite/two]
```