使用 Prometheus、Wavefront 和 InfluxDB 进行流监控
本节介绍如何监控作为流数据管道一部分部署的应用程序。每个平台的设置不同,但总体架构在所有平台上都是相同的。
Data Flow 指标架构围绕 Micrometer 库设计,为最流行的监控系统的仪表客户端提供简单的外观。有关支持的监控系统列表,请参阅 Micrometer 文档。Micrometer 支持从 Spring Boot 传递应用程序指标。Spring Integration 提供 额外的 Micrometer 集成,以公开有关消息速率和错误的指标,这对监控已部署的流至关重要。
所有 Spring Cloud 流应用程序启动器 和 流应用程序 都预先配置为支持三种最流行的监控系统:Prometheus、Wavefront 和 InfluxDB。您可以声明性地选择已部署的应用程序使用哪个监控系统。
为了支持不同的监控系统,您可以自定义 Stream Applications以使用不同的监控系统。
为了帮助您开始监控流,Data Flow 提供了Grafana仪表板(适用于 Prometheus 和 InfluxDB),您可以根据需要安装和自定义这些仪表板。 对于 Wavefront,您可以使用 Data Flow Integration 磁贴进行丰富而全面的指标可视化。
下图显示了如何监控流应用程序的总体架构
此外,对于基于 Kafka binder 的流数据管道,还提供了一个基于 Apache Kafka 指标的专用 Kafka 和 Kafka Stream 仪表板
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 按钮,可以为给定的流、应用程序或应用程序实例打开特定的仪表板。以下屏幕截图说明了这些按钮(查找螺旋图标)
在 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/graph 和 https://127.0.0.1:9090/targets 访问 Prometheus UI
您可以使用以下凭据访问 https://127.0.0.1:3000 的 Grafana 仪表板
- 用户:
admin
- 密码:
admin
有两个预配置的仪表板
- 流:https://127.0.0.1:3000/d/scdf-streams/streams?refresh=10s
- 应用程序:https://127.0.0.1:3000/d/scdf-applications/applications?refresh=10s
要查看仪表板的运行情况,请部署一个使用 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
您应该会看到类似于下图所示的仪表盘
Wavefront
要安装支持 Wavefront 的数据流,请按照《使用 Wavefront 进行监控》Docker Compose 说明进行操作。这样做会启动 Spring Cloud Data Flow、Skipper 和 Apache Kafka。它还会自动指向 Wavefront 的数据流集成磁贴。
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。您可以使用以下凭据通过以下网址访问 Grafana 仪表盘:https://127.0.0.1:3000
- 用户:
admin
- 密码:
admin
有两个预配置的仪表板
- 流:https://127.0.0.1:3000/d/scdf-streams/streams?refresh=10s
- 应用程序:https://127.0.0.1:3000/d/scdf-applications/applications?refresh=10s
现在,您可以部署一个使用 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
您应该会看到类似于下图所示的仪表盘
要验证设置,您可以使用以下命令登录到这些容器
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
有两个预配置的仪表板
- 流:http://192.168.99.100:31595/d/scdf-streams/streams?refresh=10s
- 应用程序:http://192.168.99.100:31595/d/scdf-applications/applications?refresh=10s
您可以按应用程序、按流收集指标,也可以将指标收集应用于全局部署的所有应用程序。
要部署启用了指标的单个流,请在 Spring Cloud Data Flow shell 中输入以下内容
dataflow:>stream create metricstest --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy
您应该会看到类似于下图所示的仪表盘
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 作为 Cloud Foundry 上的指标存储的流的应用程序指标。
Prometheus
要将 Data Flow 服务器的清单配置为将来自流应用程序的指标数据发送到 Prometheus RSocket 网关,请遵循基于清单的安装说明。
在 Prometheus、Grafana、Spring Cloud Data Flow 和任何其他服务(如“入门 - Cloud Foundry”部分中所定义)启动并运行后,您就可以收集指标了。
根据您安装 Grafana 的位置,使用以下凭据访问 Grafana 仪表板
- 用户名:admin
- 密码:password
可以使用以下链接安装两个仪表板
- 流:https://grafana.org.cn/grafana/dashboards/9933
- 应用程序:https://grafana.org.cn/grafana/dashboards/9934
然后,您可以按应用程序、按流收集指标,或者全局应用指标收集到所有已部署的应用程序。
要部署启用了指标的单个流,请在 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 仪表板,如下图所示
Wavefront
Wavefront 是一种 SaaS 产品。您需要先创建一个用户帐户,并获取分配给您帐户的 API-KEY
和 WAVEFRONT-URI
。
要配置数据流服务器以将来自流应用程序的指标数据发送到 Wavefront 监控系统,请遵循基于清单的 Wavefront 配置说明。
然后,在 Wavefront 门户上,您应该会看到类似于下图所示的仪表板