我有一个 dotnet 应用程序,可以将日志推送到酒店收集器。在本地,使用 docker compose 一切正常,但是当我尝试在 kubernetes 中运行相同的内容时,我只得到跟踪,但没有日志。
在收集器日志中,我看到此错误,这可能是原因:
info zapgrpc/zapgrpc.go:178 [transport] [server-transport 0xc002c53520] 关闭: 连接错误: desc = "transport: http2Server.HandleStreams 无法从客户端接收前言: 读取 tcp 172.16.1.45:4317->172.16。 1.43:44348: 读取:连接被对等方重置" {"grpc_log": true}
IP .45 对应于收集器,0.43 对应于应用程序。方向告诉我它从收集器到应用程序,这很令人困惑,因为应用程序应该将日志推送到收集器,而不是相反......这可能是什么原因?
我可以看到本地部署和 kubernetes 部署之间的唯一区别是应用程序正在侦听 https 而不是 http。
收集器配置如下所示:
receivers:
otlp/app:
protocols:
grpc:
http:
exporters:
logging:
loglevel: debug
prometheus: # metrics
endpoint: "0.0.0.0:8889"
send_timestamps: true
resource_to_telemetry_conversion:
enabled: true
const_labels:
exported: "collector"
otlp/tempo:
endpoint: tempo:4317
tls:
insecure: true
loki:
endpoint: http://loki:3100/loki/api/v1/push
service:
telemetry:
logs:
level: "debug"
pipelines:
metrics:
receivers: [ otlp/app ]
exporters: [ prometheus ]
traces:
receivers: [ otlp/app ]
exporters: [ otlp/tempo ]
logs:
receivers: [ otlp/app ]
exporters: [ logging, loki ]
问题在于应用程序设置中有 OTEL_EXPORTER_OTLP_ENDPOINT,而不是作为环境变量。