0

首先:是的,我知道尝试纯粹使用正则表达式来完成此操作是愚蠢的,但我需要在本质上是 Python 正则表达式的 Carbon Rewrite Rules 的上下文中执行此操作,例如:

^collectd\.([a-z0-9]+)\. = \1.system.

我正在尝试将我们的监控系统从基于 Nagios 的系统迁移到基于 Collectd 的系统。但是,collectd 的write_graphite插件是硬编码的,以生成命名的指标$prefix.host_example_com.$metric,我们现有的指标存储为$prefix.com.example.host.$metric.

注意:主机名没有固定数量的部分,它们可能是bar.foobaz.bar.foobif.baz.bar.foo等。

所以基本上它似乎可以归结为在一个re.sub()电话中完成这个。

到目前为止,我有:

metric  = 'collectd.foo_bar_baz.some.metric'
pattern = r'^collectd\.(?:([^_.]+)_?)+(.*)$'
print re.sub(pattern, metric, r'\1 \2')

哪个输出:baz .some.metric我什至无法让它重复捕获组,更不用说如何反转和加入任意数量的反向引用了。

这样的事情甚至可能在一次re.sub()通话中发生,还是我应该让自己接受一个非常命名/组织化的指标和充满通配符的查询的命运?

4

0 回答 0