使用 Prometheus 和 InfluxDB 进行任务和批处理监控

本节介绍如何监控作为 Data Flow 中任务定义的一部分部署的应用程序。每个平台的设置都不同,但总体架构在所有平台上都是相同的。

Data Flow 指标架构围绕 Micrometer 库设计,这是一个与供应商无关的应用程序指标外观。它为最流行的监控系统的仪表客户端提供了一个简单的外观。有关支持的监控系统列表,请参阅 Micrometer 文档。Micrometer 是一个仪表库,支持从 Spring Boot 传递应用程序指标。Spring Batch 提供了 额外的集成 来公开有关任务持续时间、速率和错误的指标,这些指标对于监控已部署的批处理作业至关重要。

我们专注于使用三种时间序列数据库:Wavefront、Prometheus 和 InfluxDB。

Wavefront 是一个高性能的流分析平台,支持 3D 可观测性(指标、直方图、跟踪和跨度)。它可以扩展到非常高的数据摄取率和查询负载,同时还可以从整个应用程序堆栈中的许多服务和来源收集数据。

Prometheus 是一个流行的基于拉取的时间序列数据库,它使用预先配置的端点从目标应用程序中拉取指标,并提供一种查询语言来实时选择和聚合时间序列数据。

InfluxDB 是一个流行的开源基于推送的时间序列数据库。它支持下采样、自动过期和删除不需要的数据,以及备份和恢复。数据的分析是通过类似 SQL 的查询语言完成的。

Micrometer 任务集成的核心是 Spring Cloud Task 2.2.0 版本系列的一部分,它是任务指标和数据流集成的先决条件。您可以将构建在 Spring Cloud Task 2.2+ 版本上的任务应用程序配置为将任务和批处理指标发送到 Micrometer 支持的预配置监控系统。

启用任务指标

要启用任务指标与数据流的集成,您必须将 spring-boot-starter-actuator 添加到您的任务应用程序中,并导入 spring-cloud-dependencies BOM,如下所示

<dependencies>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

然后,您需要将所需的 Micrometer 注册表作为依赖项包含在任务 POM 中

使用以下依赖项启用 Prometheus 指标收集 RSocket

<dependency>
	<groupId>io.micrometer.prometheus</groupId>
	<artifactId>prometheus-rsocket-spring</artifactId>
    <version>1.5.0</version>
</dependency>

通过添加 micrometer-registry-wavefront 依赖项来启用 Wavefront 指标收集

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-wavefront</artifactId>
</dependency>

<dependency>
    <groupId>com.wavefront</groupId>
    <artifactId>wavefront-sdk-java</artifactId>
</dependency>

对于 Micrometer 版本 1.5.3 或更高版本,必须删除 wavefront-sdk-java 依赖项。

通过添加以下依赖项来启用 InfluxDB 指标收集

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-influx</artifactId>
</dependency>
构建 Docker 镜像

要构建 Docker 镜像,请运行以下命令

mvn spring-boot:build-image

为了帮助您开始监控任务,Data Flow 提供了 Grafana 仪表板,您可以根据需要安装和自定义它们。

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

Task Monitoring Architecture

Prometheus 需要一个服务发现组件来自动探测已配置的端点以获取指标。Spring Cloud Data Flow 服务器使用 Prometheus RSocket 代理,它使用 rsocket 协议进行服务发现。使用 RSocket 代理方法是为了可以使用相同的架构来监控任务(短暂的)和长期运行的流应用程序。有关更多信息,请参阅有关 短期任务和批处理应用程序 的 micrometer 文档。此外,RSocket 方法允许在所有平台上使用相同的监控架构。Prometheus 配置为抓取每个代理实例。代理进而使用 RSocket 连接从每个应用程序中提取指标。然后,可以通过 Grafana 仪表板查看抓取的指标。

Spring Cloud Task 指标标签

为了允许按应用程序类型和实例 ID 或任务名称聚合指标,Spring Cloud Task 应用程序配置为使用以下 Micrometer 标签

  • task.name:包含发送指标的应用程序的任务的名称。
  • task.execution.id已执行任务的实例 ID
  • task.external.execution.id外部任务 ID,如目标平台(例如 Cloud Foundry 或 Kubernetes)上所示。报告指标的应用程序的类型(源、处理器或接收器)。
  • task.parent.execution.id父任务 ID,用于标识执行另一个或多个任务的任务。

如果 Data Flow 服务器在启动时 spring.cloud.dataflow.metrics.dashboard.url 属性指向您的 Grafana URL,则启用 Grafana 功能,并且 Data Flow UI 为您提供 Grafana 按钮,可以为给定任务打开特定仪表板。

安装 Wavefront、Prometheus 和 InfluxDB 的方式有所不同,具体取决于您运行的平台。以下各节提供了安装说明的链接。

本地

本节介绍如何使用 Prometheus 或 InfluxDB 作为本地计算机上的指标存储来查看任务的应用程序指标。

Prometheus

要安装 Prometheus 和 Grafana,请按照使用 Prometheus 和 Grafana 进行监控 Docker Compose 说明进行操作。这样做会启动 Spring Cloud Data Flow、Skipper、Apache Kafka、Prometheus 以及 Grafana 的预构建仪表板。

所有容器都运行后,您就可以通过以下地址访问 Spring Cloud Data Flow 仪表板:https://127.0.0.1:9393/dashboard

您还可以通过以下地址访问 Prometheus UI:https://127.0.0.1:9090/graphhttps://127.0.0.1:9090/targets

您可以使用以下凭据访问位于 https://127.0.0.1:3000 的 Grafana 仪表板

  • 用户名:admin
  • 密码:admin

现在,您可以部署自定义任务应用程序(task-demo-metrics),并使用 SCDF Shell 定义两个任务(task1task2

注册应用程序

app register --name myTask --type task --uri https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow-samples/main/dataflow-website/feature-guides/batch/monitoring/prometheus-task-demo-metrics-0.0.1-SNAPSHOT.jar

为 task1 创建定义

task create --name task1 --definition "myTask";

为 task2 创建定义

task create --name task2 --definition "myTask";

然后,您可以启动任务

启动 task1

task launch --name task1

启动 task2

task launch --name task2

DataFlow 任务执行 UI中,您应该看到以下内容

SCDF Tasks SCDF Task Execution

此外,在任务的 Grafana 仪表板中,您应该看到以下内容

SCDF Task Grafana Prometheus Dashboard

Wavefront

要安装支持 Wavefront 的 Data Flow,请按照使用 Wavefront 进行监控 Docker Compose 说明进行操作。这样做会启动 Spring Cloud Data Flow、Skipper 和 Apache Kafka。它还会自动指向 Wavefront 的 Data Flow 集成磁贴。

Wavefront 是一种 SaaS 产品。您需要先创建一个用户帐户,然后使用该帐户设置 WAVEFRONT_KEYWAVEFRONT_URI 环境变量,如下所述。

您应该会看到类似于下图所示的仪表板

SCDF Wavefront

InfluxDB

要安装 InfluxDB 和 Grafana,请按照使用 InfluxDB 和 Grafana 进行监控 Docker Compose 说明进行操作。这样做会启动 Spring Cloud Data Flow、Skipper、Apache Kafka、InfluxDB 以及 Grafana 的预构建仪表板。

所有容器都运行后,您就可以通过以下地址访问 Spring Cloud Data Flow 仪表板:https://127.0.0.1:9393/dashboard。您可以使用以下凭据访问位于 https://127.0.0.1:3000 的 Grafana 仪表板

  • 用户名:admin
  • 密码:admin

现在,您可以部署自定义任务应用程序(task-demo-metrics),并定义两个任务(task1task2

注册应用程序

app register --name myTask --type task --uri https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow-samples/main/dataflow-website/feature-guides/batch/monitoring/influx-task-demo-metrics-0.0.1-SNAPSHOT.jar

为 task1 创建定义

task create --name task1 --definition "myTask";

为 task2 创建定义

task create --name task2 --definition "myTask";

然后,您可以启动任务

启动 task1

task launch --name task1

启动 task2

task launch --name task2

DataFlow 任务执行 UI中,您应该会看到如下列表: SCDF 任务 SCDF 任务执行

您应该会看到类似于下图所示的仪表板

SCDF Task Grafana InfluxDB

Kubernetes

本节介绍如何在 Kubernetes 上使用 Prometheus 或 InfluxDB 作为指标存储来查看任务的应用程序指标。

Prometheus

要在 Kubernetes 上安装 Prometheus 和 Grafana,您需要按照基于 kubectl 的安装说明进行操作。

用于访问 Grafana 仪表板的地址取决于部署系统的 Kubernetes 平台。例如,如果您使用的是 GKE,则将使用负载均衡器的地址。如果您使用 Minikube(它不提供负载均衡器实现),则将使用 Minikube 的 IP(以及分配的端口)。在以下示例中,为简单起见,我们使用 Minikube。

要在 Grafana 部署到 Minikube 时获取其 UI 的 URL,请运行以下命令

minikube service --url grafana
http://192.168.99.100:31595

在前面的示例中,您可以通过以下地址访问 Grafana 仪表板:http://192.168.99.100:31595。默认凭据如下

  • 用户名:admin
  • 密码:password

Grafana 实例预先配置了一个仪表板

您可以按任务或批次收集指标,也可以全局应用指标收集到所有已部署的应用程序。

我们可以使用自定义任务应用程序(task-demo-metrics)并使用此应用程序定义两个不同的任务定义(task1task2

dataflow:>app register --name myTask --type task --uri docker://<your task app>

dataflow:>task create --name task1 --definition "myTask"
dataflow:>task create --name task2 --definition "myTask"

然后您可以多次启动任务

dataflow:>task launch --name task1
dataflow:>task launch --name task2
dataflow:>task launch --name task1
dataflow:>task launch --name task2
dataflow:>task launch --name task1
dataflow:>task launch --name task2

要在 SCDF 部署到 Minikube 时获取其 URL,请运行以下命令

minikube service --url scdf-server
http://192.168.99.100:32121

DataFlow 任务执行 UI中,您应该看到以下内容

SCDF Tasks SCDF Task Execution

打开任务的 Grafana 仪表板。您应该看到以下内容

SCDF Task Grafana Prometheus Dashboard

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 门户中,您应该会看到类似于下图所示的仪表板

SCDF Wavefront

Cloud Foundry

本节介绍如何使用 Prometheus 和 InfluxDB 作为 Cloud Foundry 上的指标存储来查看流的应用程序指标。

Prometheus

要配置数据流服务器的清单以将来自流应用程序的指标数据发送到 Prometheus RSocket 网关,请按照基于清单的安装说明进行操作。

在运行 Prometheus、Grafana、Spring Cloud Data Flow 和任何其他服务(如入门 - Cloud Foundry部分中所定义)后,您就可以收集指标了。

根据您安装 Grafana 的位置,您可以使用以下凭据访问 Grafana 仪表板

  • 用户名:admin
  • 密码:password

您必须使用以下任务仪表板配置 Grafana:scdf-task-batch.json

现在,您可以部署自定义任务应用程序(task-demo-metrics),并定义两个任务(task1task2

dataflow:>app register --name myTask --type task --uri https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow-samples/main/dataflow-website/feature-guides/batch/monitoring/prometheus-task-demo-metrics-0.0.1-SNAPSHOT.jar

dataflow:>task create --name task1 --definition "myTask"
dataflow:>task create --name task2 --definition "myTask"

您可以多次启动任务

dataflow:>task launch --name task1
dataflow:>task launch --name task2

DataFlow 任务执行 UI中,您应该看到以下内容

SCDF Tasks SCDF Task Execution

此外,在任务的 Grafana 仪表板中,您应该看到以下内容

SCDF Task Grafana Prometheus Dashboard

Wavefront

Wavefront 是一种 SaaS 产品。您需要先创建一个用户帐户,并获取分配给您帐户的 API-KEYWAVEFRONT-URI

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

然后,在 Wavefront 门户中,您应该会看到类似于下图所示的仪表板

SCDF Wavefront

InfluxDB

您可以按照基于清单的 Cloud Foundry 安装说明在 Cloud Foundry 上安装SkipperDataFlow。要启用任务指标集成,请按照InfluxDB 配置说明进行操作。