1 - 使用 OpenTelemetry Collector 收集追踪

如何使用 Dapr 通过 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 协议。

使用 OpenTelemetry Collector 集成多个后端

先决条件

配置 OTEL Collector 推送追踪数据到您的后端

  1. 查看 open-telemetry-collector-generic.yaml

  2. <your-exporter-here> 替换为您的追踪导出器的实际配置。

  3. 使用以下命令应用配置:

    kubectl apply -f open-telemetry-collector-generic.yaml
    

配置 Dapr 发送追踪数据到 OTEL Collector

创建一个 Dapr 配置文件以启用追踪,并部署一个使用 OpenTelemetry Collector 的追踪导出器组件。

  1. 使用此 collector-config.yaml 文件创建您的配置。

  2. 使用以下命令应用配置:

    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 将跟踪信息发送到应用程序洞察

如何使用 OpenTelemetry Collector 将跟踪事件推送到 Azure 应用程序洞察。

Dapr 使用 Zipkin API 集成了 OpenTelemetry (OTEL) Collector。本指南演示了如何通过 Dapr 使用 OpenTelemetry Collector 将跟踪事件推送到 Azure 应用程序洞察。

前提条件

配置 OTEL Collector 以推送数据到应用程序洞察

要将事件推送到你的应用程序洞察实例,请在 Kubernetes 集群中安装 OTEL Collector。

  1. 查看 open-telemetry-collector-appinsights.yaml 文件。

  2. 用你的应用程序洞察仪器密钥替换 <INSTRUMENTATION-KEY> 占位符。

  3. 使用以下命令应用配置:

    kubectl apply -f open-telemetry-collector-appinsights.yaml
    

配置 Dapr 以发送跟踪数据到 OTEL Collector

创建一个 Dapr 配置文件以启用跟踪,并部署一个使用 OpenTelemetry Collector 的跟踪导出组件。

  1. 使用此 collector-config.yaml 文件创建你自己的配置。

  2. 使用以下命令应用配置:

    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 会自动为你处理分布式跟踪。

查看跟踪

部署并运行一些应用程序。几分钟后,你应该会在你的应用程序洞察资源中看到跟踪日志。你还可以使用 应用程序地图 来检查你的服务拓扑,如下所示:

应用程序地图

相关链接

3 - 使用 OpenTelemetry Collector 收集追踪信息并发送到 Jaeger

如何使用 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。

前提条件

设置 OpenTelemetry Collector 推送到 Jaeger

要将追踪信息推送到您的 Jaeger 实例,请在您的 Kubernetes 集群上安装 OpenTelemetry Collector。

  1. 下载并检查 open-telemetry-collector-jaeger.yaml 文件。

  2. otel-collector-conf ConfigMap 的数据部分,更新 otlp/jaeger.endpoint 值以匹配您的 Jaeger collector Kubernetes 服务对象的端点。

  3. 将 OpenTelemetry Collector 部署到运行 Dapr 应用程序的相同命名空间中:

    kubectl apply -f open-telemetry-collector-jaeger.yaml
    

设置 Dapr 发送追踪信息到 OpenTelemetryCollector

创建一个 Dapr 配置文件以启用追踪,并将 sidecar 追踪信息导出到 OpenTelemetry Collector。

  1. 使用 collector-config-otel.yaml 文件创建您自己的 Dapr 配置。

  2. 更新 namespaceotel.endpointAddress 值以与部署 Dapr 应用程序和 OpenTelemetry Collector 的命名空间对齐。

  3. 应用配置:

    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。

jaeger

参考资料