为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
哆啦的时光机 2023-03-15 14:53:56
目前我正在尝试使用环境变量配置我的 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")我将其解释为在执行代码时实际存在的变量,这是我的主要恐惧。为什么是这样?我在这里错过了什么吗?我是否应该以不同方式填充环境变量(我看到官方文档中有环境变量的“选项”,但没有示例)?
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞


从我从您的代码中看到的情况来看,您正在尝试通过 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

让我知道是否有帮助!


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 333 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号