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

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

王林
王林avant
2024-02-08 23:42:321051parcourir

如何使用 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))

}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer