猿问

通过环境变量配置 OTLP 导出器

目前我正在尝试使用环境变量配置我的 OTLP 导出器。根据官方文档,这应该是可能的。

特别是,我想重点关注OTLPtrace exporter 允许的OTEL_EXPORTER_OTLP_ENDPOINT那个。根据他们代码中的注释,环境变量优先于代码中设置的任何其他值。

我用 Go 编写了一个非常基本的 HTTP 应用程序,它使用 OpenTelemetry 进行检测。当我在代码中明确指定导出器端点时,例如:

exporter, err := otlptrace.New(
        context.Background(),
        otlptracegrpc.NewClient(
            otlptracegrpc.WithInsecure(),
            otlptracegrpc.WithEndpoint("My Endpoint"),
        ),
    )

仪器工作得很好。但是,如果我otlptracegrpc.NewClient从代码中删除配置,它不会获取环境中设置的值,这些值设置如下:

OTEL_EXPORTER_OTLP_ENDPOINT="my endpoint"

因此,当我在我的调试器中运行这个应用程序时,我可以看到导出器客户端有一个空值作为端点,但我可以在我的程序中将它们拾取为:

exporterEndpoint := os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")

我将其解释为在执行代码时实际存在的变量,这是我的主要恐惧。

为什么是这样?我在这里错过了什么吗?我是否应该以不同方式填充环境变量(我看到官方文档中有环境变量的“选项”,但没有示例)?


哆啦的时光机
浏览 334回答 1
1回答

慕桂英546537

从我从您的代码中看到的情况来看,您正在尝试通过 gRPC 调用联系 OTLP 导出器。如果您看到,在他们的文档中,他们在第 71 行中写道:如果使用 WithGRPCConn,则此选项无效。这意味着您可以完全避免将此变量传递给函数otlptracegrpc.NewClient。我用这段代码实例化了一个 gRPC 客户端,它可以工作:func newOtlpExporter(ctx context.Context) (trace.SpanExporter, error) {    client := otlptracegrpc.NewClient(otlptracegrpc.WithInsecure(), otlptracegrpc.WithDialOption(grpc.WithBlock()))    exporter, err := otlptrace.New(ctx, client)    if err != nil {        panic(err)    }    return exporter, err}回到您的问题,您的猜测是正确的,但前提是您通过 HTTPS 调用发送指标、跟踪等。让我知道这是否有助于解决问题或是否需要其他任何东西!编辑 1我忽略了这一点。您在问题中链接的评论取自错误的文件。正确的行是这样的: https: //github.com/open-telemetry/opentelemetry-go/blob/48a05478e238698e02b4025ac95a11ecd6bcc5ad/exporters/otlp/otlptrace/otlptracegrpc/options.go#L71如您所见,评论更清晰,您只有两个选择:提供您自己的端点地址使用默认的是localhost:0.0.0.0:4317让我知道是否有帮助!
随时随地看视频慕课网APP

相关分类

Go
我要回答