首頁 >後端開發 >Golang >如何在Go中高效解析Prometheus Exposition格式資料?

如何在Go中高效解析Prometheus Exposition格式資料?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-03 21:10:15535瀏覽

How Can I Efficiently Parse Prometheus Exposition Format Data in Go?

解析Prometheus 資料

要解析透過HTTP GET 取得的指標(如給定的Prometheus 展示格式所示),可以考慮兩種方法:

使用expfmt 套件

來自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 包

使用ebnf 包

ebnf 套件是解析資料的另一個選項,因為它支援Prometheus 遵循的EBNF 語法。然而,expfmt 是解析 Prometheus 資料的更具體、更有效率的選擇。

格式化注意確保輸入檔案使用換行符 (n) 作為行結尾,以遵循 Prometheus 文字協定規格。使用其他字符,例如 r,將導致協議錯誤。

以上是如何在Go中高效解析Prometheus Exposition格式資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn