5.2. OpenTelemetry 检测配置选项


红帽构建的 OpenTelemetry 可以注入并配置 OpenTelemetry 自动检测库到您的工作负载。目前,红帽构建的 OpenTelemetry 支持为 Go、Java、Node.js、Python、.NET 和 Apache HTTP Server (httpd) 注入检测库。

重要

红帽构建的 OpenTelemetry Operator 仅支持工具库的注入机制,但不支持检测库或上游镜像。客户可以构建自己的检测镜像,或使用社区镜像。

5.2.1. 检测选项

检测选项在 Instrumentation 自定义资源 (CR) 中指定。

Instrumentation CR 示例

apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: instrumentation
spec:
  env:
    - name: OTEL_EXPORTER_OTLP_TIMEOUT
      value: "20"
  exporter:
    endpoint: http://production-collector.observability.svc.cluster.local:4317
  propagators:
    - tracecontext
    - baggage
  sampler:
    type: parentbased_traceidratio
    argument: "1"
  python: 
1

    env: 
2

      - name: OTEL_EXPORTER_OTLP_ENDPOINT
        value: http://production-collector.observability.svc.cluster.local:4318
  dotnet: 
3

    env: 
4

      - name: OTEL_EXPORTER_OTLP_ENDPOINT
        value: http://production-collector.observability.svc.cluster.local:4318
  go: 
5

    env: 
6

      - name: OTEL_EXPORTER_OTLP_ENDPOINT
        value: http://production-collector.observability.svc.cluster.local:4318
Copy to Clipboard Toggle word wrap

1
Python 自动检测默认使用 HTTP 协议缓冲区 (HTTP/proto 或 HTTP/protobuf)。
2
如果端点设置为 :4317,则需要此项。
3
.NET auto-instrumentation 默认使用 HTTP 协议缓冲 (HTTP/proto 或 HTTP/protobuf)。
4
如果端点设置为 :4317,则需要此项。
5
Go auto-instrumentation 默认使用 HTTP 协议缓冲 (HTTP/proto 或 HTTP/protobuf)。
6
如果端点设置为 :4317,则需要此项。

有关 procol 缓冲区的更多信息,请参阅 概述 (协议缓冲文档)。

Expand
表 5.1. Operator 用来定义调用的参数
参数描述

env

所有检测类型的通用环境变量定义。

 

exporter

导出器配置。

 

propagators

Propagators 定义进程上下文传播配置。

tracecontext, baggage, b3, b3multi, jaeger, ottrace, none

resource

资源属性配置。

 

sampler

抽样配置。

 

apacheHttpd

Apache HTTP 服务器检测的配置。

 

dotnet

配置 .NET 检测。

 

go

配置 Go 检测。

 

java

Java 检测配置。

 

nodejs

配置 Node.js 检测。

 

python

Python 检测配置。

根据编程语言,环境变量可能无法配置遥测。对于不支持环境变量配置的 SDK,您必须在代码中直接添加类似的配置。如需更多信息,请参阅环境变量规格(OpenTelemetry 文档)。

Expand
表 5.2. 自动检测的默认协议
自动检测默认协议

Java 1.x

otlp/grpc

Java 2.x

otlp/http

Python

otlp/http

.NET

otlp/http

Go

otlp/http

Apache HTTP 服务器

otlp/grpc

5.2.2. 配置 OpenTelemetry SDK 变量

您可以使用 OpenTelemetry Collector 自定义资源中的 instrumentation.opentelemetry.io/inject-sdk 注解来指示红帽构建的 OpenTelemetry Operator 将以下 OpenTelemetry SDK 环境变量注入到您的 pod 中(取决于 Instrumentation CR):

  • OTEL_SERVICE_NAME
  • OTEL_TRACES_SAMPLER
  • OTEL_TRACES_SAMPLER_ARG
  • OTEL_PROPAGATORS
  • OTEL_RESOURCE_ATTRIBUTES
  • OTEL_EXPORTER_OTLP_ENDPOINT
  • OTEL_EXPORTER_OTLP_CERTIFICATE
  • OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE
  • OTEL_EXPORTER_OTLP_CLIENT_KEY
Expand
表 5.3. instrumentation.opentelemetry.io/inject-sdk 注解的值
value描述

"true"

Instrumentation 资源注入当前命名空间中的默认名称。

"false"

注入 no Instrumentation 资源。

"<instrumentation_name>"

指定要从当前命名空间注入的 Instrumentation 资源的名称。

"<namespace>/<instrumentation_name>"

指定要从另一个命名空间注入的 Instrumentation 资源的名称。

5.2.3. 导出器配置

虽然 Instrumentation 自定义资源支持为每个信号设置一个或多个导出器,但自动检测方式仅配置 OTLP Exporter。因此,您必须配置端点以指向 Collector 上的 OTLP Receiver。

使用配置映射导出器 TLS CA 配置示例

apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
# ...
spec
# ...
  exporter:
    endpoint: https://production-collector.observability.svc.cluster.local:4317  
1

    tls:
      configMapName: ca-bundle  
2

      ca_file: service-ca.crt 
3

# ...
Copy to Clipboard Toggle word wrap

1
使用 HTTPS 方案和 TLS 指定 OTLP 端点。
2
指定配置映射的名称。配置映射必须已存在于注入自动检测的 pod 命名空间中。
3
如果工作负载文件系统中已存在证书,则指向配置映射中的 CA 证书或证书的绝对路径。

使用 Secret 的 exporter mTLS 配置示例

apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
# ...
spec
# ...
  exporter:
    endpoint: https://production-collector.observability.svc.cluster.local:4317  
1

    tls:
      secretName: serving-certs 
2

      ca_file: service-ca.crt 
3

      cert_file: tls.crt 
4

      key_file: tls.key 
5

# ...
Copy to Clipboard Toggle word wrap

1
使用 HTTPS 方案和 TLS 指定 OTLP 端点。
2
指定 ca_file, cert_file, 和 key_file 值的 Secret 名称。Secret 必须已存在于注入自动检测的 pod 命名空间中。
3
如果工作负载文件系统中已存在证书,指向 Secret 中的 CA 证书或证书的绝对路径。
4
如果工作负载文件系统中已存在证书,指向 Secret 中的客户端证书或证书的绝对路径。
5
如果工作负载文件系统中已存在密钥,指向 Secret 中的客户端密钥或到密钥的绝对路径。
注意

您可以在配置映射或 Secret 中提供 CA 证书。如果您同时提供它,则配置映射的优先级高于 Secret。

使用配置映射和 Instrumentation CR 的 CA 捆绑包注入配置示例

apiVersion: v1
kind: ConfigMap
metadata:
  name: otelcol-cabundle
  namespace: tutorial-application
  annotations:
    service.beta.openshift.io/inject-cabundle: "true"
# ...
---
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: my-instrumentation
spec:
  exporter:
    endpoint: https://simplest-collector.tracing-system.svc.cluster.local:4317
    tls:
      configMapName: otelcol-cabundle
      ca: service-ca.crt
# ...
Copy to Clipboard Toggle word wrap

5.2.4. 配置 Apache HTTP 服务器自动检测

重要

Apache HTTP 服务器自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

Expand
表 5.4. .spec.apacheHttpd 字段的参数
Name描述default

attrs

特定于 Apache HTTP 服务器的属性。

 

configPath

Apache HTTP 服务器配置的位置。

/usr/local/apache2/conf

env

特定于 Apache HTTP 服务器的环境变量。

 

image

使用 Apache SDK 和自动检测的容器镜像。

 

resourceRequirements

计算资源要求。

 

version

Apache HTTP 服务器版本。

2.4

启用注入的 PodSpec 注解

instrumentation.opentelemetry.io/inject-apache-httpd: "true"
Copy to Clipboard Toggle word wrap

5.2.5. 配置 .NET 自动检测

重要

.NET 自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

重要

默认情况下,此功能注入不受支持的上游检测库。

Expand
Name描述

env

特定于 .NET 的环境变量。

image

带有 .NET SDK 和自动检测的容器镜像。

resourceRequirements

计算资源要求。

对于 .NET 自动检测,如果需要的 OTEL_EXPORTER_OTLP_ENDPOINT 环境变量,如果导出器的端点被设置为 4317,则必须设置所需的 OTEL_EXPORTER_OTLP_ENDPOINT 环境变量。默认情况下,.NET autoinstrumentation 使用 http/proto,遥测数据必须设置为 4318 端口。

启用注入的 PodSpec 注解

instrumentation.opentelemetry.io/inject-dotnet: "true"
Copy to Clipboard Toggle word wrap

5.2.6. 配置 Go 自动检测

重要

Go auto-instrumentation 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

重要

默认情况下,此功能注入不受支持的上游检测库。

Expand
Name描述

env

特定于 Go 的环境变量。

image

带有 Go SDK 和自动检测的容器镜像。

resourceRequirements

计算资源要求。

启用注入的 PodSpec 注解

instrumentation.opentelemetry.io/inject-go: "true"
instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/<path>/<to>/<container>/<executable>" 
1
Copy to Clipboard Toggle word wrap

1
为所需的 OTEL_GO_AUTO_TARGET_EXE 环境变量的值设置值。

OpenShift 集群中 Go 自动恢复所需的权限

apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
  name: otel-go-instrumentation-scc
allowHostDirVolumePlugin: true
allowPrivilegeEscalation: true
allowPrivilegedContainer: true
allowedCapabilities:
- "SYS_PTRACE"
fsGroup:
  type: RunAsAny
runAsUser:
  type: RunAsAny
seLinuxContext:
  type: RunAsAny
seccompProfiles:
- '*'
supplementalGroups:
  type: RunAsAny
Copy to Clipboard Toggle word wrap

提示

为 OpenShift 集群中的 Go auto-instrumentation 应用权限的 CLI 命令如下:

$ oc adm policy add-scc-to-user otel-go-instrumentation-scc -z <service_account>
Copy to Clipboard Toggle word wrap

5.2.7. 配置 Java 自动检测

重要

Java 自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

重要

默认情况下,此功能注入不受支持的上游检测库。

Expand
Name描述

env

特定于 Java 的环境变量。

image

使用 Java SDK 和自动检测的容器镜像。

resourceRequirements

计算资源要求。

启用注入的 PodSpec 注解

instrumentation.opentelemetry.io/inject-java: "true"
Copy to Clipboard Toggle word wrap

5.2.8. 配置 Node.js 自动检测

重要

Node.js 自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

重要

默认情况下,此功能注入不受支持的上游检测库。

Expand
Name描述

env

特定于 Node.js 的环境变量。

image

使用 Node.js SDK 和自动检测的容器镜像。

resourceRequirements

计算资源要求。

用于启用注入的 PodSpec 注解

instrumentation.opentelemetry.io/inject-nodejs: "true"
Copy to Clipboard Toggle word wrap

5.2.9. 配置 Python 自动检测

重要

Python 自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

重要

默认情况下,此功能注入不受支持的上游检测库。

Expand
Name描述

env

特定于 Python 的环境变量。

image

使用 Python SDK 和自动检测的容器镜像。

resourceRequirements

计算资源要求。

对于 Python 自动检测,如果导出器的端点被设置为 4317,则必须设置 OTEL_EXPORTER_OTLP_ENDPOINT 环境变量。Python 自动检测默认使用 http/proto,并且遥测数据必须设置为 4318 端口。

启用注入的 PodSpec 注解

instrumentation.opentelemetry.io/inject-python: "true"
Copy to Clipboard Toggle word wrap

5.2.10. 多容器 pod

根据 pod 规格,检测被注入到默认可用的容器。您还可以指定用于注入的目标容器名称。

Pod 注解

instrumentation.opentelemetry.io/container-names: "<container_1>,<container_2>" 
1
Copy to Clipboard Toggle word wrap

1
当您要在多个容器中注入单个工具时,请使用此注解。
注意

Go 自动检测不支持多容器自动检测注入。

5.2.11. 具有多个检测的多容器 pod

将应用程序语言的检测注入多容器 pod 中的一个或多个容器需要以下注解:

instrumentation.opentelemetry.io/<application_language>-container-names: "<container_1>,<container_2>" 
1
Copy to Clipboard Toggle word wrap
1
您只能为每个容器注入一个语言的检测。有关支持的 <application_language> 值列表,请查看下表。
Expand
表 5.5. <application_language> 支持的值
语言<application_language> 的值

ApacheHTTPD

apache-httpd

DotNet

dotnet

Java

java

NGINX

inject-nginx

NodeJS

nodejs

Python

python

SDK

sdk

5.2.12. 使用带有 Service Mesh 的检测 CR

Instrumentation 自定义资源(CR )与 Red Hat OpenShift Service Mesh 搭配使用时,必须使用 b3multi propagator。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat