流分布式追踪

本节介绍如何追踪作为流数据管道一部分部署的应用程序。

Data Flow 分布式追踪架构围绕 Spring Cloud Sleuth 库设计,为与 OpenZipkin Brave 集成的分布式追踪解决方案提供 API。

Spring Cloud Sleuth 能够追踪您的流管道消息,并将追踪信息导出到外部系统进行分析和可视化。Spring Cloud Sleuth 支持 OpenZipkin 兼容系统,例如 Zipkin ServerWavefront 分布式追踪

所有 Spring Cloud 流应用程序 都预先配置为支持消息分布式追踪并导出到 Zipkin Server 和/或 Wavefront Tracing。默认情况下,追踪导出功能处于禁用状态!使用 management.metrics.export.wavefront.enabled=true 和/或 spring.zipkin.enabled=true 启用向 Wavefront 或 Zipkin Server 导出追踪信息。下面提供了详细说明。有关 Sleuth 配置属性,请参阅 spring sleuth 属性

下图显示了如何监控流应用程序的总体架构

Stream Distributed Tracing Architecture

对于基于 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 Wavefront

然后,您可以搜索与您部署的流名称匹配的应用程序名称。例如,如果您部署了一个名为 scdf-stream-traces 的流管道,则可以选择在 Wavefront 中收集的跟踪,如下所示

SCDF Wavefront

按下 搜索 按钮,Wavefront 仪表板将显示类似于下图的内容

SCDF  Tracing Wavefront

使用 Zipkin 服务器可视化

Zipkin 服务器 允许从已部署的流管道收集和可视化分布式跟踪数据。Zipkin 提供了不同的仪表板和浏览器来查看信息。

您也可以通过以下地址访问 Zipkin UI:http://your-zipkin-hostname:9411/zipkin。默认地址为 (http://localhost:9411/zipkin)。

如果日志文件中包含跟踪 ID,则可以直接跳转到该跟踪 ID。否则,您可以根据服务、操作名称、标签和持续时间等属性进行查询。系统将为您汇总一些有趣的数据,例如在服务中花费的时间百分比以及操作是否失败。

Stream Tracing Visualization - Zipkin Send

Zipkin UI 还提供了一个依赖关系图,显示了通过每个应用程序的跟踪请求数量。这有助于识别聚合行为,包括错误路径或对已弃用服务的调用。

Stream Tracing Visualization - Zipkin Dependencies

平台安装

以下部分介绍如何为 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_KEYWAVEFRONT_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-KEYWAVEFRONT-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-KEYWAVEFRONT-URI

要将数据流服务器配置为将来自流应用程序的指标数据发送到 Wavefront 监控系统,请按照基于清单的 Wavefront 配置说明进行操作。

然后按照使用 Wavefront 可视化说明进行操作。