前提提要
本文主要介绍将Flink任务运行的metric发送到Prometheus,通过Grafana报表工具展示。
Flink App:通过report将数据发出去metric信息
Push gateway:Prometheus生态中一个重要工具
Prometheus:一套开源的系统监控报警框架
Grafana:一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。
Node_exporter:跟Pushgateway一样是Prometheus 的组件,采集到主机的运行指标如CPU, 内存,磁盘等信息。
一、Prometheus简介
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
1)Prometheus的特点
- 多维度数据模型。
- 灵活的查询语言。
- 不依赖分布式存储,单个服务器节点是自主的。
- 通过基于HTTP的pull方式采集时序数据。
- 可以通过中间网关进行时序列数据推送。
- 通过服务发现或者静态配置来发现目标服务对象。
- 支持多种多样的图表和界面展示,比如Grafana等
2)Prometheus的组件
Prometheus生态系统由多个组件组成,它们中的一些是可选的。多数Prometheus组件是Go语言写的,这使得这些组件很容易编译和部署。
- Prometheus Server
主要负责数据采集和存储,提供PromQL查询语言的支持。
- 客户端SDK
官方提供的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开发的类库,支持nodejs、php、erlang等。
- Push Gateway
支持临时性Job主动推送指标的中间网关。
- Exporter
Exporter是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。
Prometheus提供多种类型的Exporter用于采集各种不同服务的运行状态。目前支持的有数据库、硬件、消息中间件、存储系统、HTTP服务器、JMX等。
- Alertmanager
警告管理器,用来进行报警。
- 其他辅助性工具
3)Prometheus系统架构图
它的服务过程是这样的 Prometheus daemon 负责定时去目标上抓取 metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。
Prometheus支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。
Alertmanager 是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
Prometheus支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。
PushGateway这个组件是支持Client主动推送 metrics 到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
4)Prometheus的数据模型
Prometheus 从根本上所有的存储都是按时间序列去实现的,相同的 metrics(指标名称) 和 label(一个或多个标签) 组成一条时间序列,不同的label表示不同的时间序列。为了支持一些查询,有时还会临时产生一些时间序列存储。
metrics name & label 指标名称和标签
每条时间序列是由唯一的 指标名称 和 一组 标签 (key=value)的形式组成。
指标名称 一般是给监测对像起一名字,例如 http_requests_total 这样,它有一些命名规则,可以包字母数字_之类的的。
通常是以应用名称开头_监测对像_数值类型_单位这样。
例如:
1)push_total
2)userlogin_mysql_duration_seconds
3)app_memory_usage_bytes
标签就是对一条时间序列不同维度的识别了,例如:一个http请求用的是POST还是GET,它的endpoint是什么,这时候就要用标签去标记了。
最终形成的标识便是这样了
http_requests_total{method="POST",endpoint="/api/tracks"}
记住,针对http_requests_total这个metrics name 无论是增加标签还是删除标签都会形成一条新的时间序列。
查询语句就可以根据上面标签的组合来查询聚合结果了。
如果以传统数据库的理解来看这条语句,则可以考虑 http_requests_total是表名,标签是字段,而timestamp是主键,还有一个float64字段是值了。(Prometheus里面所有值都是按float64存储)
5)Prometheus的四种数据类型
Counter
- Counter 用于累计值,例如 记录 请求次数、任务完成数、错误发生次数。
- 一直增加,不会减少。
- 重启进程后,会被重置。
例如:http_response_total{method="GET",endpoint="/api/tracks"} 100
10秒后抓取 http_response_total{method="GET",endpoint="/api/tracks"} 100
Gauge
- Gauge 常规数值,例如 温度变化、内存使用变化。
- 可变大,可变小。
- 重启进程后,会被重置
例如: memory_usage_bytes{host="master-01"} 100 < 抓取值
memory_usage_bytes{host="master-01"} 30
memory_usage_bytes{host="master-01"} 50
memory_usage_bytes{host="master-01"} 80 < 抓取值
Histogram
- Histogram 可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供 count 和 sum 全部值的功能。
例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值
Summary
- Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。
- 例如:count=7次,sum=7次的值求值
- 它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。
大部分监控项都可以使用Counter来实现,少部分使用Gauge和Histogram,其中Histogram在服务端计算是相当费CPU的,所以也没要导出太多Histogram数据。
6)Prometheus适用的场景
Prometheus在记录纯数字时间序列方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。
7)Prometheus不适用的场景
Prometheus它的价值在于可靠性,甚至在很恶劣的环境下,你都可以随时访问它和查看系统服务各种指标的统计信息。如果你对统计数据需要100%的精确,它并不适用,例如:它不适用于实时计费系统。
二、Grafana安装
1、下载Grafana软件包
[root@localhost ~]# wget https://dl.grafana.com/oss/release/grafana-7.3.6-1.x86_64.rpm
2、安装Grafana
[root@localhost ~]# yum -y install grafana-7.3.6-1.x86_64.rpm
3、启动Grafana
[root@localhost ~]# systemctl start grafana-server
三、Flink安装
注:为了方便演示,这里采用localhost模式,集群模式可参考我的另外一篇文章(Linux搭建Flink-1.7.2 HA集群)
1、下载Flink安装包
[root@localhost ~]# wget https://archive.apache.org/dist/flink/flink-1.10.2/flink-1.10.2-bin-scala_2.12.tgz
2、解压
[root@localhost ~]# tar xf flink-1.10.2-bin-scala_2.12.tgz
[root@localhost ~]# mv flink-1.10.2 /usr/local/
3、配置Flink
# 拷贝opt目录下的flink-metrics-prometheus-1.10.2.jar到lib目录。
[root@localhost ~]# cd /usr/local/flink-1.10.2/opt
[root@localhost opt]# cp flink-metrics-prometheus-1.10.2.jar ../lib
# 编辑flink-conf.yml
[root@localhost opt]# vim ../conf/flink-conf.yaml
# 添加以下内容,这里是部署在一台机器,所以用的localhost
metrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
metrics.reporter.promgateway.host: localhos
metrics.reporter.promgateway.port: 9091
metrics.reporter.promgateway.jobName: flink-metrics
metrics.reporter.promgateway.randomJobNameSuffix: true
metrics.reporter.promgateway.deleteOnShutdown: false
4、启动Flink
[root@localhost ~]# /usr/local/flink-1.10.2/bin/start-cluster.sh
5、查看进程和端口
[root@localhost ~]# netstat -lntup
[root@localhost ~]# ps -ef |grep flink
6、访问Flink
浏览器访问:http://172.168.1.156:8081/,如下图所示
四、Pushgateway安装
1、下载Pushgateway安装包
下载地址:https://prometheus.io/download/,选择对应的系统的软件包即可。
[root@localhost ~]# wget https://github.com/prometheus/pushgateway/releases/download/v1.3.1/pushgateway-1.3.1.linux-amd64.tar.gz
2、解压
[root@localhost ~]# tar xf pushgateway-1.3.1.linux-amd64.tar.gz
[root@localhost ~]# mv pushgateway-1.3.1.linux-amd64 /usr/local/pushgateway
[root@localhost ~]# chown -R root.root /usr/local/pushgateway
3、启动pushgateway
[root@localhost pushgateway]# ./pushgateway &
4、访问pushgateway
浏览器访问:http://172.168.1.156:9091/,如下图
五、Node_exporter安装
1、下载Node_exporter软件包
[root@localhost ~]# wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
2、解压
[root@localhost ~]# tar xf node_exporter-1.0.1.linux-amd64.tar.gz
[root@localhost ~]# mv node_exporter-1.0.1.linux-amd64 /usr/local/node_exporter
[root@localhost ~]# chown -R root.root /usr/local/node_exporter/
3、配置Node_exporter为系统服务
[root@localhost ~]# vim /usr/lib/systemd/system/node_exporter.service
# 添加以下内容
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
六、Prometheus安装
1、下载Prometheus软件包
[root@localhost ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz
2、解压
[root@localhost ~]# tar xf prometheus-2.23.0.linux-amd64.tar.gz
[root@localhost ~]# mv prometheus-2.23.0.linux-amd64 /usr/local/prometheus
[root@localhost ~]# chown -R root.root /usr/local/prometheus
3、配置Prometheus为系统服务
[root@localhost ~]# vim /usr/lib/systemd/system/prometheus.service
# 添加以下内容
[Unit]
Description=prometheus
Documentation=https://prometheus.io/docs/introduction/overview
Wants=network-online.target
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
4、配置Prometheus
[root@localhost ~]# vim /usr/local/prometheus/prometheus.yml
# 添加以下参数
- job_name: 'node_exporter'
static_configs:
- targets: ['172.168.1.156:9100']
- job_name: 'pushgateway'
static_configs:
- targets: ['172.168.1.156:9091']
5、重启Prometheus服务
[root@localhost ~]# systemctl start prometheus
七、访问Grafana可视化平台
1、浏览器访问:http://172.168.1.156:3000/,如下图所示
# 默认用户名:admin,密码:admin
2、输入用户名和密码
# 配置新密码即可。
3、配置输入源
4、这里选择Prometheus(支持多种接入方式)
5、输入Prometheus的连接地址,点击Save & Test即可。
6、导入Node_exporter模板
# 模板下载地址:https://grafana.com/grafana/dashboards
7、这里选择20200628版本,输入ID:12884
# 选择Prometheus数据源,点击import导入即可
8、展示界面
9、配置Flink监控项
# 由于上面已经配置好Flink report、Pushgateway、Prometheus,并且在Grafana中已经添加了Prometheus数据源,所以Grafana中会自动获取到Flink job的metrics 。
Grafana首页,点击+号 -->> Dashboard,创建一个新的Dashboard。
选中之后,即会出现对应的监控指标(根据需要添加,大概100多个监控项)
# 添加完之后点击右上角的Apply
至此,Flink的metrics的指标展示在Grafana中。
注:添加完毕后记得保存Dashboard
八、最后总结
Flink metric数据流转的流程是Flink metric -->> Pushgateway -->> Prometheus -->> Grafana
若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!
评论