

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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에 경고가 표시되므로 사용자가 비용이 많이 드는 쿼리를 식별하는 데 도움이 됩니다. *오류* 임계값에 도달한 쿼리는 요금이 부과되지 않으며 오류와 함께 거부됩니다.

Amazon Managed Service for Prometheus는 쿼리 스로틀링 외에도 쿼리 성능 데이터를 CloudWatch Logs에 로깅하는 기능을 제공합니다. 이 기능을 통해 쿼리를 상세하게 분석할 수 있어 Amazon Managed Service for Prometheus 쿼리를 최적화하고 비용을 보다 효과적으로 관리하는 데 도움이 됩니다. 쿼리 로깅은 지정된 쿼리 샘플 처리량(QSP) 임계값을 초과하는 쿼리에 대한 정보를 캡처합니다. 이 데이터는 CloudWatch Logs에 게시되므로 쿼리 성능을 조사하고 분석할 수 있습니다. 로깅되는 쿼리에는 API 쿼리와 규칙 쿼리가 모두 포함됩니다. 불필요한 CloudWatch Logs 사용을 최소화하기 위해 기본적으로 쿼리 로깅은 비활성화되어 있습니다. 쿼리 분석에 필요한 경우 이 기능을 활성화할 수 있습니다.

**Topics**
+ [쿼리 로깅 구성](#query-logging)
+ [쿼리 스로틀링 임계값 구성](#query-throttling-thresholds)
+ [로그 내용](#log-content)
+ [제한 사항](#limitations)

## 쿼리 로깅 구성
<a name="query-logging"></a>

`create-query-logging-configuration `API 요청을 호출하여 Amazon Managed Service for Prometheus 콘솔 또는 AWS CLI에서 쿼리 로깅을 구성할 수 있습니다. 이 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 Logs 구성
<a name="configure-cloudwatch-logs"></a>

 AWS Management Console 또는를 사용하여 Amazon Managed Service for Prometheus에 로그인하여 CloudWatch Logs를 구성할 수 있습니다 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\$1samples\$1processed\$1warning\$1threshold – 처리된 쿼리 샘플에 대해 경고 임계값을 설정합니다.
+ max\$1samples\$1processed\$1error\$1threshold – 처리된 쿼리 샘플에 대해 오류 임계값을 설정합니다.

Amazon Managed Grafana 사용자의 경우 grafana 데이터 소스 구성을 사용하여 데이터 소스의 모든 쿼리에 제한을 적용할 수 있습니다.

1. Amazon Managed Grafana에서 Amazon Managed Service for Prometheus 데이터 소스 구성으로 이동합니다.

1. **사용자 지정 쿼리 파라미터**에서 임계값 헤더를 추가합니다.

1. **저장**을 선택합니다.

## 로그 내용
<a name="log-content"></a>

규칙에서 발생한 쿼리의 경우, CloudWatch Log에서 해당 쿼리에 대한 다음 정보를 확인할 수 있습니다.

```
{
    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 Log에서 해당 쿼리에 대한 다음 정보를 확인할 수 있습니다.

```
{
    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 Logs 리소스 정책은 5,120자로 제한됩니다. CloudWatch Logs에서 정책이 이 크기 제한에 도달하는 것을 감지하면 `/aws/vendedlogs/`로 시작하는 로그 그룹을 자동으로 활성화합니다. 쿼리 로깅을 활성화할 때 Amazon Managed Service for Prometheus는 지정된 로그 그룹으로 CloudWatch Logs 리소스 정책을 업데이트해야 합니다. CloudWatch Logs 리소스 정책 크기 한도에 도달하지 않도록 CloudWatch Logs 로그 그룹 이름에 접두사 `/aws/vendedlogs/`를 추가합니다.