Prometheus データの解析
HTTP GET リクエストを使用して Prometheus からメトリクスを取得することは、最初のステップにすぎません。次の課題は、データを解析してそのコンポーネントを抽出することです。この記事では、EBNF パッケージと代替ソリューションに焦点を当てて、Prometheus データを解析する方法について説明します。
EBNF を使用した解析
の EBNF (Extended Backus-Naur Form) パッケージGo は文法を定義して解析する方法を提供します。 Prometheus データの解析に使用することもできますが、多大な労力と手作業が必要です。このメソッドの利用者は、正確な解析を保証するために、考えられるすべてのデータの変化を予測して、細心の注意を払って文法を作成する必要があります。
Prometheus の expfmt を活用する
複雑な文法定義に依存する代わりに、 Prometheus の作者自身が開発したパッケージ expfmt を利用できます。この Go ライブラリは、Prometheus Exposition Format (EBNF ベース) のエンコードとデコードに特化しています。使いやすさとすぐに使える機能により、Prometheus データの解析に理想的な選択肢となっています。
expfmt を使用した例
次のサンプル Prometheus について考えてみましょう。 data:
# 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
次の Go コードは、次の Go コードを使用してこのデータを解析する方法を示しています。 expfmt:
package main import ( "flag" "fmt" "log" "os" dto "github.com/prometheus/client_model/go" "github.com/prometheus/common/expfmt" ) func main() { f := flag.String("f", "", "set filepath") flag.Parse() mf, err := parseMF(*f) fatal(err) for k, v := range mf { fmt.Println("KEY: ", k) fmt.Println("VAL: ", v) } } func parseMF(path string) (map[string]*dto.MetricFamily, error) { reader, err := os.Open(path) if err != nil { return nil, err } var parser expfmt.TextParser mf, err := parser.TextToMetricFamilies(reader) if err != nil { return nil, err } return mf, nil } func fatal(err error) { if err != nil { log.Fatalln(err) } }
このプログラムを実行すると、次の出力が生成されます:
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」で終わる必要があります。 「r」や「rn」など、この形式から逸脱すると、プロトコル エラーが発生します。
以上がGo で Prometheus データを効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。