Simple Log Service (SLS) は、メトリックデータのクエリと分析に、PromQL、SQL、および SQL と PromQL を組み合わせた構文をサポートしており、それぞれに特定の命名規則とクエリの制限があります。
SLS は、メトリックデータのクエリと分析に 3 つの構文をサポートしています。
-
PromQL 構文: Prometheus のクエリ言語である PromQL は、メトリックデータのクエリを簡素化します。詳細については、「Prometheus ドキュメント」および「PromQL 関数の使用例」をご参照ください。
-
SQL 構文: データのエンコーディング形式に基づいて、SQL を使用してメトリックデータのクエリと分析を行います。
-
SQL と PromQL を組み合わせた構文: SQL と SLS の PromQL 関数を組み合わせて、ネストされたクエリを実行します。PromQL クエリは、SLS の 機械学習構文 もサポートしています。
PromQL または SQL と PromQL を組み合わせた構文を使用する場合、メトリック名とラベルは命名規則に従う必要があります。詳細については、「メトリック識別子」をご参照ください。
PromQL 構文
PromQL の例:
-
メトリック名が http_requests_total、job ラベルが apiserver、handler ラベルが /api/comments の時系列をクエリします。
http_requests_total{job="apiserver", handler="/api/comments"} -
過去 5 分間で、app と proc でグループ化された CPU 使用率の上位 3 つをクエリします。app はアプリケーションを、proc はプロセスタイプを表します。
topk(3, sum by (app, proc) (rate(instance_cpu_time_ns[5m]))) -
異常な状態の Pod をクエリします。
min_over_time(sum by (namespace, pod) (kube_pod_status_phase{phase=~"Pending|Unknown|Failed"})[15m:1m]) > 0 -
Kubernetes DaemonSets の CPU 使用率の合計をクエリします。
sum (rate (container_cpu_usage_seconds_total{pod=~"^x.*$",cluster=~".*",namespace=~".*"}[1m])) / sum (kube_pod_container_resource_limits_cpu_cores{pod=~"^null.*$",cluster=~".*",namespace=~".*"}) * 100
PromQL 構文の詳細については、「Prometheus ドキュメント」、「クエリの例」、および「PromQL のユースケース」をご参照ください。
SQL 構文
SQL の例。詳細については、「SQL の使用例」をご参照ください。
-
すべてのデータをクエリして分析します。
*| SELECT * FROM "my_metric_store.prom" WHERE __name__ != '' -
http_request_count メトリックについて、__labels__ フィールドの domain 値が www.example.com のデータをクエリし、__value__ フィールドの値の合計を取得します。
*| SELECT sum(__value__) FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' -
http_request_count メトリックについて、__labels__ フィールドの domain 値が www.example.com のデータをクエリし、__value__ フィールドの値を時間ごとに集計して合計を取得します。
*| SELECT sum(__value__),date_trunc('hour', __time_nano__/1000000) as t FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' GROUP BY t ORDER BY t DESC
SQL 構文の詳細:
-
メトリックデータの SQL 構文は、ログデータの SQL 構文 (分析構文) と一致します。SQL を使用してメトリックデータをクエリする場合、FROM 句のテーブル名は {metrics_store_name}.prom の形式である必要があります。{metrics_store_name} は、作成した Metricstore の名前を指定します。
説明テーブル名は二重引用符 ("") で囲んでください。
-
__labels__ フィールドからキーの値を取得するには、element_at() 関数を使用します。例: element_at(__labels__, 'key')
-
テーブルスキーマの詳細については、「エンコーディング形式」をご参照ください。
SQL と PromQL を組み合わせた構文
SLS は 7 つの PromQL 関数を提供しています。promql_query、promql_labels、promql_label_values、および promql_series 関数は、Metricstore のカスタムクエリと分析ページでのみ呼び出すことができます。
-
SQL と PromQL を組み合わせる場合、FROM 句のテーブル名は metrics である必要があります。
-
PromQL 関数の API エンドポイントと説明: Prometheus ドキュメント
|
関数名 |
説明 |
例 |
|
promql_query(string) |
時間範囲の EndTime でインスタントクエリを評価します。Prometheus の /query API に相当します。パラメータ設定: query=<string> |
*| SELECT promql_query('up') FROM metrics |
|
promql_query_range(string, string) |
StartTime から EndTime までの時間範囲内でクエリを評価します。Prometheus の /query_range API に相当します。パラメータ設定: query=<string> および step=<duration> |
*| SELECT promql_query_range('up', '5m') FROM metrics |
|
promql_labels() |
すべてのラベルキーを返します。 この関数はデフォルトで、[<EndTime> - 5m, <EndTime>] の時間範囲内のデータのみを返します。 |
*| SELECT promql_labels() FROM metrics |
|
promql_labels(string) |
match[] パラメータをサポートし、<シリーズセレクター> に一致するラベルキーを返します。 match[] に指定できる値は 1 つのみです。例: この関数はデフォルトで、[<EndTime> - 5m, <EndTime>] の時間範囲内のデータのみを返します。 |
*| SELECT promql_labels('up') FROM metrics |
|
promql_label_values(string) |
ラベルの値を返します。 この関数はデフォルトで、[<EndTime> - 5m, <EndTime>] の時間範囲内のデータのみを返します。 |
*| SELECT promql_label_values('__name__') FROM metrics |
|
promql_label_values(string, string) |
match[] パラメータをサポートし、<シリーズセレクター> に一致するラベルの値を返します。 match[] に指定できる値は 1 つのみで、Label パラメータの前に配置する必要があります。例: この関数はデフォルトで、[<EndTime> - 5m, <EndTime>] の時間範囲内のデータのみを返します。 |
*| SELECT promql_label_values('up', '__label_name__') FROM metrics |
|
promql_series(string) |
一致する時系列を返します。 この関数はデフォルトで、[<EndTime> - 5m, <EndTime>] の時間範囲内のデータのみを返します。 |
*| SELECT promql_series('up') FROM metrics |
各 PromQL 関数は、ユーザー定義テーブル値関数 (UDTF) と同様に、テーブルを返します。
-
promql_query(string) および promql_query_range(string, string) が返すテーブルスキーマ:
フィールド
フィールドタイプ
説明
metric
varchar
メトリック名。クエリに GROUP BY 句が含まれている場合は空になる場合があります。
labels
map<varchar, varchar>
キーと値のマップとしてのラベル。
time
bigint
時刻。
value
double
特定の時点での値。
クエリの例:
-
promql_query(string) 関数
クエリエディタに
*| select promql_query('up') from metricsを入力し、[検索 & 分析] をクリックします。クエリ結果として、time、metric、labels、value の 4 つの列を持つテーブルが返され、各インスタンスの up メトリック値が表示されます。 -
promql_query_range(string, string) 関数
SQL ステートメント
select promql_query_range('up', '30s') from metricsを実行して、PromQL メトリックupの範囲データを step30sでクエリします。クエリ結果は、時系列データを示すテーブルとして表示されます。
-
-
promql_labels()、promql_labels(string)、promql_label_values(string)、および promql_label_values(string, string) が返すテーブルスキーマ:
フィールド
フィールドタイプ
説明
label
varchar
ラベルキー
クエリの例:
-
promql_labels() 関数
*| select promql_labels() from metrics。クエリ結果として label 列が返され、code、instance、job、le、method の 5 つのラベル名が含まれます。 -
promql_labels(string) 関数
たとえば、クエリ
*| select promql_labels('up') from metricsを実行して、upメトリックのすべてのラベル名をクエリします。結果には__name__、instance、およびjobが含まれます。 -
promql_label_values(string) 関数
たとえば、クエリ
*| select promql_label_values('instance') from metricsを実行します。クエリ結果の label 列には、demo.promlabs.com:10000、demo.promlabs.com:10001、demo.promlabs.com:10002 の 3 つのインスタンスアドレスが返されます。 -
promql_label_values(string, string) 関数
クエリの例:
*| select promql_label_values('up{demo!="a"}','instance') from metrics。クエリ結果は、demo.promlabs.com:10000、demo.promlabs.com:10001、demo.promlabs.com:10002 の 3 行を含む label 列を返します。
-
-
promql_series(string) が返すテーブルスキーマ:
フィールド
フィールドタイプ
説明
series
map<varchar, varchar>
時系列。
クエリの例:
たとえば、クエリ
*| select promql_series('up') from metricsを実行します。結果の series 列には、demo.promlabs.com:10001、demo.promlabs.com:10000、demo.promlabs.com:10002 に対応する 3 行が含まれます。各行は、instance、__name__(値: up)、および job (値: demo) フィールドを含むマップです。
制限
-
Metricstore は、Prometheus クエリ API エンドポイント (/query および /query_range) のみをサポートします。/admin、/alerts、/rules などの他のエンドポイントはサポートされていません。
-
PromQL および SQL と PromQL を組み合わせたクエリは、最大 11,000 個のデータポイントの値を返します。