Amazon Managed Service for Prometheus でのクエリコストの管理
Amazon Managed Service for Prometheus では、1 つのクエリで使用できるクエリサンプル処理 (QSP) の量を制限することにより、クエリコストを制限できます。QSP には、警告とエラーの 2 種類のしきい値を設定して、クエリコストを効果的に管理および制御できます。
クエリが警告しきい値に達すると、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 の使用を最小限に抑えるために、クエリログ記録は無効になっています。この機能は、クエリ分析に必要なときに有効にできます。
クエリログ記録の設定
クエリログ記録は、Amazon Managed Service for Prometheus コンソールで、または create-query-logging-configuration API リクエストを呼び出して AWS CLI で設定できます。この API 本文には送信先のリストが含まれていますが、現時点では、送信先として CloudWatch Logs のみがサポートされており、送信先には CloudWatch 設定で 1 つの要素のみを含める必要があります。
前提条件
logGroup が既に作成されていることを確認します。設定に使用される ID またはロールには、次のポリシーまたは同等のアクセス許可が必要です。
CloudWatch Logs を設定する。
AWS マネジメントコンソール または AWS CLI を使用して、Amazon Managed Service for Prometheus にログインすることにより、CloudWatch Logs を設定できます。
Amazon Managed Service for Prometheus コンソールを使用してクエリログ記録を設定するには
-
ワークスペースの詳細パネルの [ログ] タブに移動します。
-
[クエリインサイト] で、[作成] を選択します。
-
[ロググループ] のドロップダウンを選択し、ログを発行するロググループを選択します。
CloudWatch コンソールで新しいロググループを作成することもできます。
-
[しきい値 (QSP)] を入力します。
-
[保存] を選択します。
AWS CLI を使用してクエリログを設定するには、コマンドを使用します。
aws amp create-query-logging-configuration \ --workspace-idmy_workspace_ID\ --destinations '[{"cloudWatchLogs":{"logGroupArn":"$my-log-group-arn"},"filters":{"qspThreshold":$qspThreshold}}]'
オペレーションを更新、削除、記述する方法については、「Amazon Managed Service for Prometheus API リファレンス」を参照してください。
クエリスロットリングしきい値の設定
QSP しきい値を設定するには、QueryMetrics API でクエリパラメータを指定する必要があります。
-
max_samples_processed_warning_threshold – 処理されたクエリサンプルの警告しきい値を設定します
-
max_samples_processed_error_threshold – 処理されたクエリサンプルのエラーしきい値を設定します
Amazon Managed Grafana ユーザーの場合、grafana データソース設定を使用して、データソースからのすべてのクエリに制限を適用できます。
-
Amazon Managed Grafana の Amazon Managed Service for Prometheus データソースを参照します。
-
[カスタムクエリパラメータ] で、しきい値ヘッダーを追加します。
-
[保存] を選択します。
ログの内容
ルールからのクエリの場合、CloudWatch Logs にクエリに関する次の情報が表示されます。
{ 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 Logs にクエリに関する次の情報が表示されます。
{ 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" }
制限
ポリシーサイズ制限 – CloudWatch Logs リソースポリシーは 5120 文字に制限されています。CloudWatch Logs は、ポリシーがサイズ制限に近づいていることを検出すると、/aws/vendedlogs/ で始まるロググループを自動的に有効にします。ログ記録を有効にする場合、Amazon Managed Service for Prometheus は、指定されたロググループで CloudWatch Logs リソースポリシーを更新する必要があります。CloudWatch Logs リソースポリシーのサイズ制限に達しないようにするには、CloudWatch Logs ロググループ名の先頭に /aws/vendedlogs/ というプレフィックスを付けてください。