使用 Prometheus、Wavefront 和 InfluxDB 进行流监控

本节介绍如何监控作为流数据管道一部分部署的应用程序。每个平台的设置不同,但总体架构在所有平台上都是相同的。

Data Flow 指标架构围绕 Micrometer 库设计,为最流行的监控系统的仪表客户端提供简单的外观。有关支持的监控系统列表,请参阅 Micrometer 文档。Micrometer 支持从 Spring Boot 传递应用程序指标。Spring Integration 提供 额外的 Micrometer 集成,以公开有关消息速率和错误的指标,这对监控已部署的流至关重要。

所有 Spring Cloud 流应用程序启动器流应用程序 都预先配置为支持三种最流行的监控系统:PrometheusWavefrontInfluxDB。您可以声明性地选择已部署的应用程序使用哪个监控系统。

为了支持不同的监控系统,您可以自定义 Stream Applications以使用不同的监控系统。

为了帮助您开始监控流,Data Flow 提供了Grafana仪表板(适用于 Prometheus 和 InfluxDB),您可以根据需要安装和自定义这些仪表板。 对于 Wavefront,您可以使用 Data Flow Integration 磁贴进行丰富而全面的指标可视化。

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

Stream Monitoring Architecture

此外,对于基于 Kafka binder 的流数据管道,还提供了一个基于 Apache Kafka 指标的专用 Kafka 和 Kafka Stream 仪表板

Stream Monitoring Architecture

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

Data Flow 指标标签

为了允许按应用程序类型和每个实例或每个流聚合指标,Spring Cloud Stream Application Starters 被配置为使用以下 Micrometer 标签

  • stream.name:包含发送指标的应用程序的流的名称
  • application.name:报告指标的应用程序的名称或标签
  • application.type:报告指标的应用程序的类型(源、处理器或接收器)
  • application.guid:报告指标的应用程序实例的唯一实例标识符
  • application.index:应用程序实例 ID(如果可用)

数据流指标按钮

如果使用指向 Grafana 或 Wavefront URL 的 spring.cloud.dataflow.metrics.dashboard.url 属性启动数据流服务器,则 Dashboard 功能启用,并且数据流 UI 会为您提供 Grafana 或 Wavefront 按钮,可以为给定的流、应用程序或应用程序实例打开特定的仪表板。以下屏幕截图说明了这些按钮(查找螺旋图标)

Stream List Monitoring Runtime Applications Monitoring - Grafana Stream List Monitoring - Wavefront Runtime Applications Monitoring - Wavefront

在 Wavefront、Prometheus 或 InfluxDB 之间进行选择并安装必要的组件会有所不同,具体取决于您运行的平台。以下每个部分都提供了安装说明的链接。

本地

本节介绍如何在本地机器上查看使用 Prometheus 或 InfluxDB 作为指标存储的流的应用程序指标。Wavefront 是一种云产品,但您仍然可以在本地部署数据流并将其指向云托管的 Wavefront 监控系统。

Prometheus

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

所有容器都运行后,您可以在 https://127.0.0.1:9393/dashboard 访问 Spring Cloud Data Flow 仪表板

您也可以通过 https://127.0.0.1:9090/graphhttps://127.0.0.1:9090/targets 访问 Prometheus UI

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

  • 用户:admin
  • 密码:admin

有两个预配置的仪表板

要查看仪表板的运行情况,请部署一个使用 Kafka 的简单流

dataflow:>app import --uri https://dataflow.springframework.org.cn/kafka-maven-latest --force
dataflow:>stream create stream2 --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy

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

SCDF Grafana Prometheus

Wavefront

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

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。您可以使用以下凭据通过以下网址访问 Grafana 仪表盘:https://127.0.0.1:3000

  • 用户:admin
  • 密码:admin

有两个预配置的仪表板

现在,您可以部署一个使用 Kafka 的简单流,例如以下内容

dataflow:>app import --uri https://dataflow.springframework.org.cn/kafka-maven-latest --force

dataflow:>stream create stream2 --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy

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

SCDF Grafana InfluxDB

要验证设置,您可以使用以下命令登录到这些容器

docker exec -it influxdb /bin/sh
docker exec -it grafana /bin/bash

然后,您可以通过运行以下命令来检查 InfluxDB 的内容

root:/# influx
> show databases
> use myinfluxdb
> show measurements
> select * from spring_integration_send limit 10

Kubernetes

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

Prometheus

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

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

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

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

您可以使用以下凭据访问 Grafana 仪表板 http://192.168.99.100:31595

  • 用户名:admin
  • 密码:password

有两个预配置的仪表板

您可以按应用程序、按流收集指标,也可以将指标收集应用于全局部署的所有应用程序。

要部署启用了指标的单个流,请在 Spring Cloud Data Flow shell 中输入以下内容

dataflow:>stream create metricstest --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy

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

SCDF Grafana Prometheus

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 作为 Cloud Foundry 上的指标存储的流的应用程序指标。

Prometheus

要将 Data Flow 服务器的清单配置为将来自流应用程序的指标数据发送到 Prometheus RSocket 网关,请遵循基于清单的安装说明

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

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

  • 用户名:admin
  • 密码:password

可以使用以下链接安装两个仪表板

然后,您可以按应用程序、按流收集指标,或者全局应用指标收集到所有已部署的应用程序。

要部署启用了指标的单个流,请在 Spring Cloud Data Flow shell 中输入以下内容

dataflow:>stream create metricstest --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy

部署流后,您可以启动以查看 Grafana 仪表板,如下图所示

SCDF Grafana Prometheus

Wavefront

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

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

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

SCDF Wavefront