web-dev-qa-db-ja.com

プロメテウス:メトリック名によるメトリックのグループ化

アプリのすべてのメトリックをメトリック名でグループ化する方法はありますか?アプリのすべてのメトリックをリストするクエリの一部(つまり、{app="bar"}):

ch_qos_logback_core_Appender_all_total{affiliation="foo",app="bar", instance="baz-3-dasp",job="kubernetes-service-endpoints",kubernetes_name="bar",kubernetes_namespace="foobarz",kubernetes_node="mypaas-dev-node3.fud.com",updatedBy="janedoe"}   44
ch_qos_logback_core_Appender_debug_total{affiliation="foo",app="bar", instance="baz-3-dasp",job="kubernetes-service-endpoints",kubernetes_name="bar",kubernetes_namespace="foobarz",kubernetes_node="mypaas-dev-node23.fud.com",updatedBy="deppba"} 32

また、メトリック名にワイルドカードを使用しようとしましたが、プロメテウスはそれについて不満を言っています。メトリックを見ると、そのうちのいくつかが動的な名前を持っていることがわかります。ほとんどの場合、ドロップウィザードのメトリックによって配信されます。最終的に欲しいのは、利用可能なすべてのメトリックのリストです。

12
naimdjon

@ brian-brazilの答えからヒントを得て、解決策を見つけました。次のクエリは、利用可能なすべてのメトリックをリストします。

sum by(__name__)({app="bar"})

ここで、barはアプリケーション名です。質問に投稿されたログエントリで確認できます。

10
naimdjon

{__name__=~".+"}は、すべての古くない時系列を返しますが、これは高価なクエリであり、通常は避ける必要があります。

8
brian-brazil

直接使用する

{__name__=~".+"}

successを返しますが、他には何も返しません(大きすぎます)。

または

{__name__=~".*"}

一方、予想どおりerrorを代わりに提供します。

parse error at char 17: vector selector must contain at least one non-empty matcher

ここでの私のトリックは、brian-brazilとnaimdjonのソリューションを、

sum({__name__=~"c.*|e.*|n.*|p.*|r.*|k.*|z.*|r.*"}) by (__name__)
  1. 可能なprefixesを知っているので、それらをクエリに追加して、少なくとも何かを返すようにします。そしてさらに、

  2. 無駄なフィールドが返される(プロメテウスを圧迫する)のを避けるために、__name__をこのように必要とするのはby(__name__)で、必要なメトリックのすべての名前が期待どおりに返されます。

実際には、使用可能なすべてのメトリック名を取得するAPIがあります。

/api/v1/label/__name__/values
3
Hearen