第 4 章 配置检测
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 检测配置。 |
自动检测 | 默认协议 |
---|---|
Java 1.x |
|
Java 2.x |
|
Python |
|
.NET |
|
Go |
|
Apache HTTP 服务器 |
|
4.1.2. 配置 OpenTelemetry SDK 变量
您可以使用 OpenTelemetry Collector 自定义资源中的 detection .opentelemetry.io/inject-sdk
注解来指示红帽构建的 OpenTelemetry Operator 将以下 OpenTelemetry SDK 环境变量注入
pod 中:
-
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
value | 描述 |
---|---|
|
将 |
|
注入 no |
|
指定要从当前命名空间注入的 |
|
指定要从另一个命名空间注入的 |
4.1.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 # ...
使用 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 # ...
您可以在配置映射或 Secret 中提供 CA 证书。如果您同时提供它,则配置映射的优先级高于 Secret。
使用配置映射和缩进 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 # ...
4.1.4. 配置 Apache HTTP 服务器自动检测
Apache HTTP 服务器自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Name | 描述 | default |
---|---|---|
| 特定于 Apache HTTP 服务器的属性。 | |
| Apache HTTP 服务器配置的位置。 |
|
| 特定于 Apache HTTP 服务器的环境变量。 | |
| 使用 Apache SDK 和自动检测的容器镜像。 | |
| 计算资源要求。 | |
| Apache HTTP 服务器版本。 | 2.4 |
启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-apache-httpd: "true"
4.1.5. 配置 .NET 自动检测
.NET 自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
默认情况下,此功能注入不受支持的上游检测库。
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.6. 配置 Go 自动检测
Go auto-instrumentation 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
默认情况下,此功能注入不受支持的上游检测库。
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.7. 配置 Java 自动检测
Java 自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
默认情况下,此功能注入不受支持的上游检测库。
Name | 描述 |
---|---|
| 特定于 Java 的环境变量。 |
| 使用 Java SDK 和自动检测的容器镜像。 |
| 计算资源要求。 |
启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-java: "true"
4.1.8. 配置 Node.js 自动检测
Node.js 自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
默认情况下,此功能注入不受支持的上游检测库。
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.9. 配置 Python 自动检测
Python 自动检测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
默认情况下,此功能注入不受支持的上游检测库。
Name | 描述 |
---|---|
| 特定于 Python 的环境变量。 |
| 使用 Python SDK 和自动检测的容器镜像。 |
| 计算资源要求。 |
对于 Python 自动检测,如果导出器的端点被设置为 4317
,则必须设置 OTEL_EXPORTER_OTLP_ENDPOINT
环境变量。Python 自动检测默认使用 http/proto
,并且遥测数据必须设置为 4318
端口。
启用注入的 PodSpec
注解
instrumentation.opentelemetry.io/inject-python: "true"
4.1.10. 多容器 pod
检测会根据 pod 规格在默认可用的第一个容器上运行。在某些情况下,您还可以为注入指定目标容器。
Pod 注解
instrumentation.opentelemetry.io/container-names: "<container_1>,<container_2>"
Go 自动检测不支持多容器自动检测注入。
4.1.11. 具有多个检测的多容器 pod
将应用程序语言的检测注入多容器 pod 中的一个或多个容器需要以下注解:
instrumentation.opentelemetry.io/<application_language>-container-names: "<container_1>,<container_2>" 1
- 1
- 您只能为每个容器注入一个语言的检测。有关支持的 <
application_language>
; 值列表,请查看下表。
语言 | < application_language> 的值 |
---|---|
ApacheHTTPD |
|
DotNet |
|
Java |
|
NGINX |
|
NodeJS |
|
Python |
|
SDK |
|
4.1.12. 使用带有 Service Mesh 的检测 CR
当在 Red Hat OpenShift Service Mesh 中使用检测自定义资源 (CR) 时,您必须使用 b3multi
propagator。