第 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"

表 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.2. 自动检测的默认协议
自动检测默认协议

Java 1.x

otlp/grpc

Java 2.x

otlp/http

Python

otlp/http

.NET

otlp/http

Go

otlp/http

Apache HTTP 服务器

otlp/grpc

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
表 4.3. instrumentation.opentelemetry.io/inject-sdk 注解的值
value描述

"true"

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

"false"

注入 no Instrumentation 资源。

"<instrumentation_name>"

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

"<namespace>/<instrumentation_name>"

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

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
# ...

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
# ...

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

您可以在配置映射或 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)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

表 4.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"

4.1.5. 配置 .NET 自动检测

重要

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

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

重要

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

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.6. 配置 Go 自动检测

重要

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

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

重要

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

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.7. 配置 Java 自动检测

重要

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

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

重要

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

Name描述

env

特定于 Java 的环境变量。

image

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

resourceRequirements

计算资源要求。

启用注入的 PodSpec 注解

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

4.1.8. 配置 Node.js 自动检测

重要

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

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

重要

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

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.9. 配置 Python 自动检测

重要

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

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

重要

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

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.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&gt; 值列表,请查看下表。
表 4.5. < application_language> 支持的值
语言< application_language> 的值

ApacheHTTPD

Apache

DotNet

dotnet

Java

java

NGINX

inject-nginx

NodeJS

nodejs

Python

python

SDK

sdk

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.