This is the multi-page printable view of this section. Click here to print.
Open Telemetry Collector
- 1: 使用 OpenTelemetry Collector 收集追踪
- 2: 使用 OpenTelemetry Collector 将跟踪信息发送到应用程序洞察
- 3: 使用 OpenTelemetry Collector 收集追踪信息并发送到 Jaeger
1 - 使用 OpenTelemetry Collector 收集追踪
Dapr 推荐使用 OpenTelemetry (OTLP) 协议来写入追踪数据。对于直接支持 OTLP 的可观测性工具,建议使用 OpenTelemetry Collector,因为它可以快速卸载数据,并提供重试、批处理和加密等功能。更多信息请参阅 Open Telemetry Collector 的文档。
Dapr 也支持使用 Zipkin 协议来写入追踪数据。在 OTLP 协议支持之前,Zipkin 协议与 OpenTelemetry Collector 一起使用,以将追踪数据发送到 AWS X-Ray、Google Cloud Operations Suite 和 Azure Monitor 等可观测性工具。虽然两种协议都有效,但推荐使用 OpenTelemetry 协议。
先决条件
- 在 Kubernetes 上安装 Dapr
- 确保您的追踪后端已准备好接收追踪数据
- 查看 OTEL Collector 导出器所需的参数:
配置 OTEL Collector 推送追踪数据到您的后端
-
将
<your-exporter-here>
替换为您的追踪导出器的实际配置。- 请参考先决条件部分中的 OTEL Collector 链接以获取正确的配置。
-
使用以下命令应用配置:
kubectl apply -f open-telemetry-collector-generic.yaml
配置 Dapr 发送追踪数据到 OTEL Collector
创建一个 Dapr 配置文件以启用追踪,并部署一个使用 OpenTelemetry Collector 的追踪导出器组件。
-
使用此
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"
您可以同时注册多个追踪导出器,追踪数据将被转发到所有注册的导出器。
就是这样!无需包含任何 SDK 或对您的应用程序代码进行修改。Dapr 会自动为您处理分布式追踪。
查看追踪
部署并运行一些应用程序。等待追踪数据传播到您的追踪后端并在那里查看它们。
相关链接
2 - 使用 OpenTelemetry Collector 将跟踪信息发送到应用程序洞察
Dapr 使用 Zipkin API 集成了 OpenTelemetry (OTEL) Collector。本指南演示了如何通过 Dapr 使用 OpenTelemetry Collector 将跟踪事件推送到 Azure 应用程序洞察。
前提条件
- 在 Kubernetes 上安装 Dapr
- 设置一个应用程序洞察资源并记录下你的应用程序洞察仪器密钥。
配置 OTEL Collector 以推送数据到应用程序洞察
要将事件推送到你的应用程序洞察实例,请在 Kubernetes 集群中安装 OTEL Collector。
-
用你的应用程序洞察仪器密钥替换
<INSTRUMENTATION-KEY>
占位符。 -
使用以下命令应用配置:
kubectl apply -f open-telemetry-collector-appinsights.yaml
配置 Dapr 以发送跟踪数据到 OTEL Collector
创建一个 Dapr 配置文件以启用跟踪,并部署一个使用 OpenTelemetry Collector 的跟踪导出组件。
-
使用此
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"
你可以同时注册多个跟踪导出器,跟踪日志会被转发到所有注册的导出器。
就是这样!无需包含任何 SDK 或对你的应用程序代码进行额外的修改。Dapr 会自动为你处理分布式跟踪。
查看跟踪
部署并运行一些应用程序。几分钟后,你应该会在你的应用程序洞察资源中看到跟踪日志。你还可以使用 应用程序地图 来检查你的服务拓扑,如下所示:
注意
只有通过 Dapr sidecar 暴露的 Dapr API(例如,服务调用或事件发布)的操作会显示在应用程序地图拓扑中。相关链接
3 - 使用 OpenTelemetry Collector 收集追踪信息并发送到 Jaeger
Dapr 支持通过 OpenTelemetry (OTLP) 和 Zipkin 协议进行追踪信息的写入。然而,由于 Jaeger 对 Zipkin 的支持已被弃用,建议使用 OTLP。虽然 Jaeger 可以直接支持 OTLP,但在生产环境中,推荐使用 OpenTelemetry Collector 从 Dapr 收集追踪信息并发送到 Jaeger。这样可以让您的应用程序更高效地处理数据,并利用重试、批处理和加密等功能。更多信息请阅读 Open Telemetry Collector 文档。
在自托管模式下配置 Jaeger
本地设置
启动 Jaeger 的最简单方法是运行发布到 DockerHub 的预构建的 all-in-one Jaeger 镜像,并暴露 OTLP 端口:
docker run -d --name jaeger \
-p 4317:4317 \
-p 16686:16686 \
jaegertracing/all-in-one:1.49
接下来,在本地创建以下 config.yaml
文件:
注意: 因为您使用 Open Telemetry 协议与 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
查看追踪信息
要在浏览器中查看追踪信息,请访问 http://localhost:16686
查看 Jaeger UI。
在 Kubernetes 上使用 OpenTelemetry Collector 配置 Jaeger
以下步骤展示了如何配置 Dapr 以将分布式追踪数据发送到 OpenTelemetry Collector,然后将追踪信息发送到 Jaeger。
前提条件
- 在 Kubernetes 上安装 Dapr
- 使用 Jaeger Kubernetes Operator 设置 Jaeger
设置 OpenTelemetry Collector 推送到 Jaeger
要将追踪信息推送到您的 Jaeger 实例,请在您的 Kubernetes 集群上安装 OpenTelemetry Collector。
-
下载并检查
open-telemetry-collector-jaeger.yaml
文件。 -
在
otel-collector-conf
ConfigMap 的数据部分,更新otlp/jaeger.endpoint
值以匹配您的 Jaeger collector Kubernetes 服务对象的端点。 -
将 OpenTelemetry Collector 部署到运行 Dapr 应用程序的相同命名空间中:
kubectl apply -f open-telemetry-collector-jaeger.yaml
设置 Dapr 发送追踪信息到 OpenTelemetryCollector
创建一个 Dapr 配置文件以启用追踪,并将 sidecar 追踪信息导出到 OpenTelemetry Collector。
-
使用
collector-config-otel.yaml
文件创建您自己的 Dapr 配置。 -
更新
namespace
和otel.endpointAddress
值以与部署 Dapr 应用程序和 OpenTelemetry Collector 的命名空间对齐。 -
应用配置:
kubectl apply -f collector-config.yaml
部署启用追踪的应用程序
通过在您希望启用分布式追踪的应用程序部署中添加 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 会自动为您处理分布式追踪。
查看追踪信息
要查看 Dapr sidecar 追踪信息,请端口转发 Jaeger 服务并打开 UI:
kubectl port-forward svc/jaeger-query 16686 -n observability
在您的浏览器中,访问 http://localhost:16686
,您将看到 Jaeger UI。