View a markdown version of this page

PromQL クエリ - Amazon CloudWatch

PromQL クエリ

OpenTelemetry Protocol (OTLP) 経由で OpenTelemetry メトリクスを CloudWatch に取り込むと、階層 OTLP データモデルは PromQL 互換ラベルにフラット化されます。このセクションでは、ラベル構造、これらのラベルをクエリするための PromQL 構文、および PromQL での UTF-8 サポートについて説明します。

注記

Prometheus 3 の PromQL は、メトリクス名とラベル名で完全な UTF-8 文字をサポートしています。OpenTelemetry セマンティック規則は service.name などの属性名にドットを使用するため、これは OTLP メトリクスにとって特に重要です。以前は、これらのドットは翻訳中にアンダースコアに置き換えられ、OTel 規則で定義されているものと Prometheus でクエリ可能なものとに不一致が生じていました。

CloudWatch で PromQL を使用する場合、@ プレフィックス規則は OTLP スコープラベルと標準の Prometheus ラベルを区別します。各スコープ内のフィールドは二重 @ プレフィックス (@resource.@schema_url など) を使用し、属性は @resource.service.name などの単一 @ スコーププレフィックスを使用します。データポイント属性は、標準の PromQL クエリとの下位互換性のためにベア (プレフィックスなし) アクセスもサポートしているので、例えば {"http.server.active_requests"}{"@datapoint.@name"="http.server.active_requests"} は同等です。

PromQL 式は中括弧で囲まれ、メトリクス名とオプションのラベルマッチャーのセットを指定します。次の例では、http.server.active_requests メトリクスのすべての時系列を選択します。

{"http.server.active_requests"}

次の例では、OpenTelemetry リソース属性 http.server.active_requestsservice.name に等しいメトリクス myservice のすべての時系列を選択します。

{"http.server.active_requests", "@resource.service.name"="myservice"}

1 つのクエリで複数のラベルマッチャーを組み合わせることができます。次の例では、OpenTelemetry リソース属性 service.name がすべての米国リージョンで myservice に等しい http.server.active_requests メトリクスのすべての時系列を選択します。

{"http.server.active_requests", "@resource.service.name"="myservice", "@aws.region"=~"us-.*"}

以下に、範囲クエリの例を示します。各時系列の指定された時間範囲内のすべてのデータポイントの平均値を計算します。

avg_over_time( {"http.server.active_requests", "@resource.service.name"="myservice"}[5m] )

次の表は、各 OTLP スコープのプレフィックス規則をまとめたものです:

OTLP スコープ フィールドプレフィックス 属性プレフィックス

リソース

@resource.@

@resource.

@resource.service.name="myservice"

計装スコープ

@instrumentation.@

@instrumentation.

@instrumentation.@name="otel-go/metrics"

データポイント

@datapoint.@

@datapoint. またはベア

cpu="cpu0"、または @datapoint.cpu="cpu0"

AWS 予約済み

該当なし

@aws.

@aws.account_id="123456789"

PromQL を使用した提供された AWS メトリクスのクエリ

PromQL で提供された AWS メトリクスをクエリできるようにするには、まず提供されたメトリクスの OTel エンリッチメントを有効にする必要があります。以下を参照してください: PromQL で提供されたメトリクスを有効にする

OTel エンリッチメントを有効にすると、提供された AWS メトリクスは、ラベルが追加されて PromQL 経由でクエリ可能になります。メトリクス名は元の CloudWatch メトリクス名と同じで、元の CloudWatch ディメンションはデータポイント属性として使用できます。次のラベルを使用できます (以下の例は EC2 インスタンス用です)。

PromQL ラベル 説明

InstanceId

データポイント属性としての元の CloudWatch ディメンション

i-0123456789abcdef0

"@resource.cloud.resource_id"

リソースの完全な ARN

arn:aws:ec2:us-east-1:123456789012:instance/i-0123456789abcdef0

"@resource.cloud.provider"

クラウドプロバイダー

aws

"@resource.cloud.region"

このメトリクスが発生した AWS リージョン

us-east-1

"@resource.cloud.account.id"

このメトリクスが発生した AWS アカウント ID

123456789012

"@instrumentation.@name"

ソースサービスを識別する計装スコープ名

cloudwatch.aws/ec2

"@instrumentation.cloudwatch.source"

ソースサービス識別子

aws.ec2

"@instrumentation.cloudwatch.solution"

エンリッチメントソリューション識別子

CloudWatchOTelEnrichment

"@aws.tag.Environment"

AWS リソースタグ

production

"@aws.account"

このメトリクスが取り込まれた AWS アカウント (システムラベル)

123456789012

"@aws.region"

このメトリクスが取り込まれた AWS リージョン (システムラベル)

us-east-1

次の例では、特定の Lambda 関数の Invocations を選択します。

histogram_sum({Invocations, FunctionName="my-api-handler"})

次の例では、特定のチームでタグ付けされたすべての関数の Lambda Errors を選択します。

histogram_sum( {Errors, "@instrumentation.@name"="cloudwatch.aws/lambda", "@aws.tag.Team"="backend"} )

次の例では、チーム別にグループ化された Lambda Invocations の合計を計算します。

sum by ("@aws.tag.Team")( {Invocations, "@instrumentation.@name"="cloudwatch.aws/lambda"} )

次の例では、EC2 CPUUtilization メトリクスのすべての時系列を選択します。"@instrumentation.@name"="cloudwatch.aws/ec2" の使用法は、Amazon Relational Database Service などの他の AWS のサービスではなく、EC2 からの CPUUtilization と排他的に一致させることです。

histogram_avg({CPUUtilization, "@instrumentation.@name"="cloudwatch.aws/ec2"})