第 4 章 配置和部署 OpenTelemetry 检测注入


重要

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. 检测选项

检测选项在 OpenTelemetryCollector 自定义资源中指定。

OpenTelemetryCollector 自定义资源文件示例

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"

表 4.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 检测配置。

 

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

当在 Red Hat OpenShift Service Mesh 中使用检测自定义资源 (CR) 时,您必须使用 b3multi propagator。

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

表 4.2. .spec.apacheHttpd 字段的 Prameters
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"

4.1.2.2. 配置 .NET 自动检测

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"

4.1.2.3. 配置 Go 自动检测

Name描述
env

特定于 Go 的环境变量。

image

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

resourceRequirements

计算资源要求。

启用注入的 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.2.4. 配置 Java 自动检测

Name描述
env

特定于 Java 的环境变量。

image

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

resourceRequirements

计算资源要求。

启用注入的 PodSpec 注解

instrumentation.opentelemetry.io/inject-java: "true"

4.1.2.5. 配置 Node.js 自动检测

Name描述
env

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

image

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

resourceRequirements

计算资源要求。

用于启用注入的 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.2.6. 配置 Python 自动检测

Name描述
env

特定于 Python 的环境变量。

image

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

resourceRequirements

计算资源要求。

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

启用注入的 PodSpec 注解

instrumentation.opentelemetry.io/inject-python: "true"

4.1.2.7. 配置 OpenTelemetry SDK 变量

pod 中的 OpenTelemetry SDK 变量可通过以下注解进行配置:

instrumentation.opentelemetry.io/inject-sdk: "true"

请注意,所有注解都接受以下值:

true
从命名空间中注入 Instrumentation 资源。
false
不注入任何检测。
instrumentation-name
从当前命名空间注入的检测资源的名称。
other-namespace/instrumentation-name
从另一个命名空间注入的检测资源的名称。

4.1.2.8. 多容器 pod

检测会根据 pod 规格在默认可用的第一个容器上运行。在某些情况下,您还可以为注入指定目标容器。

Pod 注解

instrumentation.opentelemetry.io/container-names: "<container_1>,<container_2>"

注意

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.