追踪Dapr应用程序
立即解锁
发布时间: 2025-08-14 00:32:15 阅读量: 15 订阅数: 14 


使用Dapr和.NET构建微服务实践指南
### 追踪 Dapr 应用程序
在微服务架构日益流行的今天,应用程序的可观测性变得至关重要。本文将介绍如何使用 Zipkin、Prometheus 和 Grafana 来收集和分析 Dapr 应用程序的跟踪信息、日志和指标,帮助我们更好地理解应用程序的行为。
#### 1. Dapr 应用程序的可观测性
在单体应用程序中,理解应用程序的行为相对简单,通过监控有限节点上的一些进程活动以及它们对 CPU 和内存的使用情况,再结合日志文件,就可以对应用程序的行为有一个较好的了解。
然而,当我们构建基于业务能力的微服务时,情况变得复杂起来。微服务数量的增加意味着需要监控更多的进程,这些进程之间可能相互关联,甚至依赖外部组件。微服务的生命周期更短,可能需要根据当前负载进行扩展,并且 Docker 的使用在节点和代码之间增加了一层抽象。
在这种情况下,微服务的可观测性变得尤为重要。可观测性的主要目标是从不同主机(节点和容器)上运行的各种进程中收集指标、日志和跟踪信息,并将这些信号相互关联,以提供客户端请求或作业的完整视图。
Dapr 支持分布式跟踪,它可以自动关联请求在 Dapr 运行时、服务代码以及 Dapr 服务和组件之间跨越边界时的跟踪信息。作为一个运行时,Dapr 只需要配置跟踪并决定将跟踪信息导出到哪里,无需安装和维护额外的框架或包。此外,Dapr 还会暴露整个 Dapr 基础设施的指标,让我们对 Dapr 在 Kubernetes 或自托管环境中的运行情况有全面的了解。
重要提示:Dapr 采用了 OpenTelemetry,这是一个云原生计算基金会(CNCF)的项目,旨在促进与跟踪、指标和日志相关的框架和工具的集成。通过 OpenTelemetry 收集器,Dapr 可以将跟踪信息导出到任何与 OpenTelemetry 集成的后端和平台。
#### 2. 使用 Zipkin 进行跟踪
Zipkin 是一个开源的分布式跟踪系统,它允许我们通过标识符(ID)、服务、操作或标签搜索跟踪信息,并展示服务之间的依赖关系。
以下是在 Kubernetes 上的 Dapr 中设置 Zipkin 的步骤:
1. **设置 Zipkin**
- Zipkin 以 Docker 容器的形式分发,我们可以使用以下 `Deploy\deploy-zipkin.yaml` 文件将其部署到 Kubernetes:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: zipkin
labels:
app: zipkin
spec:
replicas: 1
selector:
matchLabels:
app: zipkin
template:
metadata:
labels:
app: zipkin
spec:
containers:
- name: zipkin
image: openzipkin/zipkin
ports:
- containerPort: 9411
---
apiVersion: v1
kind: Service
metadata:
name: zipkin
namespace: default
labels:
app: zipkin
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 9411
targetPort: 9411
selector:
app: zipkin
```
- 使用以下命令将配置应用到 Kubernetes:
```bash
PS C:\Repos\practical-dapr\chapter11> kubectl apply -f .\Deploy\zipkin.yaml
```
- 访问 Kubernetes 上的 Zipkin 有两种方式:一是创建一个 ingress 到 Zipkin 服务,并限制从客户端 IP 地址的访问路径;二是使用 `kubectl` 的端口转发命令,例如:
```bash
PS C:\Repos\practical-dapr\chapter11> kubectl port-forward svc/zipkin 9412:9411
```
2. **使用 Zipkin 配置跟踪**
- 我们需要配置 Dapr 将所有分布式跟踪信息发送到 Zipkin。`\Deploy\configuration-zipkin.yaml` 文件中有一个名为 `tracing` 的 Dapr 配置,适合我们的需求:
```yaml
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"
mtls:
enabled: true
workloadCertTTL: 24h
allowedClockSkew: 15m
```
- 使用以下命令应用配置:
```bash
PS C:\Repos\practical-dapr\chapter11> kubectl apply -f .\Deploy\configuration-zipkin.yaml
```
3. **在 Dapr 中启用跟踪**
-
0
0
复制全文
相关推荐










