ホームページ >バックエンド開発 >Golang >Go で Prometheus Exposition 形式のデータを効率的に解析するにはどうすればよいですか?

Go で Prometheus Exposition 形式のデータを効率的に解析するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-03 21:10:15483ブラウズ

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

Prometheus データの解析

指定された Prometheus 表示形式で見られるように、HTTP GET 経由で取得されたメトリクスを解析するには、考慮すべき 2 つのアプローチがあります。

expfmt パッケージの使用

expfmt パッケージPrometheus チームのこのツールは、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 パッケージは、Prometheus に続く EBNF 構文をサポートするため、データを解析するためのもう 1 つのオプションです。ただし、expfmt は、Prometheus データを解析するためのより具体的で効率的な選択肢です。

フォーマットに関する注意

入力ファイルでは、Prometheus テキストに続く行末に改行文字 (n) が使用されていることを確認してください。プロトコル仕様。 r などの他の文字を使用すると、プロトコル エラーが発生します。

以上がGo で Prometheus Exposition 形式のデータを効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。