Prometheus データの解析: expfmt パッケージを活用した楽な解析
Prometheus の説明形式 (EBNF 構文) は、取得したメトリクスを解析するときに課題を提示しますHTTP GET 経由。この記事では、Prometheus の作成者自身が開発した expfmt パッケージを使用して Prometheus データを解析するプロセスについて説明します。
expfmt の活用
expfmt パッケージは、Prometheus のデコードおよびエンコードを行うための信頼性が高く効率的な方法を提供します。展示形式。これを使用すると、解析プロセスが大幅に簡素化されます。
package main import ( expfmt "github.com/prometheus/common/expfmt" dto "github.com/prometheus/client_model/go" "fmt" "os" ) func main() { // Parse the Prometheus data from a file mf, err := parseMF("path/to/file.txt") if err != nil { fmt.Println(err) return } // Iterate over the metric families for k, v := range mf { fmt.Printf("KEY: %s\n", k) fmt.Printf("VAL: %+v\n", v) } } func parseMF(path string) (map[string]*dto.MetricFamily, error) { reader, err := os.Open(path) if err != nil { return nil, err } defer reader.Close() // Use the expfmt parser to parse the data var parser expfmt.TextParser mf, err := parser.TextToMetricFamilies(reader) if err != nil { return nil, err } return mf, nil }
使用例
# 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
サンプル出力
KEY: net_conntrack_dialer_conn_attempted_total VAL: name: "net_conntrack_dialer_conn_attempted_total" type: UNTYPED metric:<label:<name: "dialer_name" value: "federate" > label:<name: "instance" value: "localhost:9090" > label:<name: "job" value: "prometheus" > untyped:<value: 1 > timestamp_ms: 1608520832877 >
アドレスの書式設定問題
Prometheus データが正しくフォーマットされていることを確認することが重要です。プロトコル エラーが発生した場合は、テキスト プロトコルの要求に従って、各行が改行文字 (n) で終わっているかどうかを確認してください。
以上がGo の `expfmt` パッケージを使用して Prometheus Exposition 形式のデータを効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。