流分布式追踪
本节介绍如何追踪作为流数据管道一部分部署的应用程序。
Data Flow 分布式追踪架构围绕 Spring Cloud Sleuth 库设计,为与 OpenZipkin Brave 集成的分布式追踪解决方案提供 API。
Spring Cloud Sleuth 能够追踪您的流管道消息,并将追踪信息导出到外部系统进行分析和可视化。Spring Cloud Sleuth 支持 OpenZipkin
兼容系统,例如 Zipkin Server 或 Wavefront 分布式追踪。
所有 Spring Cloud 流应用程序 都预先配置为支持消息分布式追踪并导出到 Zipkin Server
和/或 Wavefront Tracing
。默认情况下,追踪导出功能处于禁用状态!使用 management.metrics.export.wavefront.enabled=true
和/或 spring.zipkin.enabled=true
启用向 Wavefront 或 Zipkin Server 导出追踪信息。下面提供了详细说明。有关 Sleuth 配置属性,请参阅 spring sleuth 属性。
下图显示了如何监控流应用程序的总体架构
对于基于 Spring Cloud Function
早期版本 3.1.x
的流应用程序,Spring Cloud Sleuth
库利用 Spring Integration 进行追踪检测。后者可能会为某些 Spring Integration 内部组件生成不必要的(噪音)追踪信息!
从 Spring Cloud Function 3.1+
开始,Spring Cloud Sleuth 跟踪仪表 为基于 SCF 的应用程序提供了更精准的跟踪信息。
检测自定义应用程序
要为您的自定义流应用程序启用分布式跟踪,您必须将以下依赖项添加到您的流应用程序中
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-wavefront</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${release.train.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
此外,您还必须关闭默认的跟踪信息导出。将以下属性添加到您的 application.properties
中
management.metrics.export.wavefront.enabled=false
spring.zipkin.enabled=true
可视化分布式跟踪
您还可以将跟踪信息导出到外部系统进行分析和可视化。Spring Cloud Sleuth 支持 OpenZipkin 兼容系统,例如 Wavefront 分布式跟踪 和 Zipkin 服务器。
使用 Wavefront 可视化
您可以使用 Wavefront 可视化从您部署的流管道收集的分布式跟踪数据。Wavefront 提供了不同的仪表板和浏览器来查看有关您的 应用程序
和 服务
的信息,您可以从一个导航到另一个以收集更多信息。
Wavefront 使用 应用程序
和 服务
概念对分布式跟踪进行分组。出于 Dataflow 的目的,Wavefront 应用程序
映射到流管道,而 服务
映射到流应用程序。因此,所有部署的 Spring Cloud Stream 应用程序启动器都配置了以下两个属性
wavefront.application.name
:包含发送跟踪的应用程序的流的名称。wavefront.application.service
:报告跟踪的应用程序的名称或标签。
要查找您的流跟踪,您应该导航 Wavefront 仪表板菜单到 应用程序/跟踪
然后,您可以搜索与您部署的流名称匹配的应用程序名称。例如,如果您部署了一个名为 scdf-stream-traces
的流管道,则可以选择在 Wavefront 中收集的跟踪,如下所示
按下 搜索
按钮,Wavefront 仪表板将显示类似于下图的内容
使用 Zipkin 服务器可视化
Zipkin 服务器 允许从已部署的流管道收集和可视化分布式跟踪数据。Zipkin 提供了不同的仪表板和浏览器来查看信息。
您也可以通过以下地址访问 Zipkin UI:http://your-zipkin-hostname:9411/zipkin。默认地址为 (http://localhost:9411/zipkin)。
如果日志文件中包含跟踪 ID,则可以直接跳转到该跟踪 ID。否则,您可以根据服务、操作名称、标签和持续时间等属性进行查询。系统将为您汇总一些有趣的数据,例如在服务中花费的时间百分比以及操作是否失败。
Zipkin UI 还提供了一个依赖关系图,显示了通过每个应用程序的跟踪请求数量。这有助于识别聚合行为,包括错误路径或对已弃用服务的调用。
平台安装
以下部分介绍如何为 Spring Cloud Data Flow 的不同平台部署配置分布式跟踪。
本地
本节介绍如何查看使用 Wavefront 或 Zipkin 服务器作为跟踪存储的流的应用程序分布式跟踪。Wavefront 是一种云产品,但您仍然可以在本地部署 Data Flow 并将其指向云托管的 Wavefront 系统。
Wavefront
要安装支持 Wavefront 的 Data Flow,请按照使用 Wavefront 进行监控 Docker Compose 说明进行操作。这样做会启动 Spring Cloud Data Flow、Skipper 和 Apache Kafka。
Wavefront 是一种 SaaS 产品,您需要先创建一个用户帐户。使用该帐户,您可以设置 WAVEFRONT_KEY
和 WAVEFRONT_URI
环境变量,如本文档稍后所述。
所有容器都运行后,部署一个使用 Kafka 的简单流
dataflow:>stream create scdf-stream-tracing --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy
然后按照使用 Wavefront 可视化说明进行操作。
Zipkin 服务器
您需要最新的流应用程序启动器(2020.0.3-SNAPSHOT 或更新版本
)。使用 STREAM_APPS_URI
变量设置正确的应用程序版本。(待办事项)。
要为 Zipkin 服务器
启用消息跟踪收集,请参阅 Zipkin 服务器 Docker Compose 说明。这样做会启动 Spring Cloud Data Flow、Skipper、Apache Kafka、Zipkin 服务器并为其启用消息跟踪。
所有容器都运行后,您可以在 http://localhost:9393/dashboard 访问 Spring Cloud Data Flow 仪表板
要查看仪表板的运行情况,请部署一个使用 Kafka 的简单流
dataflow:>stream create stream2 --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy
在 http://localhost:9411/zipkin 打开 Zipkin UI,然后按照使用 Zipkin 服务器可视化说明进行操作。
Kubernetes
本节介绍如何在云托管的 Wavefront 系统上查看流分布式跟踪。
Wavefront
Wavefront 是一种 SaaS 产品。您需要先创建一个用户帐户,并获取分配给您帐户的 API-KEY
和 WAVEFRONT-URI
。
按照常规的 Data Flow Kubernetes 安装说明进行操作。
然后将以下属性添加到您的 Spring Cloud Data Flow 服务器配置中(例如,src/kubernetes/server/server-config.yaml
),以启用 Wavefront 集成
management:
metrics:
export:
wavefront:
enabled: true
api-token: <YOUR API-KEY>
uri: <YOUR WAVEFRONT-URI>
source: demo-scdf-source
然后按照使用 Wavefront 可视化说明进行操作。
Zipkin 服务器
假设 Zipkin 服务器运行在 http://your-zipkin-server:9411
(它可以是 Kubernetes 集群的一部分,也可以是外部服务),可以将以下环境变量添加到您的 Spring Cloud Data Flow 部署配置中
env:
- name: SPRING_CLOUD_DATAFLOW_APPLICATIONPROPERTIES_STREAM_SPRING_ZIPKIN_ENABLED
value: true
- name: SPRING_CLOUD_DATAFLOW_APPLICATIONPROPERTIES_STREAM_SPRING_ZIPKIN_BASEURL
value: 'http://your-zipkin-server:9411'
然后按照使用 Zipkin 服务器可视化说明进行操作。
Cloud Foundry
本节介绍如何查看 Wavefront 在 Cloud Foundry 上存储的流的应用程序分布式跟踪。
Wavefront
Wavefront 是一种 SaaS 产品。您需要先创建一个用户帐户,并获取分配给您帐户的 API-KEY
和 WAVEFRONT-URI
。
要将数据流服务器配置为将来自流应用程序的指标数据发送到 Wavefront 监控系统,请按照基于清单的 Wavefront 配置说明进行操作。
然后按照使用 Wavefront 可视化说明进行操作。