Maison >développement back-end >Golang >Comment puis-je analyser efficacement les données du format d'exposition Prometheus dans Go ?

Comment puis-je analyser efficacement les données du format d'exposition Prometheus dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 21:10:15479parcourir

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

Analyse des données Prometheus

Pour analyser les métriques obtenues via HTTP GET comme indiqué dans le format d'exposition Prometheus donné, il existe deux approches à considérer :

Utilisation du package expfmt

Le package expfmt de l'équipe Prometheus est spécifiquement conçu pour analyser et coder les données du format d'exposition Prometheus. Il suit la syntaxe EBNF et fournit un moyen pratique d'extraire les données.

Exemple d'entrée :

# 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

Exemple de programme :

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

Utilisation du package ebnf

Le package ebnf est une autre option pour analyser les données, car il prend en charge la syntaxe EBNF suivie par Prometheus. Cependant, expfmt est un choix plus spécifique et plus efficace pour analyser les données Prometheus.

Remarque de formatage

Assurez-vous que le fichier d'entrée utilise des caractères de saut de ligne (n) pour que les fins de ligne suivent le texte Prometheus. spécifications du protocole. L'utilisation d'autres caractères, tels que r, entraînera une erreur de protocole.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn