このトピックでは、TSDB for Prometheus でサポートされているラベル演算子と集計演算について説明します。
PromQL
Prometheus Query Language(PromQL)は、Prometheus が提供する関数型クエリ言語です。 PromQL を使用すると、時系列データを実時間で選択および集計できます。 PromQL の詳細については、Prometheus の公式ウェブサイトにある「PromQL ドキュメント」をご参照ください。
TSDB for Prometheus は、リモートストレージアダプター用の組み込みインターフェースを提供します。 組み込みインターフェースは、Prometheus のクエリ機能と互換性があります。
サポートされているラベル演算子
TSDB for Prometheus は、=
、!=
、=~
、!~
の 4 つのラベル演算子をサポートしています。 次のコードは、サンプルクエリを示しています。
node__cpu__seconds__total{cpu="1",mode="user"}
node__cpu__seconds__total{cpu!="1",mode="user"}
node__cpu__seconds__total{cpu=~"1",mode="user"}
node__cpu__seconds__total{cpu=~"1|2|3",mode="user"}
node__cpu__seconds__total{cpu!~"1",mode="user"}
node__cpu__seconds__total{cpu!~"1|2|3",mode="user"}
=~
演算子の場合、TSDB for Prometheus は、PromQL クエリでの値のマッチングのための正規表現で、縦棒(|
)とアスタリスク(*
)のみをサポートしています。 !~
演算子の場合、縦棒(|
)のみがサポートされており、アスタリスク(*
)はサポートされていません。 次のコードは、サンプルクエリを示しています。
node__cpu__seconds__total{mode=~"user|sys"} // サポートされています
node__cpu__seconds__total{mode=~"use*"} // サポートされています
node__cpu__seconds__total{mode=~"user.+"} // サポートされていません
node__cpu__seconds__total{mode!~"user|sys"} // サポートされています
node__cpu__seconds__total{mode!~"use*"} // サポートされていません
node__cpu__seconds__total{mode!~"user.+"} // サポートされていません
PromQL 正規表現クエリのその他の機能は、TSDB for Prometheus チームによって開発中です。 これらの機能は、将来のバージョンで提供される予定です。
サポートされている集計演算
TSDB for Prometheus は、min、max、avg、stddev、stdvar、count、topk、bottomk、quantile、count_values など、幅広い集計演算をサポートしています。 次のコードは、サンプルクエリを示しています。
min (node__cpu__seconds__total)
max (node__cpu__seconds__total)
avg (node__cpu__seconds__total)
stddev (node__cpu__seconds__total)
stdvar (node__cpu__seconds__total)
count (node__cpu__seconds__total)
topk (1,node__cpu__seconds__total)
bottomk (1,node__cpu__seconds__total)
quantile(1,node__cpu__seconds__total)
count_values("count", node__cpu__seconds__total)
注
Prometheus でサポートされている文字は、Time Series Database(TSDB)でサポートされている文字とは異なります。 次の表に、違いを示します。
Prometheus | TSDB | |
---|---|---|
メトリック |
| 英字、数字、および次の特殊文字のみが含まれます: |
タグキー |
| 英字、数字、および次の特殊文字のみが含まれます: |
タグ値 | Unicode 文字をサポートしています。 | 英字、数字、および次の特殊文字のみが含まれます: |
前述の違いにより、Prometheus を使用してデータが書き込まれる場合は、Prometheus を使用してデータをクエリすることをお勧めします。 TSDB のネイティブ API を使用してデータをクエリすると、返されるタグ値に文字化けが含まれる場合があります。
TSDB は、タグ値でサポートされていない文字をエンコードおよびデコードするときに、番号記号(
#
)を識別子として使用します。 Prometheus を使用して TSDB に書き込まれるタグ値に番号記号(#
)を指定しないことをお勧めします。TSDB のネイティブ API を使用して Prometheus によって書き込まれたデータを読み取る前に、Prometheus によって書き込まれたタグ値に TSDB でサポートされている文字のみが含まれていることを確認してください。 Prometheus を使用して TSDB のネイティブ API によって書き込まれたデータを読み取る前に、TSDB のネイティブ API によって書き込まれたメトリックとタグキーに Prometheus でサポートされている文字のみが含まれていることを確認してください。