Maison > développement back-end > Golang > Comment transmettre des métriques à Opentelemetry à l'aide de go-sdk

Comment transmettre des métriques à Opentelemetry à l'aide de go-sdk

王林
Libérer: 2024-02-08 23:42:32
avant
1120 Les gens l'ont consulté

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

L'éditeur php Xigua vous présentera comment utiliser go-sdk pour pousser des indicateurs vers Opentelemetry. Opentelemetry est un framework d'observation open source qui aide les développeurs à collecter et analyser les données métriques des applications. Grâce à go-sdk, vous pouvez facilement transmettre des métriques personnalisées à Opentelemetry, les visualiser et les surveiller via des tableaux de bord. Cet article vous présentera en détail le processus d'installation et de configuration de go-sdk, ainsi que comment écrire du code pour transmettre les données de l'indicateur à Opentelemetry, et donnera quelques exemples pratiques et bonnes pratiques. Que vous soyez novice ou développeur expérimenté, vous pouvez obtenir des informations et des conseils utiles dans cet article pour vous aider à mieux utiliser go-sdk pour transmettre les données des indicateurs vers Opentelemetry.

Contenu de la question

J'ai essayé d'utiliser go-sdk pour pousser les métriques vers opentelemetry mais je n'ai trouvé aucune documentation à ce sujet. Jusqu'à présent, j'ai essayé d'utiliser ce code mais je ne sais pas quelle est la prochaine étape, pour être honnête, je suis un peu confus avec les trucs du fournisseur et du lecteur, je suis nouveau dans la surveillance

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

}
Copier après la connexion

Les informations sources dont je dispose jusqu'à présent proviennent de l'exemple ici et de l'exemple ici

Solution de contournement

Tout d'abord, il convient de noter que l'API et le SDK des indicateurs OTel Go sont actuellement considérés comme instables. J'essaierai de concentrer ma réponse sur les éléments de niveau supérieur inclus dans la spécification stable des métriques OpenTelemetry afin qu'elle ne devienne pas obsolète. Tout contenu spécifique à Go ci-dessous est susceptible d'être modifié.

Il semble que vous essayiez de créer deux types d'exportateurs différents. L'exportateur Prometheus est récupéré par Prometheus et l'exportateur otelmetricgrpc crée une connexion pour transmettre les métriques via OTLP vers un récepteur tel que OpenTelemetry Collector. Vous n’aurez peut-être besoin que de l’un ou de l’autre, pas des deux. Le premier exemple que vous avez lié concerne en réalité uniquement le suivi, pas les métriques, mais le principe est à peu près le même.

Le point d’entrée de toute métrique dans le SDK OpenTelemetry est meter 提供商 。仪表提供程序处理与度量相关的配置、聚合和数据导出。这也是用户获取 meters. Chaque module de code possède généralement sa propre instrumentation. Créez en fonction des métriques de la jauge et enregistrez les points de données en fonction de ces métriques. Tous les points indicateurs sont regroupés et renvoyés via le fournisseur de comptage.

Pour lire les métriques d'un fournisseur de compteurs, vous avez besoin d'une sorte de metric reader . Si vous essayez de transmettre des métriques à l'aide d'un protocole tel qu'OTLP, vous pouvez utiliser un outil tel que Periodic Export Metrics Reader, qui collecte périodiquement les métriques des fournisseurs de mesure et les exporte à l'aide d'un exportateur.

Si vous essayez d'utiliser un système de métriques basé sur l'extraction (tel que Prometheus), l'exportateur agit comme un lecteur de métriques et lit les métriques chaque fois que le système de métriques demande le point de terminaison d'analyse. C'est ce qui est fait dans le deuxième exemple que vous avez lié. serveMetrics 函数打开侦听端口 2223 并处理对 localhost:2223/metrics 的请求的 Web 服务器。每次 GET Chaque fois qu'une requête arrive sur ce point de terminaison, les métriques sont agrégées en fonction de la configuration du fournisseur d'instrumentation et renvoyées dans le corps de la réponse. Cela permet à des systèmes comme Prometheus de demander périodiquement des métriques à votre application.

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal