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

rqmkfv5c  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(210)

目前我正在尝试使用环境变量来配置我的OTLP导出器。这应该是可能的,根据官方文件。
特别是,我想重点介绍OTEL_EXPORTER_OTLP_ENDPOINT,即allowed for the OTLPtrace exporter。根据他们代码中的注解,环境变量优先于代码中设置的任何其他值。
我在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")

我将其解释为变量在代码执行时实际存在,这是我最担心的。
为什么会这样?我是不是遗漏了什么?我应该用不同的方式填充环境变量吗(我看到官方文档中有环境变量的“选项”,但没有示例)?

q8l4jmvw

q8l4jmvw1#

从我看到的代码来看,你试图通过gRPC调用来联系OTLP导出器。如果你看到,在他们的文档中,他们在第71行写道:
如果使用WithGRPCConn,则此选项无效。
这意味着您可以完全避免将此变量传递给otlptracegrpc.NewClient函数。

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
正如您所看到的,注解更加清晰,您只有两个选项:
1.提供您自己的终结点地址
1.使用默认值localhost:0.0.0.0:4317
如果有帮助,请告诉我!

相关问题