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

pbossiut  于 4个月前  发布在  Ruby
关注(0)|答案(2)|浏览(40)

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

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

vcirk6k6

vcirk6k61#

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

目标匹配

星号 * 相符

星号可用于比对ANY(零或多个)字符。它可用于取代整个储存区(site.*.test)或储存区(site.w*t.test)内的字符。以下是一个范例:

site.testing_server_2.requests_*.count

字符串
这将匹配站点.测试服务器2.请求_* 失败 .计数,站点.测试服务器2.请求_ 成功 .计数,站点.测试服务器2.请求_ blah 123 *.计数等.

字符范围[a-z 0 -9]匹配

字符范围匹配用于匹配目标存储桶中的单个字符(site.w[0-9]t.test),并指定为范围或列表。例如:

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


这将在以下站点上匹配:站点.测试服务器0.请求失败.计数,站点.测试服务器1.请求失败.计数,站点.测试服务器2.请求失败.计数,等等.

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

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

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


这将匹配站点.testing_server_2.triggers_unknown.count,站点.testing_server_2.requests_failed.count与站点.testing_server_2.core_network_bad_soap.count,但除此之外别无其他内容,因此站点.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路径和通配符

rxztt3cl

rxztt3cl2#

这篇文章可能有点晚,但我想说,使用{}的答案可以通过()和|运算符**,因为后者是兼容性更广的正则表达式。
因此,不使用
{triggers_unknown,requests_failed,core_network_bad_soap}
尝试
(triggers_unknown|requests_failed|core_network_bad_soap)

使用后一种方法,我们可以使用aliasSub等命令**捕获()**内的值,并且它与正则表达式概念具有广泛的兼容性。

相关问题