目前我正在尝试使用环境变量来配置我的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")
我将其解释为变量在代码执行时实际存在,这是我最担心的。
为什么会这样?我是不是遗漏了什么?我应该用不同的方式填充环境变量吗(我看到官方文档中有环境变量的“选项”,但没有示例)?
1条答案
按热度按时间q8l4jmvw1#
从我看到的代码来看,你试图通过gRPC调用来联系OTLP导出器。如果你看到,在他们的文档中,他们在第71行写道:
如果使用WithGRPCConn,则此选项无效。
这意味着您可以完全避免将此变量传递给
otlptracegrpc.NewClient
函数。回到您的问题,您的猜测是正确的,但前提是您通过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
如果有帮助,请告诉我!