目前我正在嘗試使用環境變數配置我的 OTLP 匯出器。根據官方檔案,這應該是可能的。
OTEL_EXPORTER_OTLP_ENDPOINT特別是,我想重點關注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")
我將其解釋為在執行代碼時實際存在的變數,這是我的主要恐懼。
為什么是這樣?我在這里錯過了什么嗎?我是否應該以不同方式填充環境變數(我看到官方檔案中有環境變數的“選項”,但沒有示例)?
uj5u.com熱心網友回復:
從我從您的代碼中看到的情況來看,您正在嘗試通過 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
讓我知道是否有幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/535739.html
標籤:去开放遥测
