第 4 章 配置检测
OpenTelemetry 检测注入只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Red Hat build of OpenTelemetry Operator 使用定义检测配置的自定义资源定义 (CRD) 文件。
4.1. OpenTelemetry 检测配置选项
红帽构建的 OpenTelemetry 可以注入并配置 OpenTelemetry 自动检测库到您的工作负载。目前,项目支持注入来自 Go、Java、Node.js、Python、.NET 和 Apache HTTP 服务器 (httpd
) 的检测库。
OpenTelemetry 中的自动检测是指框架在没有手动代码更改的情况下自动检测应用程序的功能。这可让开发人员和管理员以最少的努力和更改现有代码库来观察到其应用程序中。
红帽构建的 OpenTelemetry Operator 仅支持工具库的注入机制,但不支持检测库或上游镜像。客户可以构建自己的检测镜像,或使用社区镜像。
4.1.1. 检测选项
检测选项在 Instrumentation
自定义资源 (CR) 中指定。
Instrumentation
CR 示例
apiVersion: opentelemetry.io/v1alpha1 kind: Instrumentation metadata: name: java-instrumentation spec: env: - name: OTEL_EXPORTER_OTLP_TIMEOUT value: "20" exporter: endpoint: http://production-collector.observability.svc.cluster.local:4317 propagators: - w3c sampler: type: parentbased_traceidratio argument: "0.25" java: env: - name: OTEL_JAVAAGENT_DEBUG value: "true"
参数 | 描述 | 值 |
---|---|---|
| 在所有检测中要定义的通用环境变量。 | |
| 导出器配置。 | |
| Propagators 定义进程上下文传播配置。 |
|
| 资源属性配置。 | |
| 抽样配置。 | |
| Apache HTTP 服务器检测的配置。 | |
| 配置 .NET 检测。 | |
| 配置 Go 检测。 | |
| Java 检测配置。 | |
| 配置 Node.js 检测。 | |
| Python 检测配置。 |
4.1.2. 配置 Apache HTTP 服务器自动检测
Name | 描述 | default |
---|---|---|
| 特定于 Apache HTTP 服务器的属性。 | |
| Apache HTTP 服务器配置的位置。 | /usr/local/apache2/conf |
| 特定于 Apache HTTP 服务器的环境变量。 | |
| 使用 Apache SDK 和自动检测的容器镜像。 | |
| 计算资源要求。 | |
| Apache HTTP 服务器版本。 | 2.4 |
启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-apache-httpd: "true"
4.1.3. 配置 .NET 自动检测
Name | 描述 |
---|---|
| 特定于 .NET 的环境变量。 |
| 带有 .NET SDK 和自动检测的容器镜像。 |
| 计算资源要求。 |
对于 .NET 自动检测,如果需要的 OTEL_EXPORTER_OTLP_ENDPOINT
环境变量,如果导出器的端点被设置为 4317
,则必须设置所需的 OTEL_EXPORTER_OTLP_ENDPOINT 环境变量。默认情况下,.NET autoinstrumentation 使用 http/proto
,遥测数据必须设置为 4318
端口。
启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-dotnet: "true"
4.1.4. 配置 Go 自动检测
Name | 描述 |
---|---|
| 特定于 Go 的环境变量。 |
| 带有 Go SDK 和自动检测的容器镜像。 |
| 计算资源要求。 |
启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-go: "true"
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
为 OpenShift 集群中的 Go auto-instrumentation 应用权限的 CLI 命令如下:
$ oc adm policy add-scc-to-user otel-go-instrumentation-scc -z <service_account>
4.1.5. 配置 Java 自动检测
Name | 描述 |
---|---|
| 特定于 Java 的环境变量。 |
| 使用 Java SDK 和自动检测的容器镜像。 |
| 计算资源要求。 |
启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-java: "true"
4.1.6. 配置 Node.js 自动检测
Name | 描述 |
---|---|
| 特定于 Node.js 的环境变量。 |
| 使用 Node.js SDK 和自动检测的容器镜像。 |
| 计算资源要求。 |
用于启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-nodejs: "true" instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/path/to/container/executable"
instrumentation.opentelemetry.io/otel-go-auto-target-exe
注解设置所需的 OTEL_GO_AUTO_TARGET_EXE
环境变量的值。
4.1.7. 配置 Python 自动检测
Name | 描述 |
---|---|
| 特定于 Python 的环境变量。 |
| 使用 Python SDK 和自动检测的容器镜像。 |
| 计算资源要求。 |
对于 Python 自动检测,如果导出器的端点被设置为 4317
,则必须设置 OTEL_EXPORTER_OTLP_ENDPOINT
环境变量。Python 自动检测默认使用 http/proto
,并且遥测数据必须设置为 4318
端口。
启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-python: "true"
4.1.8. 配置 OpenTelemetry SDK 变量
pod 中的 OpenTelemetry SDK 变量可通过以下注解进行配置:
instrumentation.opentelemetry.io/inject-sdk: "true"
请注意,所有注解都接受以下值:
true
-
从命名空间中注入
Instrumentation
资源。 false
- 不注入任何检测。
instrumentation-name
- 从当前命名空间注入的检测资源的名称。
other-namespace/instrumentation-name
- 从另一个命名空间注入的检测资源的名称。
4.1.9. 多容器 pod
检测会根据 pod 规格在默认可用的第一个容器上运行。在某些情况下,您还可以为注入指定目标容器。
Pod 注解
instrumentation.opentelemetry.io/container-names: "<container_1>,<container_2>"
Go 自动检测不支持多容器自动检测注入。
4.1.10. 使用带有 Service Mesh 的检测 CR
当在 Red Hat OpenShift Service Mesh 中使用检测自定义资源 (CR) 时,您必须使用 b3multi
propagator。