本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

导出配置

所有 SDK,无论语言如何,都使用相同的基本配置来定义 Open Telemetry 服务名称 和导出器端点(即遥测发送到的地方)。

这些可以通过为您的仪器化应用程序设置环境变量来配置。

在 Kubernetes 中,在您的工作负载的清单中设置这些环境变量(将 <the-service-name> 替换为您的应用服务的名称):

...
spec:
  containers:
  - env:
    - name: OTEL_EXPORTER_OTLP_ENDPOINT
      value: http://opentelemetry-collector.open-telemetry.svc.cluster.local:4317
    - name: OTEL_SERVICE_NAME
      value: <the-service-name>
    - name: OTEL_EXPORTER_OTLP_PROTOCOL
      value: grpc
...

示例中指定的端点假设收集器是使用 安装指南 中的默认值安装的。它使用端口 4317,该端口使用 gRPC 版本的 OTLP 协议。某些仪器化仅支持 HTTP,在这种情况下,请使用端口 4318

服务名称也可以从可能已经存在的 Kubernetes 标签中派生。例如,像这样:

spec:
  containers:
  - env:
    - name: OTEL_SERVICE_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.labels['app.kubernetes.io/component']

gRPC vs HTTP

OTLP,即开放遥测协议,支持gRPC和通过HTTP的protobuf。一些 SDK 也支持通过 HTTP 传输 JSON。在上一节中,导出协议设置为`gRPC`,这通常提供最佳性能,并且是许多 SDK 的默认设置。然而,在某些情况下,这可能会出现问题:

  • 某些防火墙未设置为处理gRPC。

  • (反向)代理和负载均衡器可能不支持gRPC,除非进行额外配置。

  • gRPC的长连接可能在负载均衡时导致问题。

要切换到HTTP而不是gRPC,请将协议更改为`http` _和_使用端口`4318`。

总结一下,如果gRPC出现问题,请使用HTTP:

  • grpc`协议使用端口`4317

  • http`协议使用端口`4318