如何使用正则表达式从石墨中获取数据?

时间:2013-10-18 19:42:32

标签: ruby graphite

我想在一个请求中从石墨中获取不同计数器的数据,如: -

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数据,但我不想要。

1 个答案:

答案 0 :(得分:21)

您不能使用正则表达式本身,但您可以使用Graphite Render URL API中可用的一些类似(概念和某种格式)匹配技术。有几种方法可以在目标的“桶”中“匹配”(即在点之间)。

目标匹配

星号*匹配

星号可用于匹配任何 - 零或更多字符。它可用于替换整个存储桶(site.*.test)或存储桶(site.w*t.test)。这是一个例子:

site.testing_server_2.requests_*.count

这会匹配site.testing_server_2.requests_ 失败 .count,site.testing_server_2.requests_ 成功 .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,等等。

值列表(群组捕获){blah,test,...}匹配

值列表匹配可用于匹配目标桶的指定部分中值列表中的任何内容。

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不匹配。

答案

在不知道所有铲斗值的情况下,很难通过该方法进行手术(可能结合了匹配选项),因此我建议您选择值列表匹配。这应该允许您在一个多长的请求中获取所有值。例如(请记住,您需要包含所有值):

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

有关详情,请参阅Graphite Paths and Wildcards