要解析通过 HTTP GET 获取的指标(如给定的 Prometheus 展示格式所示),可以考虑两种方法:
来自 Prometheus 的 expfmt 包团队专为解析和编码 Prometheus Exposition Format 数据而设计。它遵循 EBNF 语法,提供了一种便捷的方式来提取数据。
示例输入:
# HELP net_conntrack_dialer_conn_attempted_total # TYPE net_conntrack_dialer_conn_attempted_total untyped net_conntrack_dialer_conn_attempted_total{dialer_name="federate",instance="localhost:9090",job="prometheus"} 1 1608520832877
示例程序:
package main import ( "fmt" "log" "os" dto "github.com/prometheus/client_model/go" "github.com/prometheus/common/expfmt" ) func main() { reader, err := os.Open("path/to/input.txt") if err != nil { log.Fatalln(err) } var parser expfmt.TextParser mf, err := parser.TextToMetricFamilies(reader) if err != nil { log.Fatalln(err) } for k, v := range mf { fmt.Println("KEY:", k) fmt.Println("VAL:", v) } }
ebnf 包是解析数据的另一个选项,因为它支持 Prometheus 遵循的 EBNF 语法。然而,expfmt 是解析 Prometheus 数据的更具体、更高效的选择。
确保输入文件使用换行符 (n) 作为行结尾,以遵循 Prometheus 文本协议规范。使用其他字符,例如 r,将导致协议错误。
以上是如何在Go中高效解析Prometheus Exposition格式数据?的详细内容。更多信息请关注PHP中文网其他相关文章!