すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:PromQL と SQL クエリによる Metricstore の一般的なケース

最終更新日:Mar 28, 2025

このトピックでは、PromQL または SQL を使用してメトリックストアをクエリする一般的なシナリオについて説明します。

PromQL のユースケース

単一メトリックデータのクエリ

process_resident_memory_bytes は常駐メモリを表します。次の PromQL を使用して、さまざまな時点のプロセス メトリック データを表示します。

process_resident_memory_bytes

ラベルによるメトリックデータのフィルタリング

PromQL ステートメントでは、メトリックの後に特定のラベルのフィルタリング条件を指定して、メトリックデータを絞り込むことができます。たとえば、次のクエリは、特定のクラスターのデータをフィルタリングします。

process_resident_memory_bytes{cluster="sls-mall"}/1024/1024

ラベルフィルタリングに正規表現を使用する

ラベルのフィルタリング条件では、正規表現構文がサポートされています。たとえば、次のクエリは、クラスターが sls-mall または sls-demo であるメトリックデータをフィルタリングします。

process_resident_memory_bytes{cluster=~"sls-mall|sls-demo"}

メトリックの最大値を計算する

max 演算子を使用して、各クラスターのヒープメモリ使用量の最大値をクエリします。

max by (cluster) (go_memstats_heap_inuse_bytes) / 1024 / 1024

メトリックの時系列数を計算する

count 演算子を使用して、特定のメトリックの時系列数をクエリします。

count(apiserver_request_total{cluster="sls-mall"})

一定期間におけるメトリックの変化率を計算する

rate 関数は、一定期間内のメトリックの変化率を計算するために使用され、一般的に CPU 使用率の計算に使用されます。

rate(process_cpu_seconds_total[1m])

n 分前のメトリックとの差を計算する

たとえば、各瞬間におけるメトリックの値の変化を 1 分前の値と比較してクエリします。

delta(go_goroutines[1m])

複数の演算子と関数のネスト使用

複数の演算子と関数をネストしたクエリで使用できます。次の例では、まず各リソースとクラスターの最大値を計算し、次に上位 3 つの値を取得します。

topk(3, max by (cluster, resource)(apiserver_request_total))

複数の値間の計算

PromQL は、+-*/% などの純粋な値間の計算をサポートしています。

1 + 2

メトリックと値の間の計算

PromQL は、メトリックと値の間の計算をサポートしています。たとえば、次のクエリは、メモリ メトリックのバイト単位を MB に変換します。

process_resident_memory_bytes / 1024 / 1024

複数のメトリック間の二項演算

PromQL は、次の 2 つのメトリックを除算するなど、複数のメトリック間の計算をサポートしています。

kube_daemonset_status_number_ready{job="kube-state-metrics"} 
/ 
kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"}

サブクエリの正しい使用方法

rate、delta、increase、{agg}_over_time などの関数は、元のメトリックに対してのみ動作し、演算子または関数の結果の計算はサポートしていません。次に例を示します。

  • サポートされている:

    max_over_time(go_goroutines[1m]) # 各時系列の過去 1 分間の最大値を計算します。
  • サポートされていない:

    max_over_time(max(go_goroutines)[1m]) # まず時系列間の最大値を計算し、次に過去 1 分間の最大値を選択します。
  • 正しい使用方法:

    # Prometheus は、サブクエリを通じてこれらの要件をサポートしています。PromQL ステートメントは、次の形式に変更する必要があります。
    max_over_time(max(go_goroutines)[1m:10s])
    # サブクエリでは、[a:b] の 2 つのパラメーターは、それぞれ範囲とステップを表します。

SQL のユースケース

メトリック下のすべての生データをクエリする

指定された時間範囲内の process_resident_memory_bytes メトリックのすべての生時系列データをクエリします。(デモ)

 *| SELECT * FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes'

メトリックの特定のインスタンス値を持つ生データをクエリする

指定されたメトリックが process_resident_memory_bytes で、インスタンスが 172.20.0.143:8084 であるすべてのメトリックデータをクエリします。(デモ)

*| SELECT * FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes' and element_at(__labels__, 'instance')='172.20.0.143:8084' limit all

スケジュールされた SQL ジョブを作成して時系列データを集計する

時間を毎分に合わせて MAX 集計計算を行い、異なるインスタンスにおけるメトリックの最大値を計算します。(デモ)

*| SELECT __time_nano__ FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes' and element_at(__labels__, 'instance')='x-abcd'