This is the multi-page printable view of this section. Click here to print.
OpenTelemetry Collector
1 - 使用 OpenTelemetry Collector 收集追踪数据
Dapr 使用 OpenTelemetry (OTLP) 协议直接写入追踪数据,这是推荐的方法。对于直接支持 OTLP 的可观测性工具,建议使用 OpenTelemetry Collector,因为它允许应用程序快速卸载数据,并包含重试、批处理和加密等功能。更多信息,请阅读 OpenTelemetry Collector 文档。
Dapr 也可以使用 Zipkin 协议写入追踪数据。在支持 OTLP 协议之前,Zipkin 协议与 OpenTelemetry Collector 一起使用,将追踪数据发送到 AWS X-Ray、Google Cloud Operations Suite 和 Azure Monitor 等可观测性工具。两种协议方法都是有效的,但 OpenTelemetry 协议是推荐的选择。

前提条件
- 在 Kubernetes 上安装 Dapr
- 验证您的追踪后端已设置好接收追踪数据
- 查看您的 OTEL Collector exporter 所需的参数:
设置 OTEL Collector 以推送到您的追踪后端
将
<your-exporter-here>部分替换为您的追踪 exporter 的正确设置。- 参考前提条件部分中的 OTEL Collector 链接来确定正确的设置。
使用以下命令应用配置:
kubectl apply -f open-telemetry-collector-generic.yaml
设置 Dapr 以将追踪数据发送到 OTEL Collector
设置一个 Dapr 配置文件来启用追踪,并部署一个使用 OpenTelemetry Collector 的追踪 exporter 组件。
使用此
collector-config.yaml文件创建您自己的配置。使用以下命令应用配置:
kubectl apply -f collector-config.yaml
使用追踪功能部署您的应用
通过在要参与分布式追踪的容器上添加 dapr.io/config 注解来应用 appconfig 配置,如下例所示:
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "MyApp"
dapr.io/app-port: "8080"
dapr.io/config: "appconfig"
您可以同时注册多个追踪 exporter,追踪日志会转发到所有已注册的 exporter。
就这样!无需包含任何 SDK 或检测您的应用程序代码。Dapr 会自动为您处理分布式追踪。
查看追踪数据
部署并运行一些应用程序。等待追踪数据传播到您的追踪后端,然后在那里查看它们。
相关链接
2 - 使用 OpenTelemetry Collector 收集追踪数据并发送到 Application Insights
Dapr 使用 OpenTelemetry 协议 (OTLP) 与 OpenTelemetry (OTEL) Collector 集成。本指南通过一个示例演示如何使用 Dapr 通过 OpenTelemetry Collector 将追踪数据推送到 Azure Application Insights。
前置条件
- 在 Kubernetes 上安装 Dapr
- 创建 Application Insights 资源 并记下你的 Application Insights 连接字符串。
设置 OTEL Collector 将数据推送到你的 Application Insights 实例
要将追踪数据推送到你的 Application Insights 实例,请在 Kubernetes 集群上安装 OpenTelemetry Collector。
将
<CONNECTION_STRING>占位符替换为你的 Application Insights 连接字符串。将 OpenTelemetry Collector 部署到运行 Dapr 应用的同一命名空间:
kubectl apply -f open-telemetry-collector-appinsights.yaml
设置 Dapr 将追踪数据发送到 OpenTelemetry Collector
创建 Dapr 配置文件以启用追踪,并通过 OTLP 将追踪数据发送到 OpenTelemetry Collector。
下载并查看
collector-config-otel.yaml。更新namespace和otel.endpointAddress值,使其与部署 Dapr 应用和 OpenTelemetry Collector 的命名空间一致。使用以下命令应用配置:
kubectl apply -f collector-config-otel.yaml
部署启用追踪的应用
通过向要包含在分布式追踪中的 Dapr 应用添加 dapr.io/config 注解来应用 tracing 配置,如下例所示:
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "MyApp"
dapr.io/app-port: "8080"
dapr.io/config: "tracing"
你可以同时注册多个追踪导出器,追踪日志将转发到所有已注册的导出器。
就是这样!无需包含任何 SDK 或对应用程序代码进行插桩。Dapr 会自动为你处理分布式追踪。
查看追踪数据
部署并运行一些应用程序。几分钟后,你应该会看到追踪日志出现在你的 Application Insights 资源中。你还可以使用 Application Map 来检查服务的拓扑,如下所示:

注意
Application Map 拓扑中仅显示通过 Dapr 边车暴露的 Dapr API 进行的操作(例如服务调用或事件发布)。相关链接
3 - 使用 Dynatrace OpenTelemetry Collector 收集追踪信息并发送到 Dynatrace
Dapr 使用 OpenTelemetry 协议(OTLP)与 Dynatrace Collector 集成。本指南将通过一个示例演示如何使用 Dapr 通过 Dynatrace 版本的 OpenTelemetry Collector 向 Dynatrace 推送追踪信息。
注意
本指南指的是 Dynatrace OpenTelemetry Collector,它使用与开源 Collector 相同的 Helm chart,但使用 Dynatrace 维护的镜像进行覆盖,以提供更好的支持和 Dynatrace 特定功能。前置条件
- 在 Kubernetes 上安装 Dapr
- 访问 Dynatrace 租户以及具有
openTelemetryTrace.ingest、metrics.ingest和logs.ingest作用域的 API 令牌 - Helm
设置 Dynatrace OpenTelemetry Collector 以推送到您的 Dynatrace 实例
要将追踪信息推送到您的 Dynatrace 实例,请在您的 Kubernetes 集群上安装 Dynatrace OpenTelemetry Collector。
使用您的 Dynatrace 凭证创建 Kubernetes secret:
kubectl create secret generic dynatrace-otelcol-dt-api-credentials \ --from-literal=DT_ENDPOINT=https://YOUR_TENANT.live.dynatrace.com/api/v2/otlp \ --from-literal=DT_API_TOKEN=dt0s01.YOUR_TOKEN_HERE将
YOUR_TENANT替换为您的 Dynatrace 租户 ID,将YOUR_TOKEN_HERE替换为您的 Dynatrace API 令牌。使用 Dynatrace OpenTelemetry Collector 发行版以获得比开源版本更好的默认值和支持。下载并检查
collector-helm-values.yaml文件。这基于 k8s enrichment demo,并包含 Kubernetes 元数据增强以获得适当的 pod/namespace/cluster 上下文。使用 Helm 部署 Dynatrace Collector。
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts helm repo update helm upgrade -i dynatrace-collector open-telemetry/opentelemetry-collector -f collector-helm-values.yaml
设置 Dapr 以将追踪信息发送到 Dynatrace Collector
创建 Dapr 配置文件以启用追踪,并通过 OTLP 将追踪信息发送到 OpenTelemetry Collector。
更新以下文件以确保
endpointAddress指向 Kubernetes 集群中的 Dynatrace OpenTelemetry Collector 服务。如果在default命名空间中部署,通常是dynatrace-collector.default.svc.cluster.local。重要提示: 确保
endpointAddress不包含http://前缀,以避免 URL 编码问题:apiVersion: dapr.io/v1alpha1 kind: Configuration metadata: name: tracing spec: tracing: samplingRate: "1" otel: endpointAddress: "dynatrace-collector.default.svc.cluster.local:4318" # 使用您的 collector 服务地址更新应用配置:
kubectl apply -f collector-config-otel.yaml
使用追踪部署应用
通过向要包含在分布式追踪中的 Dapr 应用添加 dapr.io/config 注解来应用 tracing 配置,如以下示例所示:
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "MyApp"
dapr.io/app-port: "8080"
dapr.io/config: "tracing"
您可以同时注册多个追踪导出器,追踪日志将转发到所有已注册的导出器。
就是这样!无需包含任何 SDK 或对应用代码进行检测。Dapr 会自动为您处理分布式追踪。
查看追踪
部署并运行一些应用。几分钟后,您应该会看到追踪信息出现在您的 Dynatrace 租户中:
- 在 Dynatrace UI 中导航到 Search > Distributed tracing。
- 按服务名称筛选以查看您的 Dapr 应用及其关联的追踪 span。

注意
只有通过 Dapr 边车暴露的 Dapr API 的操作(例如服务调用或事件发布)才会显示在 Dynatrace 分布式追踪中。禁用 OneAgent daprd 监控
如果您在集群中运行 Dynatrace OneAgent,您应该将 daprd 边车容器从 OneAgent 监控中排除,以防止此配置中的干扰。排除它可以防止任何可能破坏功能或导致追踪混乱的自动注入尝试。
将此注解添加到您的应用部署或在 dynakube 配置文件中全局添加:
metadata:
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "MyApp"
dapr.io/app-port: "8080"
dapr.io/config: "tracing"
container.inject.dynatrace.com/daprd: "false" # 排除 dapr sidecar 被 OneAgent 自动监控
相关链接
- 尝试 可观测性快速入门
- 了解如何设置追踪配置选项
- Dynatrace OpenTelemetry 文档
- 使用 Kubernetes 元数据增强 OTLP 遥测数据
4 - 使用 OpenTelemetry 向 Jaeger V2 发送 traces
Dapr 支持使用 OpenTelemetry (OTLP) 协议写入 traces,而 Jaeger V2 原生支持 OTLP,允许 Dapr 直接向 Jaeger V2 实例发送 traces。这种方法推荐用于生产环境,以利用 Jaeger V2 的分布式追踪能力。
在自托管模式下配置 Jaeger V2
本地设置
启动 Jaeger 最简单的方式是运行发布到 DockerHub 的预构建 all-in-one Jaeger 镜像并暴露 OTLP 端口:
注意: 端口 9411 通常由 Zipkin 使用。如果你正在运行 Zipkin(运行
dapr init时默认启动),请先停止dapr_zipkin容器以避免端口冲突:docker stop dapr_zipkin
docker run -d --rm --name jaeger \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 5778:5778 \
-p 9411:9411 \
cr.jaegertracing.io/jaegertracing/jaeger:2.11.0
你也可以使用以下命令查看 jaeger 容器的日志:
docker logs jaeger
配置 Dapr 追踪
你有两个选项来配置 Dapr 向 Jaeger V2 发送 traces:
选项 1:使用自定义配置文件
创建一个包含以下内容的 config.yaml 文件:
注意: 由于你使用 OpenTelemetry 协议与 Jaeger 通信,你需要填写追踪配置的
otel部分,并将endpointAddress设置为 Jaeger 容器的地址。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: tracing
namespace: default
spec:
tracing:
samplingRate: "1"
stdout: true
otel:
endpointAddress: "localhost:4317"
isSecure: false
protocol: grpc
要启动引用新 YAML 配置文件的应用程序,请使用 --config 选项。例如:
dapr run --app-id myapp --app-port 3000 node app.js --config config.yaml
选项 2:更新默认 Dapr 配置(开发环境)
或者,在你的开发环境中,导航到你的本地 Dapr 组件目录并使用上述 OTLP 配置更新默认的 config.yaml 文件。这样,所有 Dapr 应用程序将默认使用 Jaeger V2 追踪配置,无需每次指定 --config 标志。
查看 traces
要在浏览器中查看 traces,请访问 http://localhost:16686 以查看 Jaeger UI。
在 Kubernetes 上配置 Jaeger V2
以下步骤展示了如何配置 Dapr 将分布式追踪数据直接发送到使用 OpenTelemetry Operator 部署的 Jaeger V2 实例,该实例使用内存存储。
前提条件
使用 OpenTelemetry Operator 设置 Jaeger V2
Jaeger V2 可以使用 OpenTelemetry Operator 部署,以简化管理并获得原生 OTLP 支持。以下示例配置了使用内存存储的 Jaeger V2。
存储后端说明: 此示例使用内存存储(
memstore)以简化操作,适用于开发或测试环境,因为它在内存中最多存储 100,000 条 traces。对于生产环境,请考虑配置持久化存储后端(如 Cassandra 或 Elasticsearch)以确保 trace 数据的持久性。
安装
注意: 为了使 API 服务器与 Operator 的 webhook 组件通信,webhook 需要 API 服务器配置为信任的 TLS 证书。你可以使用几种不同的方式来生成/配置所需的 TLS 证书,详细信息见 otel operator chart 文档
为简化操作,你可以使用 Helm 创建自动生成的自签名证书。
安装 OpenTelemetry Operator:
helm install opentelemetry-operator open-telemetry/opentelemetry-operator -n opentelemetry-operator-system --create-namespace \ --set "manager.collectorImage.repository=ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-k8s" \ --set admissionWebhooks.certManager.enabled=false \ --set admissionWebhooks.autoGenerateCert.enabled=true确认
opentelemetry-operator-system命名空间中的所有资源已就绪。部署使用内存存储的 Jaeger V2 实例: 创建一个名为
jaeger-inmemory.yaml的文件,包含以下配置:apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: name: jaeger-inmemory-instance namespace: observability spec: image: jaegertracing/jaeger:latest ports: - name: jaeger port: 16686 config: service: extensions: [jaeger_storage, jaeger_query] pipelines: traces: receivers: [otlp] exporters: [jaeger_storage_exporter] extensions: jaeger_query: storage: traces: memstore jaeger_storage: backends: memstore: memory: max_traces: 100000 receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: jaeger_storage_exporter: trace_storage: memstore使用以下命令应用它:
kubectl apply -f jaeger-inmemory.yaml -n observability
设置 Dapr 向 Jaeger V2 发送 traces
创建一个 Dapr 配置文件以启用追踪,并将边车 traces 直接导出到 Jaeger V2 实例。
创建一个配置文件(例如
tracing.yaml),包含以下内容,更新namespace和otel.endpointAddress以匹配你的 Jaeger V2 实例:apiVersion: dapr.io/v1alpha1 kind: Configuration metadata: name: tracing namespace: order-system spec: tracing: samplingRate: "1" otel: endpointAddress: "jaeger-inmemory-instance-collector.observability.svc.cluster.local:4317" isSecure: false protocol: grpc应用配置:
kubectl apply -f tracing.yaml -n order-system
启用追踪部署应用
通过在要启用分布式追踪的应用程序部署中添加 dapr.io/config 注解来应用 tracing Dapr 配置,如以下示例所示:
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "MyApp"
dapr.io/app-port: "8080"
dapr.io/config: "tracing"
你可以同时注册多个追踪导出器,追踪日志将转发到所有已注册的导出器。
就是这样!无需包含 OpenTelemetry SDK 或检测应用程序代码。Dapr 会自动为你处理分布式追踪。
查看 traces
要查看 Dapr 边车 traces,请转发 Jaeger V2 服务的端口并打开 UI:
kubectl port-forward svc/jaeger-inmemory-instance-collector 16686:16686 -n observability
在浏览器中,访问 http://localhost:16686 以查看 Jaeger V2 UI。
