Techioz Blog

グラファイトからデータを取得する際に正規表現を使用するにはどうすればよいですか?

概要

次のような 1 つのリクエストで、グラファイトのさまざまなカウンターからデータをフェッチしたいと考えています。

summarize(site.testing_server_2.triggers_unknown.count,'1hour','sum')&format=json

summarize(site.testing_server_2.requests_failed.count,'1hour','sum')&format=json

summarize(site.testing_server_2.core_network_bad_soap.count,'1hour','sum')&format=json

などなど…あと20個。

でも取りたくない

summarize(site.testing_server_2.module_xyz_abc.count,'1hour','sum')&format=json

そのリクエストではどうすればよいでしょうか?

これが私が試したことです:

summarize(site.testing_server_2.*.count,'1hour','sum')&format=json&from=-24hour

「module_xyz_abc」のjsonデータも取得しますが、これは望ましくありません。

解決策

正規表現自体を使用することはできませんが、Graphite Render URL API 内で利用できる類似した (概念上および形式的にはある程度の) マッチング手法を使用できます。ターゲットの「バケット」内 (つまり、ドット間) で「一致」させる方法はいくつかあります。

アスタリスク * 一致

アスタリスクは、任意の 0 個以上の文字と一致するために使用できます。これを使用して、バケット全体 (site..test) またはバケット内 (site.wt.test) を置き換えることができます。以下に例を示します。

site.testing_server_2.requests_*.count

これは、site.testing_server_2.requests_failed.count、site.testing_server_2.requests_success.count、site.testing_server_2.requests_blah123.count などと一致します。

文字範囲 [a-z0-9] 一致

文字範囲一致は、ターゲットのバケット内の単一文字 (site.w[0-9]t.test) と一致するために使用され、範囲またはリストとして指定されます。例えば:

site.testing_server_[0-4].requests_failed.count

これは、site.testing_server_0.requests_failed.count、site.testing_server_1.requests_failed.count、site.testing_server_2.requests_failed.count などに一致します。

値リスト (グループ キャプチャ) {まあ、テスト、…} 一致

値リストの一致を使用すると、ターゲットのバケットの指定された部分にある値のリスト内のあらゆるものと一致することができます。

site.testing_server_2.{triggers_unknown,requests_failed,core_network_bad_soap}.count

これは、site.testing_server_2.triggers_unknown.count、site.testing_server_2.requests_failed.count、および site.testing_server_2.core_network_bad_soap.count と一致します。しかし他には何もないので、site.testing_server_2.module_xyz_abc.count は一致しません。

バケットの値をすべて把握していないと、このアプローチ (おそらく照合オプションの組み合わせによる) をうまく行うのは難しいため、値リストの照合のみを使用することをお勧めします。これにより、1 つの (やや長い) リクエストですべての値を取得できるようになります。たとえば、次のとおりです (すべての値を含める必要があることに注意してください)。

summarize(site.testing_server_2.{triggers_unknown,requests_failed,core_network_bad_soap}.count,'1hour','sum')&format=json&from=-24hour

詳細については、「グラファイト パスとワイルドカード」を参照してください。