如何使用正则表达式从石墨中获取数据?
Posted
技术标签:
【中文标题】如何使用正则表达式从石墨中获取数据?【英文标题】:How to use regular expression in fetching data from graphite? 【发布时间】:2013-10-27 18:41:04 【问题描述】:我想在一个请求中从石墨的不同计数器中获取数据,例如:-
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 数据,但我不想要。
【问题讨论】:
我认为我们需要查看您为解决此问题编写的代码,以便我们可以将解决方案放入其中,而不是完全从头开始为您编写。照原样,您似乎想匹配/\.module_/
,但除非我们知道更多,否则这并没有多大好处。你能简化/缩短你显示的 URL 吗?事实上,它们浪费了大量的视觉空间,却没有显示出太多的用处。
@theTinMan,问题已更新。
嘿! @theTinMan,你现在能帮忙吗?
@MattSelf 你能帮忙吗?
我没有看到任何代码显示您尝试过的内容。
【参考方案1】:
您不能使用正则表达式本身,但您可以使用 Graphite Render URL API 中提供的一些类似(概念上和格式上)的匹配技术。有几种方法可以在目标的“桶”内“匹配”(即在点之间)。
目标匹配
星号 * 匹配
星号可用于匹配任何零个或多个字符。可用于替换整个桶(site.*.test
)或桶内(site.w*t.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 等等。
值列表(组捕获)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
【讨论】:
是否可以匹配组中的not?以上是关于如何使用正则表达式从石墨中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章