このトピックでは、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'