Prometheus+Grafana监控Flink指标(基于PushGateway)

小柒博客 评论84,1542字数 2673阅读8分54秒阅读模式

前提提要

本文主要介绍将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

若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!

继续阅读
历史上的今天
12 月
24
Wechat
微信扫一扫,加我!
weinxin
微信号已复制
微信公众号
微信扫一扫,关注我!
weinxin
公众号已复制
小柒博客
  • 本文由 小柒博客 发表于 2020年12月24日 16:08:23
  • 声明:本站所有文章,如无特殊说明或标注,本站文章均为原创。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。转载请务必保留本文链接:https://www.yangxingzhen.com/7769.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖动滑块以完成验证