このトピックでは、メトリックデータのクエリと分析の構文と制限について説明します。
Simple Log Serviceは、メトリックデータのクエリと分析に次の種類の構文をサポートしています。
PromQL: PromQLは、Prometheusが提供するクエリ言語です。 PromQL構文を使用して、メトリックデータのクエリと分析を簡素化できます。 詳細については、「Prometheusドキュメント」をご参照ください。
SQL: SQL構文を使用して、データのエンコード形式に基づいてメトリックデータを照会および分析できます。
SQLとPromQLの組み合わせ: Simple Log Serviceが提供する5つのPromQL関数と一緒にSQL構文を使用して、ネストされたクエリを実行できます。 PromQL構文を使用する場合は、Simple Log Serviceの機械学習構文を使用することもできます。 詳細については、「機械学習の構文」をご参照ください。
PromQL
次の例は、PromQL構文の使用方法を示しています。
メトリック名がhttp_requests_total、jobラベルがapiserver、handlerラベルが /api/commentsである時系列を照会します。
http_requests_total{job="apiserver", handler="/api/comments"}
前の5分間にappとprocでグループ化された上位3人のCPUユーザーを照会します。 アプリはアプリケーションを指定し、procはプロセスタイプを指定します。
topk(3, sum by (app, proc) (rate(instance_cpu_time_ns[5m])))
異常なポッドを照会します。
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ドキュメント」および「クエリ例」をご参照ください。
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の名前を指定します。
説明テーブル名を二重引用符 ("") で囲む必要があります。
element_at() 関数を使用して、__labels__ フィールドからキーの値を取得できます。 例: element_at(__labels __, 'key')
テーブルスキーマの詳細については、「エンコード形式」をご参照ください。
SQLとPromQLの組み合わせ
Simple Log Serviceは、7つのPromQL機能を提供します。 次の関数は、Metricstoreのクエリおよび分析ページでのみ呼び出すことができます。promql_query、promql_labels、promql_label_values、およびpromql_series。 次の表に、関数を示します。
SQLとPromQLの組み合わせを使用する場合、FROM句のテーブル名はmetricsである必要があります。
APIエンドポイントの詳細とPromQL関数の説明については、「Prometheusドキュメント」をご参照ください。
関数 | 説明 | 例 |
promql_query (文字列) | インスタントクエリを評価します。 この関数を呼び出して、特定の時間範囲の終了時刻に最も近いデータを照会できます。 この関数は、Prometheusの /query APIに相当します。 パラメーター設定: query=<string> およびtime=<EndTime> 。 | * | SELECT promql_query('up') FROMメトリック |
promql_query_range (文字列、文字列) | StartTimeパラメーターとEndTimeパラメーターで指定された時間範囲内のデータに対するクエリを評価します。 この関数は、Prometheusの /query_range APIに相当します。 パラメーター設定: query=<string> 、step=<duration> 、start=<StartTime> 、end=<EndTime> 。 | * | SELECT promql_query_range('up' 、'5m') メトリックから |
promql_labels() | すべてのラベルキーを返します。 | * | SELECT promql_labels() FROMメトリック |
promql_labels (文字列) | 特定の条件に一致するラベルキーを返します。 match[] パラメーターを追加して、<series_selector> で一致した時系列からラベルキーを返すことができます。 match[] パラメーターに指定できる条件は1つだけです。 例: promql_labels('up') | * | SELECT promql_labels('up') FROMメトリック |
promql_label_values (文字列) | ラベルの値を返します。 | * | SELECT promql_label_values('__name__') メトリックから |
promql_label_values (文字列、文字列) | 特定の条件に一致するラベル値を返します。 match[] パラメーターを追加して、<series_selector> で一致した時系列から特定のラベルの値を返すことができます。 match[] パラメーターに指定できる条件は1つだけです。 match[] パラメーターの後にlabelパラメーターを指定する必要があります。 例: promql_label_values('up', '__label_name__') | * | SELECT promql_label_values('up', '__label_name__') メトリックから |
promql_series (文字列) | 一致した時系列を返します。 | * | SELECT promql_series('up') からメトリック |
PromQL関数は、ユーザー定義テーブル生成関数 (UDTF) に似ており、テーブルを返します。
次の表に、promql_query(string) またはpromql_query_range(string, string) 関数によって返されるテーブルのスキーマを示します。
項目
データ型
説明
測定値
varchar
時系列のメトリック名。 GROUP BY句がクエリ文に含まれている場合、このフィールドは空になる可能性があります。
labels
map<varchar, varchar>
ラベル。 値はマップです。
time
bigint
時間だ
value
double
特定の時点での値。
クエリの例:
promql_query (文字列) 関数
promql_query_range (文字列、文字列) 関数
次の表に、promql_labels() 、promql_labels(string) 、promql_label_values(string) 、またはpromql_label_values(string, string) 関数によって返されるテーブルのスキーマを示します。
項目
データ型
説明
ラベル
varchar
ラベルキー。
クエリの例:
promql_labels() 関数
promql_labels (文字列) 関数
promql_label_values (文字列) 関数
promql_label_values (文字列、文字列) 関数
次の表に、promql_series(string) 関数によって返されるテーブルのスキーマを示します。
項目
データ型
説明
シリーズ
map<varchar, varchar>
時系列。
クエリの例
制限事項
Metricstoreは、/queryや /query_rangeなど、PrometheusのクエリAPIエンドポイントのみをサポートします。 /admin、/alerts、/rulesなどの他のAPIエンドポイントはサポートされていません。
クエリと分析にPromQL構文またはSQLとPromQLの組み合わせを使用すると、最大11,000時点の値を返すことができます。
クエリと分析にPromQL構文またはSQLとPromQLの組み合わせを使用する場合、指定するメトリック名とラベルは命名規則に準拠している必要があります。 詳細については、「メトリック識別子」をご参照ください。