ベクトルのマッチング - Prometheusドキュメント

このページはPrometheus公式ドキュメント和訳+αの一部です。

Vector matching

1対1マッチング

1対1マッチングでは、演算子の両辺からユニークなペアを取得する。 これは、vector1 <operator> vector2と書いた時のデフォルトの動作で、2つのエントリがマッチングされるのは、完全に同じラベル集合およびその値を持つ場合である。 これに対して、ignoringキーワードによって、マッチングする時に特定のラベルを無視することができる。 また、onキーワードによって、考慮するラベルを減らすことができる。

<vector expr> <bin-op> ignoring(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) <vector expr>

入力例:

method_code:http_errors:rate5m{method="get", code="500"}  24
method_code:http_errors:rate5m{method="get", code="404"}  30
method_code:http_errors:rate5m{method="put", code="501"}  3
method_code:http_errors:rate5m{method="post", code="500"} 6
method_code:http_errors:rate5m{method="post", code="404"} 21

method:http_requests:rate5m{method="get"}  600
method:http_requests:rate5m{method="del"}  34
method:http_requests:rate5m{method="post"} 120

クエリ例:

method_code:http_errors:rate5m{code="500"} / ignoring(code) method:http_requests:rate5m

直近5分間における各メソッドに対するステータスが500となったHTTPリクエストの割合が返される。

{method="get"}  0.04            //  24 / 600
{method="post"} 0.05            //   6 / 120

仮にignoring(code)を付けないと、ラベル集合が完全に同じメトリクスはなくなってしまう。また、putdelメソッドは、マッチするものがないので結果には含まれない。

N対1/1対Nマッチング

片側の要素を逆側の複数の要素とマッチングさせるには、明示的にグループ修飾子(group_leftまたはgroup_right)を利用する必要がある。これらによって、左右どちらを複数要素にマッチングさせるかが決まる。

<vector expr> <bin-op> ignoring(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> ignoring(<label list>) group_right(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_right(<label list>) <vector expr>

グループ修飾子に与えられるlabel listは、結果のメトリクスに含まれるべきラベルが含まれる。 onを使う場合、ラベルはどちらか一方のlabel listにのみ含むことができる。 結果のベクトルに含まれる各時系列は、ユニークに特定されなければならない。

グループ修飾子が使えるのは、比較と算術だけである。andおよびunlessor演算子は、デフォルトでは、右辺のvectorの全ての可能な要素にマッチする。

クエリ例:

method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m

この例では左辺のベクトルには、methodラベルの一つの値に対して複数のエントリーがあるので、group_leftを使う。 右辺の要素は、同じmethodラベルの値を持つ左辺の要素にマッチングされる。

{method="get", code="500"}  0.04            //  24 / 600
{method="get", code="404"}  0.05            //  30 / 600
{method="post", code="500"} 0.05            //   6 / 120
{method="post", code="404"} 0.175           //  21 / 120

N対1/1対Nマッチングは高度なユースケースであり、慎重に使うべきである。多くの場合、ignoring(<labels>)で所望の結果が得られる。

参考リンク

和訳活動の支援

Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。

PayPayによる支援用QRコード
上のQRコードからPayPayによる支援

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム