使用 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 仪表板,您可以根据需要安装和自定义它们。
下图显示了如何监控任务应用程序的总体架构
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/graph 和 https://127.0.0.1:9090/targets。
您可以使用以下凭据访问位于 https://127.0.0.1:3000 的 Grafana 仪表板
- 用户名:
admin
- 密码:
admin
现在,您可以部署自定义任务应用程序(task-demo-metrics
),并使用 SCDF Shell 定义两个任务(task1
和 task2
)
注册应用程序
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中,您应该看到以下内容
此外,在任务的 Grafana 仪表板中,您应该看到以下内容
Wavefront
要安装支持 Wavefront 的 Data Flow,请按照使用 Wavefront 进行监控 Docker Compose 说明进行操作。这样做会启动 Spring Cloud Data Flow、Skipper 和 Apache Kafka。它还会自动指向 Wavefront 的 Data Flow 集成磁贴。
Wavefront 是一种 SaaS 产品。您需要先创建一个用户帐户,然后使用该帐户设置 WAVEFRONT_KEY
和 WAVEFRONT_URI
环境变量,如下所述。
您应该会看到类似于下图所示的仪表板
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
),并定义两个任务(task1
和 task2
)
注册应用程序
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中,您应该会看到如下列表:
您应该会看到类似于下图所示的仪表板
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
)并使用此应用程序定义两个不同的任务定义(task1
和 task2
)
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中,您应该看到以下内容
打开任务的 Grafana 仪表板。您应该看到以下内容
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 门户中,您应该会看到类似于下图所示的仪表板
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
),并定义两个任务(task1
和 task2
)
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中,您应该看到以下内容
此外,在任务的 Grafana 仪表板中,您应该看到以下内容
Wavefront
Wavefront 是一种 SaaS 产品。您需要先创建一个用户帐户,并获取分配给您帐户的 API-KEY
和 WAVEFRONT-URI
。
要配置数据流服务器以将来自流应用程序的指标数据发送到 Wavefront 监控系统,请按照基于清单的 Wavefront 配置说明进行操作。
然后,在 Wavefront 门户中,您应该会看到类似于下图所示的仪表板
InfluxDB
您可以按照基于清单的 Cloud Foundry 安装说明在 Cloud Foundry 上安装Skipper
和DataFlow
。要启用任务指标集成,请按照InfluxDB 配置说明进行操作。