【问题标题】:Domain Regex for PrometheusePrometheus 的域正则表达式
【发布时间】:2021-05-20 21:15:29
【问题描述】:
我正在尝试编写一个正则表达式,它将忽略前两个八位字节“name.name-name.presto.worker”,但会匹配其余的“presto.worker”。
我有两个不同的域名,其结构与上面显示的相同,我需要监控系统使用最后两个八位字节 presto.worker 来捕获这两个域。
我发现几乎可以使用的最后一个正则表达式是:
count(up{instance="/[A-Za-z.]+[A-Za-z.-]+(presto.)+(worker)/g"})
用于 Prometheuse 监控系统。
谢谢您的帮助
亚尼夫
【问题讨论】:
标签:
regex
wildcard
wildcard-subdomain
【解决方案1】:
我不确定您要忽略前两个八位字节是什么意思。如果您对匹配它们不感兴趣,您可以在您的正则表达式中使用“presto\.worker”,这将匹配每个实例。
如果您还想获取前两个八位字节并将它们过滤掉,这里是它的正则表达式:
([A-Za-z]+\.[A-Za-z]+-[A-Za-z]+\.)(presto\.worker)
前两个八位字节现在位于一个单独的组(组 1)中。我不确定 Prometheuse 监控系统将如何输出这些匹配项(通常每个组都会得到一个数组)。尝试将正则表达式粘贴到 regex101.com 以了解我的意思。
希望这能回答你的问题!
-Eivind
【解决方案2】:
我尝试了这两种解决方案,但都有不同的问题
Prometheus 查询问题:
【解决方案3】:
在 regex101.com 上,我已经放置了我正在寻找的过滤器(通过“presto.worker”匹配),它确实显示出很好的匹配,但是当我在 Prometheus 监控系统上运行时,它出现“未知转义序列”错误"
我猜正斜杠需要转义。怎么做?
【解决方案4】:
我已经找到了答案,感谢您指导我。为了让 prometheus 将代码视为正则表达式,我们需要在开头插入 ~ 使代码如下:
count(up{instance=~"[A-Za-z.]+[A-Za-z.-]+(presto.)+(worker)"}) BY (presto_failuredetector_HeartbeatFailureDetector_ActiveCount)
注意实例=之后的~