亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式:Grafana 變量將連字符分隔的 IP 轉換為點分隔的 IP

正則表達式:Grafana 變量將連字符分隔的 IP 轉換為點分隔的 IP

Go
長風秋雁 2023-07-04 19:07:15
我正在嘗試使用自定義查詢在 Grafana 中創建一個變量來掃描 EKS 集群中的節點。目前,節點變量存儲為“連字符”分隔的字符串(例如 10-109-22-102);我打算將其報告為“點”分隔的字符串(例如 10.109.22.102)。這甚至可以通過正則表達式實現嗎?Grafana變量支持通過抓取給定指標然后使用正則表達式提取報告指標中的值來創建實時變量。我目前正在抓取一個指標:kube_node_info{container_runtime_version=“docker://18.6.1”,端點=“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"}我目前正在使用 regex:/.*node="ip-([^"]*).us-*/提取以“連字符”分隔的 IP。我還嘗試過使用其他匹配組,例如:([\d]{2,3})-([\d]{2,3})-([\d]{2,3})-([\d]{2,3})但是,這僅返回 grafana 中的第一個匹配組(在本例中10)作為唯一選項。預期輸出應該是:10.11.111.111
查看完整描述

3 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

在我看來,你設計的應該可以正常工作:


測試

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的右上角面板上進行了解釋,如果您想探索/簡化/修改它,并且在此鏈接中,如果您愿意,您可以觀看它如何與某些示例輸入匹配。


查看完整回答
反對 回復 2023-07-04
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

你的正則表達式必須工作正常。但是,字符集是多余的,因為每組僅使用數字。因此,可以將它們刪除:

(\d{2,3})-(\d{2,3})-(\d{2,3})-(\d{2,3})

然后捕獲的數據可以替換為:

$1.$2.$3.$4

演示


查看完整回答
反對 回復 2023-07-04
?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

實際目的是捕獲實例的 IP,并通過查詢將所有這些 IP 列為動態變量,然后通過 IP 啟用所有節點指標。這是一個糟糕的方法,因為許多普羅米修斯節點指標都是用標簽導出的node=ip-XX-XX-XXX-XXX-<region>-.compute.internal(其中 XX 是數字)。此外,grafana 變量僅報告第一個子組的匹配 - 理想情況下它應該是所有子組。

但是,即使我要捕獲 XX.XX.XXX.XXX 子組,這也意味著對于我需要捕獲和繪制圖表的每個指標,我需要解決 EKS 節點中所有 IP 的匹配問題 - 這不是特別是如果我們想要啟用“全部”變量,其中 grafana 用所有變量匹配的正則表達式替換變量調用,這是可能的。前任。如果我的 k8s 節點有以下 IP: * 10.10.0.1 * 10.10.0.2 * 10.10.0.3 并且我將此變量稱為 Node Grafana 將列出以下變量: * All * 10.10.0.1 * 10.10.0.2 * 10.10.0.3 在選擇 grafanaAll時會將 $Node 替換為./*(10.10.0.1|10.10.0.2|10.10.0.3)*/但是,如果我有一個獲取節點信息的查詢:kube_pod_info{node=~"$Node"}-> 這會失敗,因為節點名稱采用不同的格式,我們可以嘗試通過使用來解決它,label_replace但我們再次無法解決使用$Node如果All使用變量。

結論:使用變量$Node(即* ip-10-10-0-1.us-sdlls-as.compute.internal * ip-10-10-0-2.us-sdlls-as.compute.internal * ip- 10-10-0-3.us-sdlls-as.compute.internal ) -按原樣,這將使所有其他面板更加方便且易于配置。


查看完整回答
反對 回復 2023-07-04
  • 3 回答
  • 0 關注
  • 551 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號