前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0880-7.1.7-如何在CDP中使用Prometheus&Grafana对Flink任务进行监控和告警

0880-7.1.7-如何在CDP中使用Prometheus&Grafana对Flink任务进行监控和告警

作者头像
Fayson
发布2022-05-09 15:11:42
1.6K0
发布2022-05-09 15:11:42
举报
文章被收录于专栏:Hadoop实操Hadoop实操

本文作者:BYD信息中心-数据中心管理部-董睿

这里打一个小广告,手动狗头

比亚迪西安研发中心(与深圳协同办公),base西安。招聘大数据平台运维方向工程师,实时计算方向工程师,感兴趣的小伙伴请投递简历至dong.rui@byd.com

1.文档编写目的

Prometheus 是一款基于时序数据库的开源监控告警系统,Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。Grafana是一款采用 Go语言编写的开源应用,是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。本文主要介绍通过Prometheus和Grafana对CDP中的Flink进行监控和告警。

  • 测试环境

1.操作系统CentOS7.9

2.操作系统: CentOS Linux release 7.9.2009 (Core)

3.JDK: jdk1.8.0_232-cloudera

4.CM: 7.4.4

5.CDH: 7.1.7

6.Flink: 1.13.2-CSA1.5.3.0

7.Prometheus: 2.32.1

8.Grafana: 8.3.3

9.pushgateway: 1.4.2

10.node_exporter: 1.3.1

11.集群已开启kerberos认证

2.MetricReportersia Tesla T4

2.1Metrics介绍

由于实时任务运行后很难发现内部的实际状况,跑得慢或快,是否异常等,开发人员无法实时查看所有的 Task 日志,比如作业很大或者有很多作业的情况下,该如何处理?此时 Metrics 可以很好的帮助开发人员了解作业的当前状况。Flink 提供的 Metrics 可以在Flink 内部收集一些指标,通过这些指标让开发人员更好地理解作业或集群的状态。

官网地址:

代码语言:javascript
复制
https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/deployment/metric_reporters/

2.2 Metric Types

Metrics 的类型如下:

1.常用的如 Counter,写过 mapreduce 作业的开发人员就应该很熟悉 Counter,其实含义都是一样的,就是对一个计数器进行累加,即对于多条数据和多兆数据一直往上加的过程。

2.Gauge,Gauge 是最简单的 Metrics,它反映一个值。比如要看现在 Java heap 内存用了多少,就可以每次实时的暴露一个 Gauge,Gauge 当前的值就是heap使用的量。

3.Meter,Meter 是指统计吞吐量和单位时间内发生“事件”的次数。它相当于求一种速率,即事件次数除以使用的时间。

4.Histogram,Histogram 比较复杂,也并不常用,Histogram 用于统计一些数据的分布,比如说 Quantile、Mean、StdDev、Max、Min 等。Metric 在 Flink 内部有多层结构,以 Group 的方式组织,它并不是一个扁平化的结构,MetricGroup + Metric Name 是 Metrics 的唯一标识。

2.3Flink支持的Reporter

代码语言:javascript
复制
JMX(org.apache.flink.metrics.jmx.JMXReporter)Graphite(org.apache.flink.metrics.graphite.GraphiteReporter)InfluxDB(org.apache.flink.metrics.influxdb.InfluxdbReporter)Prometheus(org.apache.flink.metrics.prometheus.PrometheusReporter)StatsD(org.apache.flink.metrics.statsd.StatsDReporter)Datadog(org.apache.flink.metrics.datadog.DatadogHttpReporter)Slf4j(org.apache.flink.metrics.slf4j.Slf4jReporter)

2.4PrometheusPushGateway

Pushgateway作为独立的服务,位于被采集监控指标的应用程序和Prometheus之间,应用程序主动推送指标到Pushgateway,然后Pushgateway作为target被prometheus抓取这些指标。

3.PushGateway与CDP Flink进行集成

进入此次任务的正题,本次我们通过目前各类优秀开源工具组合使用,作为CDP集群实时任务运维监控,探索测试的一种方向。Prometheus和Grafana安装使用,这里就不再过多赘述。

Prometheus在正常情况下是采用拉模式从产生metric的作业或者exporter(比如专门监控主机的NodeExporter)拉取监控数据。但是我们要监控的是Flink on YARN作业,想要让Prometheus自动发现作业的提交、结束以及自动拉取数据显然是比较困难的。PushGateway就是一个中转组件,通过配置Flink on YARN作业将metric推到PushGateway,Prometheus再从PushGateway拉取就可以了。

3.1PushGateway启动

在启动pushgateway前,需要修改prometheus配置文件 prometheus.yml并重启服务,使其监控pushgateway

代码语言:javascript
复制
scrape_configs:  ...  # 添加PushGateway 监控配置  -job_name: 'pushgateway'   static_configs:    -targets: ['pushgateway_host:9091']     labels:       instance: pushgateway  ...

进入pushgateway解压后的安装包,启动进程

代码语言:javascript
复制
nohup ./pushgateway --web.listen-address :9091> ./pushgateway.log 2>&1 &

启动后在prometheus界面出现pushgateway监控项,并且为up状态

3.2flink-metrics-prometheus jar包

从Apache Flink的源码结构我们可以看到,Flink官方支持Prometheus,并且提供了对接Prometheus的jar包,很方便就可以集成。

开源包中plugins目录是包含此jar包的。CSA plugins目录默认是没有的,我们从Cloudera仓库下载或者通过IDE下载都可以。另外CSA从1.3之后Scala版本都是2.12,注意下载2.12版的jar包。

代码语言:javascript
复制
https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/flink/

把下载之后的jar包,上传同步至所有节点。

如果使用flink run模式提交任务则需要上传至所有节点本地目录/opt/cloudera/parcels/FLINK/lib/flink lib或plugins目录下

如果使用flink run-application模式,则把jar上传至-Dyarn.provided.lib.dirs指定的HDFS目录即可。

3.3Flink配置修改

打开CM,进入Flink服务,搜索flink-conf.yaml配置项

增加flink与pushgateway相关配置

代码语言:javascript
复制
##### 与Prometheus集成配置 #####metrics.reporter.promgateway.class:org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter# PushGateway的主机名与端口号metrics.reporter.promgateway.host:pushgateway_hostmetrics.reporter.promgateway.port: 9091# Flink metric在前端展示的标签(前缀)与随机后缀metrics.reporter.promgateway.jobName:flink-metrics-ppgmetrics.reporter.promgateway.randomJobNameSuffix:truemetrics.reporter.promgateway.deleteOnShutdown:falsemetrics.reporter.promgateway.interval: 30SECONDS

官网demo如下:

代码语言:javascript
复制
https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/deployment/metric_reporters/#prometheuspushgateway

3.4验证与测试

我们随便提交一个测试任务

代码语言:javascript
复制
flink run \-m yarn-cluster \-ys 2 \-p 10 \-ynm testapp \-yjm 2048 \-ytm 2048 \-yD security.kerberos.login.keytab=/xxx.keytab \-yDsecurity.kerberos.login.principal=xxx@BYD.COM \-c com.byd.flink.app.FileSinkBulkApp \-d \./flink-hdfs-bulk-apache.jar --fileNum 3--ckTime 1800 --pathFormat yyyy-MM-dd--HH

打开prometheus搜索flink相关指标

到此,Flink任务与prometheus集成完毕。

4.Grafana模版和一些简单指标设计

4.1Grafana Flink模版

让我们手动一个个添加Dashboard那肯定是不科学的,我们肯定是更愿意使用模版。官方也比较建议大家基于模版进行更多的创造。

官方模版仓库:

代码语言:javascript
复制
https://grafana.com/dashboards

 搜索flink,会出现非常多的模版,笔者使用的是下图中模版。这里有一个问题就是,这些模版开发时间都比较早,随着flink版本的迭代,有一些指标名称进行过更改,对于没有图表显示的需要自行查找指标,并进行修改。

把模版导入Grafana后大概就是这个样子,笔者进行过二次设计,后边介绍。

4.2Flink任务存活/失败监控

这个指标监控主要是基于flink_jobmanager_job_uptime 这个指标进行了监控。原理是在job任务存活时,会按照配置metrics.reporter.promgateway.interval上报频率递增。基于这个特点,当任务失败后这个数值就不会改变,就能监控到任务失败。

添加一个新的监控项

编辑该图表

1m为数据上报到 promgateway 频率,可以除以100为了数据好看,当job任务失败后数 flink上报的promgateway 的 flink_jobmanager_job_uptime指标值不会变化。((flink_jobmanager_job_uptime)-(flink_jobmanager_job_uptime offset 1m))/100 值就会是0,可以配置告警。

配置告警

这里主要是条件的配置,在什么情况下进行告警。

还有更多的一些指标如任务重启、网络延迟、任务反压等重要指标,这里不再过多写了。

在告警通知中可以邮件和webhook,webhook可以调用相关接口,执行一些动作。webhook需要提前配置,在这里配置告警时就可以直接引入。

5.Grafana告警配置

5.1安装alertmanager

5.2 钉钉机器人告警

可以使用dingtalk,dingtalk是一个用来发送钉钉告警通知的prometheus插件

github地址

代码语言:javascript
复制
https://github.com/timonwong/prometheus-webhook-dingtalk

5.3企业微信群机器人

企业微信群机器人与钉钉机器人类似,都是webhook类,我们可以自定义python脚本,用来接收alertmanager的告警信息,然后发送至机器人。

5.4一些收费的第三方监控运维平台,如睿象云可以直接接入Grafana实现电话、短信告警

关于Prometheus+Grafana告警这块内容,各路大神都研究测试的非常透彻,合理利用搜索引擎即可。

6.存在的一些问题

任务在高负载、反压的时候,pushgateway经常会有read time out现象

不能直接监控到被采集监控指标应用程序的健康状态,且一些指标非常的奇葩

存在单点故障问题,如果Pushgateway从许多不同的来源收集指标时宕机,用户将失去对这些来源的监控

Pushgateway不会自动删除推送给它的任何指标数据,因此,必须使用Pushgateway的API从推送网关中删除过期的指标

生产环境Grafana模版图表需要深度优化定制,用来测试没有问题

告警信息的优化和降噪等

社区对于metric指标之类的内容不够重视,相关内容非常少,基本都需要自己研究测试和大牛的分享,而且Flink版本迭代经常有变动,这块需要特别注意

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档