解析普罗米修斯指标数据以添加标签并重新解析为普罗米修斯指标格式

时间:2021-02-05 07:19:06

标签: parsing go prometheus

简而言之,我正在编写一个程序来远程收集一些 kubelets 指标。

但这些指标不包含有关 node_name 的信息,因此在 prometheus 废弃时它会重复

所以我想解析它们的指标,为它们添加节点名称标签,然后将它们重新解析为 prometheus 指标,这样我就可以作为端点托管,让 prometheus 从中提取数据

但是我在解析指标时遇到了问题

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

使用这样的简单指标:

# 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

结果:

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 > 

我只是想把名字,标签,值和时间戳取出来,但是我不能把它取出来处理,不像python

from prometheus_client.parser import text_string_to_metric_families
import requests

metrics = """
# 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
"""

for family in text_string_to_metric_families(metrics):
  for sample in family.samples:
    print("{0}\n{1}\n{2}\n{4}".format(*sample))

Python 结果:

net_conntrack_dialer_conn_attempted_total
{'dialer_name': 'federate', 'instance': 'localhost:9090', 'job': 'prometheus'}
1.0
1608520832.877

那么回到主要问题:我怎样才能取出那些特定的值并修改它?

0 个答案:

没有答案