登录
首页 >  Golang >  Go问答

如何解析 Prometheus 数据

来源:Golang技术栈

时间:2023-04-28 17:32:28 147浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《如何解析 Prometheus 数据》,正文内容主要涉及到golang等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我已经能够通过发送 HTTP GET 来获取度量,如下所示:

# TYPE net_conntrack_dialer_conn_attempted_total untyped net_conntrack_dialer_conn_attempted_total{dialer_name="federate",instance="localhost:9090",job="prometheus"} 1 1608520832877

现在我需要解析这些数据并获得对每条数据的控制权,以便我可以转换像 json 这样的 tand 格式。

我一直在研究 Go 中的 ebnf 包: ebnf 包

有人可以指出我解析上述数据的正确方向吗?

正确答案

已经有一个很好的包可以做到这一点,它是由 Prometheus 的作者 自己提供的。

他们编写了一堆在 Prometheus 组件和库之间共享的 Go 库。它们被认为是 Prometheus 内部的,但您可以使用它们。

参考:github.com/prometheus/common doc。有一个名为的包可以对 Prometheus 的 Exposition Format ( Linkexpfmt )进行解码和编码。是的,它遵循 EBNF 语法,因此也可以使用包,但您可以立即使用。 **** __ebnf``expfmt

使用的包:expfmt

样本输入:

# 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 (
    "flag"
    "fmt"
    "log"
    "os"

    dto "github.com/prometheus/client_model/go"
    "github.com/prometheus/common/expfmt"
)

func fatal(err error) {
    if err != nil {
        log.Fatalln(err)
    }
}

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 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)
    }
}

样本输出:

KEY:  net_conntrack_dialer_conn_attempted_total
VAL:  name:"net_conntrack_dialer_conn_attempted_total" type:UNTYPED metric: label: label: untyped:<1>

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>