我正在尝试使用自定义查询在Grafana中创建变量以扫描EKS群集中的节点。当前,节点变量存储为“连字符”分隔的字符串(例如10-109-22-102);我打算将其报告为“点”分隔的字符串(例如10.109.22.102)。正则表达式甚至有可能吗?
Grafana variables支持通过抓取给定指标然后使用正则表达式提取报告的指标中的值来创建 Activity 变量。我目前正在抓取一个指标:
我当前正在使用正则表达式:/.*node="ip-([^"]*).us-*/
提取“连字符”分隔的IP。我也尝试过使用其他匹配组,例如:([\d]{2,3})-([\d]{2,3})-([\d]{2,3})-([\d]{2,3})
,但这仅返回grafana中的第一个匹配组(在本例中为10
)作为唯一选项。
预期输出应为:
10.11.111.111
最佳答案
在我看来,您设计的一款应该可以正常工作:
测试
package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)([0-9]{2,3})-([0-9]{2,3})-([0-9]{2,3})-([0-9]{2,3})`)
var str = `kube_node_info{container_runtime_version="docker://18.6.1",endpoint="http",instance="10.11.111.111:8080",job="kube-state-metrics",kernel_version="xxxxx",kubelet_version="xxxx",kubeproxy_version="xxxx",namespace="infra",node="ip-10-11-111-111.us-sdlls-as.compute.internal",os_image="Amazon Linux 2",pod="prometheus-operator-kube-state-metrics-sdfgsjdkgl-saldjl",service="prometheus-operator-kube-state-metrics"
kube_node_info{container_runtime_version="docker://18.6.1",endpoint="http",instance="10.11.111.111:8080",job="kube-state-metrics",kernel_version="xxxxx",kubelet_version="xxxx",kubeproxy_version="xxxx",namespace="infra",node="ip-10-11-111-111.us-sdlls-as.compute.internal",os_image="Amazon Linux 2",pod="prometheus-operator-kube-state-metrics-sdfgsjdkgl-saldjl",service="prometheus-operator-kube-state-metrics"
`
var substitution = "$1.$2.$3.$4"
fmt.Println(re.ReplaceAllString(str, substitution))
}
如果希望探索/简化/修改该表达式,请在regex101.com的右上角板上进行说明,如果愿意,可以在this link中观察它与某些示例输入的匹配方式。关于regex - 正则表达式:Grafana变量将连字符分隔的IP转换为点分隔的IP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57138246/