gpt4 book ai didi

使用 Golang 的 Azure 监视器导出器

转载 作者:行者123 更新时间:2023-12-03 00:17:17 26 4
gpt4 key购买 nike

我目前正在尝试将我的 Go 应用程序连接到 Azure 监视器,但我立即遇到了“otel”contrib 包 ( https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/azuremonitorexporter ) 的问题

我尝试使用的导出器未实现 otel 中接口(interface) WithBatcher 所需的 ExportSpans 函数。我在网上搜索了 Azure Monitor 和 Go 的示例,但几乎没有找到。我们确实有来自 Azure 的 applicationinsights 包,我已经使用一些手动跟踪进行了测试,但我希望导出器也能正常工作。

有人尝试过这个吗?我做错了什么或者没有完全理解otel吗?任何指向正确方向的指针都会很棒。

func initMonitor() (*sdktrace.TracerProvider, error) {
key := os.Getenv("INSTRUMENTATION_KEY")
exporterConfig := azuremonitorexporter.Config{
InstrumentationKey: configopaque.String(key),
}

factory := azuremonitorexporter.NewFactory()

azExporter, err := factory.CreateTracesExporter(context.Background(), exporter.CreateSettings{}, exporterConfig)
if err != nil {
panic(err)
}

tp := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithBatcher(azExporter),
)

otel.SetTracerProvider(tp)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))

return tp, nil
}

我希望将 azuremonitorexporter 添加为 Go 中 otel 的跟踪器提供程序,以检测我的 Go 应用程序。

最佳答案

安装所需的软件包:

go get go.opentelemetry.io/otel
go get go.opentelemetry.io/otel/exporters/azuremonitorexporter
go get github.com/Azure/azure-sdk-for-go@latest
  • 我还安装了 go get github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter@latest

enter image description here

配置导出器:

在应用程序 Go 代码中,初始化 Azure Monitor 导出器并使用您的 Instrumentation Key 配置它。

代码:

package main

import (
"context"
"log"
"os"

"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/azuremonitorexporter"
)

func main() {
// Retrieve your Azure Monitor Instrumentation Key from an environment variable.
instrumentationKey := os.Getenv("INSTRUMENTATION_KEY")
if instrumentationKey == "" {
log.Fatal("Please set the INSTRUMENTATION_KEY environment variable.")
}

// Create an Azure Monitor exporter with the specified Instrumentation Key.
exporter, err := azuremonitorexporter.NewExporter(azuremonitorexporter.WithInstrumentationKey(instrumentationKey))
if err != nil {
log.Fatalf("Failed to create Azure Monitor exporter: %v", err)
}

// Set up the OpenTelemetry TracerProvider with the Azure Monitor exporter.
tp := otel.NewTracerProvider(
otel.WithBatcher(exporter),
)

// Set the TracerProvider as the global tracer provider.
otel.SetTracerProvider(tp)

// Your application logic here...

// Ensure that telemetry data is flushed before the program exits.
if err := tp.Shutdown(context.Background()); err != nil {
log.Fatalf("Error shutting down tracer provider: %v", err)
}
}
  • 您可以自定义范围来收集与您的应用相关的遥测数据。

发送遥测数据:

  • 当您的应用程序运行时,它将向 Azure Monitor 发送遥测数据(包括跟踪记录)以进行监控和分析。

enter image description here

如果您愿意使用不同的导出器来存储跟踪数据,您可以探索其他维护良好且支持 Go 应用程序的 OpenTelemetry 导出器。一些流行的替代方案包括 Jaeger、Zipkin 等的导出器。

关于使用 Golang 的 Azure 监视器导出器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77153407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com