Prometheus-Daten analysieren: Nutzung des expfmt-Pakets für müheloses Parsen
Das Prometheus-Expositionsformat (EBNF-Syntax) stellt eine Herausforderung beim Parsen der erhaltenen Metriken dar über HTTP GET. Dieser Artikel führt Sie durch den Prozess der Analyse von Prometheus-Daten mit dem Paket expfmt, das von den Prometheus-Autoren selbst entwickelt wurde.
Nutzung von expfmt
Das expfmt-Paket bietet eine zuverlässige und effiziente Möglichkeit, das Exposition-Format von Prometheus zu dekodieren und zu kodieren. Seine Verwendung vereinfacht den Parsing-Prozess erheblich:
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 }
Beispielverwendung
# 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
Beispielausgabe
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 >
Adressierungsformatierung Probleme
Es ist wichtig sicherzustellen, dass die Prometheus-Daten korrekt formatiert sind. Wenn ein Protokollfehler auftritt, überprüfen Sie, ob jede Zeile mit einem Zeilenvorschubzeichen (n) endet, wie vom Textprotokoll gefordert.
Das obige ist der detaillierte Inhalt vonWie kann ich Daten im Prometheus Exposition-Format mithilfe des „expfmt'-Pakets von Go effizient analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!