Dapr 使用 Zipkin 协议进行分布式跟踪和指标收集。 由于 Zipkin 协议无处不在,许多后端被开箱即用,例如 Stackdriver、 Zipkin、 New Relic 等。 与 OpenTelemetry 收藏器组合,Dapr 可以导出跟踪到许多其他后端,包括但不局限于 Azure Monitor Datadog, Instanca, Jaeger, and SignalFX
Dapr 将 HTTP/GRPC Middleware 添加到 Dapr sidecar。 Middleware 拦截所有 Dapr 和应用程序流量,并自动注入关联ID以跟踪分布式事务。 此设计有如下优点:
Dapr 使用标准的 W3C 跟踪上下文标头。 对于 HTTP 请求,Dapr 使用 traceparent
标头。 对于 gRPC 请求,Dapr 使用 grpc-trace-bin
标头。 当请求到达时,如果没有跟踪 ID ,Dapr 将创建一个新的跟踪 ID。 否则,它将沿调用链传递跟踪 ID。
Read W3C distributed tracing for more background on W3C Trace Context.
Dapr uses probabilistic sampling. 采样率定义跟踪 Span 采样的概率,其值可以在0和1之间(包括)。 采样率定义跟踪 Span 采样的概率,其值可以在0和1之间(包括)。 默认采样率是0.0001(即每10000个span中采样一个)。
若要更改默认的跟踪行为,请使用配置文件(在自托管模式下)或 Kubernetes 配置对象(在 Kubernetes 模式下)。 例如,以下配置对象将采样率更改为 1(即每个Span都采样),并使用 Zipkin 协议将跟踪发送到位于 http://zipkin.default.svc.cluster.local 的 Zipkin 服务器:
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: tracing
namespace: default
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans"
注意:将 samplingRate
更改为0 完全禁用追踪。
关于如何在本地环境和 Kubernetes 环境中配置追踪的更多细节,请参阅 参考文档 部分。