Heim >Backend-Entwicklung >Golang >So übertragen Sie Metriken mithilfe von go-sdk an Opentelemetry

So übertragen Sie Metriken mithilfe von go-sdk an Opentelemetry

王林
王林nach vorne
2024-02-08 23:42:321125Durchsuche

如何使用 go-sdk 将指标推送到 Opentelemetry

php-Editor Xigua zeigt Ihnen, wie Sie mit go-sdk Indikatoren an Opentelemetry übertragen. Opentelemetry ist ein Open-Source-Beobachtungsframework, das Entwicklern hilft, Anwendungsmetrikdaten zu sammeln und zu analysieren. Mit go-sdk können Sie benutzerdefinierte Metriken ganz einfach an Opentelemetry übertragen und sie über Dashboards visualisieren und überwachen. Dieser Artikel führt Sie im Detail in den Installations- und Konfigurationsprozess von go-sdk ein, zeigt Ihnen, wie Sie Code schreiben, um Indikatordaten an Opentelemetry zu übertragen, und gibt einige praktische Beispiele und Best Practices. Unabhängig davon, ob Sie ein Anfänger oder ein erfahrener Entwickler sind, erhalten Sie in diesem Artikel nützliche Informationen und Anleitungen, die Ihnen dabei helfen, go-sdk besser zu nutzen, um Indikatordaten an Opentelemetry zu übertragen.

Frageninhalt

Ich habe versucht, go-sdk zu verwenden, um Metriken an Opentelemetry zu übertragen, habe aber keine Dokumentation dazu gefunden. Bisher habe ich versucht, diesen Code zu verwenden, weiß aber nicht, was der nächste Schritt ist. Um ehrlich zu sein, bin ich etwas verwirrt mit den Anbieter- und Reader-Sachen, ich bin neu in der Überwachung

func main() {
    ctx := context.Background()

    res, err := resource.New(ctx, resource.WithAttributes(semconv.ServiceName("my-service")))
    if err != nil {
        panic(err)
    }

    ctx, cancel := context.WithTimeout(ctx, time.Second)
    defer cancel()
    conn, err := grpc.DialContext(ctx, "localhost:4317", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock())
    if err != nil {
        panic(err)
    }

    metricExporter, err := otlpmetricgrpc.New(ctx, otlpmetricgrpc.WithGRPCConn(conn))
    if err != nil {
        panic(err)
    }

    exporter, err := prometheus.New()
    if err != nil {
        panic(err)
    }

    provider := metric.NewMeterProvider(metric.WithReader(exporter))
    meter := provider.Meter("github.com/open-telemetry/opentelemetry-go/example/prometheus")

    counter, err := meter.Float64Counter("foo", instrument.WithDescription("a simple counter"))
    if err != nil {
        panic(err)
    }
    counter.Add(ctx, 5)

    reader := metric.NewPeriodicReader(metricExporter, metric.WithInterval(1*time.Second))

}

Die Quellinformationen, die mir bisher vorliegen, stammen aus dem Beispiel hier und dem Beispiel hier

Problemumgehung

Zunächst ist es erwähnenswert, dass die OTel Go-Indikator-API und das SDK derzeit als instabil gelten. Ich werde versuchen, meine Antwort auf übergeordnete Elemente zu konzentrieren, die in der stabilen OpenTelemetry-Metrikspezifikation enthalten sind, damit sie nicht veraltet. Alle folgenden Go-spezifischen Inhalte können sich ändern.

Anscheinend versuchen Sie, zwei verschiedene Arten von Exporteuren einzurichten. Der Prometheus-Exporter wird von Prometheus gescrapt, und der otelmetricgrpc-Exporter erstellt eine Verbindung, um Metriken über OTLP an eine Senke wie den OpenTelemetry Collector zu übertragen. Möglicherweise benötigen Sie nur das eine oder das andere, nicht beide. Das erste Beispiel, das Sie verlinkt haben, dient eigentlich nur der Nachverfolgung und nicht der Metrik, aber das Prinzip ist ungefähr das gleiche.

Der Einstiegspunkt für jede Metrik im OpenTelemetry SDK ist meter 提供商 。仪表提供程序处理与度量相关的配置、聚合和数据导出。这也是用户获取 meters. Jedes Codemodul verfügt normalerweise über eine eigene Instrumentierung. Erstellen Sie basierend auf den Messgerätmetriken und protokollieren Sie Datenpunkte basierend auf diesen Metriken. Alle Indikatorpunkte werden aggregiert und über den Messanbieter zurückgeleitet.

Um Messwerte eines Zähleranbieters auszulesen, benötigen Sie eine Art metric reader . Wenn Sie versuchen, Metriken mithilfe eines Protokolls wie OTLP zu übertragen, können Sie ein Tool wie Periodic Export Metrics Reader verwenden, das regelmäßig Metriken von Messanbietern sammelt und diese mithilfe eines Exporters exportiert.

Wenn Sie versuchen, ein Pull-basiertes Metriksystem (wie Prometheus) zu verwenden, verhält sich der Exporter wie ein Metrikleser und liest die Metriken jedes Mal, wenn das Metriksystem den Crawl-Endpunkt anfordert. Dies geschieht im zweiten Beispiel, das Sie verlinkt haben. serveMetrics 函数打开侦听端口 2223 并处理对 localhost:2223/metrics 的请求的 Web 服务器。每次 GET Immer wenn eine Anfrage an diesem Endpunkt eingeht, werden Metriken entsprechend der Konfiguration des Instrumentierungsanbieters aggregiert und im Antworttext zurückgegeben. Dadurch können Systeme wie Prometheus regelmäßig Metriken von Ihrer Anwendung anfordern.

Das obige ist der detaillierte Inhalt vonSo übertragen Sie Metriken mithilfe von go-sdk an Opentelemetry. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen