>백엔드 개발 >Golang >Go에서 Prometheus Exposition 형식 데이터를 효율적으로 구문 분석하려면 어떻게 해야 합니까?

Go에서 Prometheus Exposition 형식 데이터를 효율적으로 구문 분석하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-03 21:10:15535검색

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

Prometheus 데이터 구문 분석

주어진 Prometheus 설명 형식에 표시된 대로 HTTP GET을 통해 얻은 측정항목을 구문 분석하려면 다음 두 가지 접근 방식을 고려해야 합니다.

expfmt 패키지 사용

Prometheus 팀의 expfmt 패키지는 다음을 위해 특별히 설계되었습니다. Prometheus Exposition Format 데이터를 구문 분석하고 인코딩합니다. EBNF 구문을 따르며 데이터를 추출하는 편리한 방법을 제공합니다.

샘플 입력:

# 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 (
    "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)
    }
}

ebnf 사용 패키지

ebnf 패키지는 EBNF 구문과 Prometheus를 지원하므로 데이터 구문 분석을 위한 또 다른 옵션입니다. 그러나 expfmt는 Prometheus 데이터를 구문 분석하는 데 더 구체적이고 효율적인 선택입니다.

형식 참고

입력 파일이 Prometheus 텍스트를 따르도록 줄 끝으로 줄 바꿈 문자(n)를 사용하는지 확인하세요. 프로토콜 사양. r 등 다른 문자를 사용하면 프로토콜 오류가 발생합니다.

위 내용은 Go에서 Prometheus Exposition 형식 데이터를 효율적으로 구문 분석하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.