

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

# 在 Amazon Managed Service for Prometheus 中管理查询成本
<a name="query-insights-control"></a>

Amazon Managed Service for Prometheus 通过限制单个查询可以使用的已处理的查询样本（QSP）数量，来限制查询成本。您可以为 QSP 配置两种类型的阈值，即*警告*和*错误*，以协助有效地管理和控制查询成本。

当查询达到*警告*阈值时，API 查询响应中会显示一条警告消息。对于通过 Amazon Managed Grafana 查看的查询，该警告将在 Amazon Managed Grafana UI 中显示，有助于用户识别代价高昂的查询。达到*错误*阈值的查询不需要付费，并且会因错误而被拒绝。

除了查询限制外，适用于 Prometheus 的 Amazon 托管服务还提供将查询性能数据记录到日志的功能。 CloudWatch 此功能支持您详细分析查询，有助于您优化 Amazon Managed Service for Prometheus 查询并更有效地管理成本。查询日志记录捕获有关超出指定的已处理查询样本（QSP）数阈值的查询的信息。然后，这些数据将发布到 CloudWatch 日志，使您能够调查和分析查询性能。记录的查询包括 API 查询和规则查询。默认情况下，查询日志处于禁用状态，以最大限度地减少不必要的 CloudWatch 日志使用量。当查询分析需要时，您可以启用此功能。

**Topics**
+ [配置查询日志记录](#query-logging)
+ [配置查询节流阈值](#query-throttling-thresholds)
+ [日志内容](#log-content)
+ [限制](#limitations)

## 配置查询日志记录
<a name="query-logging"></a>

您可以在适用于 Prometheus 的亚马逊托管服务控制台中配置查询日志，也可以通过调用 API 请求在 AWS CLI 中配置查询日志。`create-query-logging-configuration `此 API 正文包含目的地列表，但目前，我们仅支持 CloudWatch Logs 作为目的地，目标应该只包含一个带有 CloudWatch 配置的元素。

### 先决条件
<a name="CW-vender-query-logs-prerequisites"></a>

确保已创建了 `logGroup`。用于进行配置的 ID 或角色应具有以下策略或等效的权限。

------
#### [ JSON ]

****  

```
{
"Version":"2012-10-17",		 	 	 
    "Statement": [
        {
"Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups",
                "aps:CreateQueryLoggingConfiguration",
                "aps:UpdateQueryLoggingConfiguration",
                "aps:DescribeQueryLoggingConfiguration",
                "aps:DeleteQueryLoggingConfiguration"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### 配置 CloudWatch 日志
<a name="configure-cloudwatch-logs"></a>

您可以使用或登录适用于 Prometheus 的亚马逊 Prometheus 托管服务来配置 CloudWatch 日志。 AWS 管理控制台 AWS CLI

**使用 Amazon Managed Service for Prometheus 控制台配置查询日志记录**

1. 导航到工作区详细信息面板中的**日志**选项卡。

1. 在**查询洞察**下，选择**创建**。

1. 选择**日志组**下拉列表并选择要发布日志的日志组。

   您也可以在 CloudWatch 控制台中创建新的日志组。

1. 输入**阈值（QSP）**。

1. 选择**保存**。

**要使用命令配置查询日志 AWS CLI ** 

```
aws amp create-query-logging-configuration \
--workspace-id {{my_workspace_ID}} \
--destinations '[{"cloudWatchLogs":{"logGroupArn":"{{$my-log-group-arn}}"},"filters":{"qspThreshold":{{$qspThreshold}}}}]'
```

有关如何更新、删除和描述操作的信息，请参阅 [Amazon Managed Service for Prometheus API 参考](https://docs.aws.amazon.com/prometheus/latest/APIReference/Welcome.html)。

## 配置查询节流阈值
<a name="query-throttling-thresholds"></a>

要配置 QSP 阈值，必须在 [QueryMetrics API](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-APIReference-QueryMetrics.html) 中提供查询参数。
+ max\_samples\_processed\_warning\_threshold：为已处理的查询样本设置警告阈值
+ max\_samples\_processed\_error\_threshold：为已处理的查询样本设置错误阈值

对于 Amazon Managed Grafana 用户，您可以使用 grafana 数据来源配置对来自该数据来源的所有查询应用限制：

1. 在 Amazon Managed Grafana 中浏览到 Amazon Managed Service for Prometheus 数据来源配置。

1. 在**自定义查询参数**下，添加阈值标头。

1. 选择**保存**。

## 日志内容
<a name="log-content"></a>

对于源自规则的查询，您将在 CloudWatch 日志中看到有关该查询的以下信息：

```
{
    workspaceId: "workspace_id",
    message: {
        query: "avg(rate(go_goroutines[1m])) > 1",
        name: "alert_rule",
        kind: "alerting",
        group: "test-alert",
        namespace: "test",
        samples: "59321",
    },
    component: "ruler"
}
```

对于源自 API 调用的查询，您将在 CloudWatch 日志中看到有关该查询的以下信息：

```
{
    workspaceId: "ws-5e7658c2-7ccf-4c30-9de9-2ab26fa30639",
    message: {
        query: "sum by (instance) (go_memstats_alloc_bytes{job=\"node\"})",
        queryType: "range",
        start: "1683308700000",
        end: "1683913500000",
        step: "300000",
        samples: "11496",
        userAgent: "AWSPrometheusDPJavaClient/2.0.436.0 ",
        dashboardUid: "11234",
        panelId: "12"
    },
    component: "query-frontend"
}
```

## 限制
<a name="limitations"></a>

**策略大小限制**- CloudWatch 日志资源策略限制为 5120 个字符。当 CloudWatch Logs 检测到策略接近大小限制时，它会自动启用以开头的日志组`/aws/vendedlogs/`。启用查询日志时，适用于 Prometheus 的亚马逊托管服务必须使用您指定的日志组更新 CloudWatch 您的日志资源策略。为避免达到 CloudWatch 日志资源策略大小限制，请在日志 CloudWatch 日志组名称前加上`/aws/vendedlogs/`。