searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Prometheus 监控flink

2023-07-26 01:13:00
204
0

Prometheus 监控flink

本文档主要介绍如何将flink任务运行的metric发送到Prometheus,如何做相关的配置接入,以及性能看板展示(包括各个阶段输入输出qps 时延 反压成因 checkpoint延迟 state大小)等。

0.监控的意义

flink流式任务在实时性稳定性方面都有一定的要求,通过Prometheus 采集flink集群的metric,指定一些指标就可以对其进行监控告警。从而能够让开发人员快速反应,及时处理线上问题。

1.Prometheus 简介

Prometheus是一个开源的监控和报警系统。最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于2016年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目。Prometheus 相比于其他传统监控工具主要有以下几个特点:

1.1 特性

  • 多维度的数据模型(通过指标名称和标签键值对标识)
  • 灵活的查询语言
  • 单机工作模式,不依赖于分布式存储
  • 通过pull模式(HTTP)收集监控数据
  • 通过使用中间件可以支持push监控数据到prometheus
  • 通过服务发现或者静态配置发现目标(监控数据源)
  • 支持多模式的画图和仪表盘

1.2 组件

Prometheus生态系统包含很多组件(大多是都是可选择的):

  • Prometheus server(抓取、存储时间序列数据)
  • push gateway(push 的方式将指标数据推送到该网关
  • exporters(暴露指标让任务来抓)
  • alertmanager(处理警报)

大多数 Prometheus 组件都是用 Go 编写的,因此很容易构建和部署为静态的二进制文件。

1.3 架构

下面这张图展示了prometheus的建构和prometheus系统可能需要到的组件:

2.prometheus安装配置

参考文档:

https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/deployment/metric_reporters/#prometheus

PS:除了Prometheus主动发现Pod,然后定期抓取metrcis的方式,flink 也支持向PushGateway 主动push metrcis

2.1 安装 Prometheus Server

Prometheus 基于 Golang 编写,编译后的软件包,不依赖于任何的第三方依赖。只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动 Prometheus Server。

1.下载安装包

[sirius@Flare ~]# mkdir -p /usr/local/software && cd /usr/local/software

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/prometheus/releases/download/v2.29.1/prometheus-2.29.1.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software]# tar -zxvf prometheus-2.29.1.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  prometheus-2.29.1.linux-amd64 prometheus

4.修改配置文件

[sirius@Flare /usr/local/software]# cd prometheus

[sirius@Flare /usr/local/software/prometheus]# sudo vim prometheus.yml

prometheus.yml:

# 控制Prometheus 服务器的全局配置

global:

  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).

 

# Alertmanager configuration

alerting:

  alertmanagers:

  - static_configs:

    - targets: ['localhost:9093']

     # - alertmanager: 9093

 

# 规则配置文件

rule_files:

  - "/usr/local/software/prometheus/rule.yml"

  

# 在 scrape_configs 配置项下添加配置:

scrape_configs:

# 添加 Promethus 监控配置

  - job_name: 'prometheus'

    static_configs:

    - targets: ['localhost:9090']

 

# 添加 PushGateway 监控配置

  - job_name: 'pushgateway'

    static_configs:

    - targets: ['localhost:9091']

      labels:

      instance: pushgateway

 

# 添加 Node Exporter 监控配置

  - job_name: 'node_exporter'

    metrics_path: /metrics

    static_configs:

      - targets: ['localhost:9100']

 

# 添加 Mysql  Exporter 监控配置

  - job_name: 'mysql_exporter'

    metrics_path: /metrics

    static_configs:

      - targets: ['localhost:9104']

        labels:

          instance: gatorade

 

# 添加 Alertmanger 监控配置

  - job_name: 'alertmanger'

    static_configs:

      - targets: ['localhost:9093']

5.配置文件说明

1、global 配置块:控制Prometheus 服务器的全局配置

scrape_interval:配置拉取数据的时间间隔,默认为 15 秒,可以做覆盖。

evaluation_interval:规则验证(生成 alert)的时间间隔,用来控制评估规则的频率,prometheus 使用规则产生新的时间序列数据或者产生警报。默认为 15 秒,可以做覆盖。

2、rule_files 配置块:规则配置文件。它指定了报警规则所在的位置,prometheus 可以根据这个配置加载规则,用于生成新的时间序列数据或者报警信息,当前我们没有配置任何报警规则。

3、scrape_configs 配置块:配置采集目标相关, prometheus 监视的目标。 用于控制 prometheus 监控哪些资源

由于 prometheus 通过 HTTP 的方式来暴露的它本身的监控数据,prometheus 也能够监控本身的健康情况。在默认的配置里有一个单独的 job,叫做 prometheus,它采集 prometheus 服务本身的时间序列数据。这个 job 包含了一个单独的、静态配置的目标:监听 localhost 上的 9090 端口。prometheus 默认会通过目标的 /metrics 路径采集 metrics。所以,默认的 job 通过 URL:http://localhost:9090/metrics 采集 metrics。收集到的时间序列包含 prometheus 服务本身的状态和性能。如果我们还有其他的资源需要监控的话,直接配置在 scrape_configs 模块下面就可以了。

- job_name:监控作业的名称

- static_configs:表示静态目标配置,就是固定从某个 target 拉取数据

- targets : 指定监控的目标, 其实就是从哪儿拉取数据。 Prometheus 会从 http://localhost:9090/metrics 上拉取数据。

Prometheus 是可以在运行时自动加载配置的。启动时需要添加:--web.enable-lifecycle

2.2 安装 Pushgateway

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

1.下载安装包

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/pushgateway/releases/download/v1.4.2/pushgateway-1.4.2.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software]# tar -zxvf pushgateway-1.4.2.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  pushgateway-1.4.2.linux-amd64 pushgateway

2.3 安装 Node Exporter

在 Prometheus 的架构设计中,Prometheus Server 主要负责数据的收集,存储并且对外提供数据查询支持,而实际的监控样本数据的收集则是由 Exporter 完成。因此为了能够监控到某些东西,如主机的CPU 使用率,我们需要使用到 Exporter。Prometheus 周期性的从 Exporter 暴露的HTTP 服务地址(通常是/metrics)拉取监控样本数据。

Exporter 可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向 Prometheus 提供标准格式的监控样本数据即可。

为了能够采集到主机的运行指标如CPU, 内存,磁盘等信息。我们可以使用Node Exporter。Node Exporter 同样采用 Golang 编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。可以从 https://prometheus.io/download/ 获取最新的 node exporter 版本的二进制包。

1.下载安装包

#在被管理机上安装node_exporter组件,本地测试只有一台机器。

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software]# tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  node_exporter-1.2.2.linux-amd64 node_exporter

2.4 安装mysqld_exporter

mysqld_exporter是Prometheus用于监控MySQL指标的一个导出器,支持对MySQL 5.5以上进行监控。使用 mysqld_exporter 来抓取 mysql的一些指标信息。

1.下载安装包

#在被管理机上安装mysqld_exporter组件,本地测试只有一台机器。

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software]# tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  mysqld_exporter-0.12.1.linux-amd64  mysqld_exporter

4.数据库授权

[sirius@Flare /usr/local]# mysql -u root -p

mysql > GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqlexporter'@'localhost' identified by 'mysqlexporter@dataxgroup';

mysql > GRANT SELECT ON performance_schema.* TO 'mysqlexporter'@'localhost';

mysql > flush privileges;

Query OK, 0 rows affected (0.01 sec)

mysql > quit;

Bye

# (注意:授权ip为localhost,因为不是prometheus服务器来直接找mysql获取数据,而是prometheus服务器找mysql_exporter,mysql_exporter 再找mysql。所以这个localhost是指的mysql_exporter的IP)

5.创建配置文件

# 创建一个mysql配置文件,写上连接的用户名与密码(和上面的授权的用户名 和密码要对应)

[sirius@Flare /usr/local]# vim /usr/local/software/mysqld_exporter/.my.cnf

[client]

user=mysqlexporter

password=XXXX

2.5 安装 Alertmanager

Altermanager是Prometheus中的一个独立的告警模块,主要是用针对异常数据进行报警。首先创建一个报警的规则,其次创建路由(给谁发报警信息)。

1.下载安装包

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software/software]# tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  alertmanager-0.21.0.linux-amd64 alertmanager

4.建立alertManager报警规则

#1.建立alertManager报警规则

[sirius@Flare /usr/local/software/alertmanager]# sudo vim alertmanager.yml

global:

  resolve_timeout: 1h # 警告的间隔时间,默认是:5m

 

# 邮件告警配置

  smtp_smarthost: 'smtp.qq.com:465'

  smtp_from: 'smtp.qq.com'

  smtp_auth_username: '905604327@qq.com'

  smtp_auth_password: 'XXXX'

  smtp_require_tls: true

 

# 配置报警的模板

templates:

  - '/etc/alertmanager/config/*.tmpl'

 

# 路由

route:

   # 匹配的标签的ksy

  group_by: ['alertname']

  group_wait: 30s

  group_interval: 5m

  repeat_interval: 4h

  receiver: 'email'

  routes:

    - receiver: 'email'

      match_re:

        # 匹配的是标签的值

        service: '^(warning|critical)$'

 

# 接收者

receivers:

  - name: 'email'

    email_configs:

      - to: '905604327@qq.com'

        send_resolved: true

        

#2.检查配置是否生效

[sirius@Flare /usr/local/software/alertmanager]#  ./amtool check-config alertmanager.yml

Checking 'alertmanager.yml'  SUCCESS

Found:

 - global config

 - route

 - 0 inhibit rules

 - 1 receivers

 - 1 templates

  SUCCESS

 

[sirius@Flare /usr/local/software/alertmanager]# mkdir /etc/alertmanager/config/ -p

5.邮件告警模板

[sirius@Flare /usr/local/software/alertmanager]# sudo vim /etc/alertmanager/config/email.tmpl

email.tmpl:

{{ define "email.to.html" }}

{{ range .Alerts }}

=========start==========<br>

告警程序: prometheus_alert <br>

告警级别: {{ .Labels.severity }} <br>

告警类型: {{ .Labels.alertname }} <br>

故障主机: {{ .Labels.instance }} <br>

告警主题: {{ .Annotations.summary }} <br>

告警详情: {{ .Annotations.description }} <br>

=========end==========<br>

{{ end }}

{{ end }}

2.6 配置systemctl启动

1.配置Promethus

#1.配置Promethus

[sirius@Flare ~]# vim /etc/systemd/system/prometheus.service

#prometheus.service:

[Unit]

Description=Prometheus Server

Documentation=https://prometheus.io/

After=network.target

[Service]

Type=simple

User=root

Restart=on-failure

ExecStart=/usr/local/software/prometheus/prometheus --config.file=/usr/local/software/prometheus/prometheus.yml --web.read-timeout=5m  --web.max-connections=10 --storage.tsdb.retention=15d --storage.tsdb.path=/usr/local/software/prometheus/data --query.max-concurrency=20 --query.timeout=2m

Restart=on-failure

[Install]

WantedBy=multi-user.target

#2.创建数据目录

[sirius@Flare /usr/local/software/prometheus]# mkdir data

[sirius@Flare /usr/local/software/prometheus]# sudo chmod -R 777 data

#3.启动参数解释

–config.file=/etc/prometheus.yml 指定配置文件

–web.read-timeout=5m 请求链接的最大等待时间,防止太多的空闲链接占用资源

–web.max-connections=512 针对prometheus,获取数据源的时候,建立的网络链接数,做一个最大数字的限制,防止链接数过多造成资源过大的消耗

–storage.tsdb.retention=15d 重要参数,prometheus 开始采集监控数据后,会存在内存和硬盘中;对于保存期限的设置。时间过长,硬盘和内存都吃不消;时间太短,要查历史数据就没了。企业15天最为合适。

–storage.tsdb.path="/usr/local/software/prometheus/data" 存储数据路径,不要随便定义

–query.max-concurrency=20 用户查询最大并发数

–query.timeout=2m 慢查询强制终止

ps:配置文件不能加双引号,否则启动报错找不到文件或目录,本次启动用户是root生产中最好新建一个用户用于启动,需要设置配置文件及数据文件权限,数据目录在生产中最好单独配置数据硬盘,使用LVM硬盘格式配置。

2.配置Pushgateway

[sirius@Flare ~]# vim /etc/systemd/system/pushgateway.service

#pushgateway.service:

[Unit]

Description=pushgateway

Documentation=https://prometheus.io/

After=network.target

 

[Service]

Type=simple

User=root

ExecStart=/usr/local/software/pushgateway/pushgateway

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

3.配置Node_exporter

[sirius@Flare ~]# vim /etc/systemd/system/node_exporter.service

#node_exporter.service:

[Unit]

Description=Node Exporter

Documentation=https://prometheus.io/

Wants=network-online.target

After=network-online.target

 

[Service]

Type=simple

User=root

ExecStart=/usr/local/software/node_exporter/node_exporter

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

4.配置mysqld_exporter

[sirius@Flare ~]# vim /etc/systemd/system/mysqld_exporter.service

#mysqld_exporter.service:

[Unit]

Description=mysqld_exporter

Documentation=https://prometheus.io/

After=network.target

 

[Service]

Type=simple

User=mysql

# Environment=DATA_SOURCE_NAME=exporter:exporter123@(localhost:3306)/

ExecStart=/usr/local/software/mysqld_exporter/mysqld_exporter --web.listen-address=0.0.0.0:9104

  --config.my-cnf /usr/local/software/mysqld_exporter/.my.cnf \

  --collect.slave_status \

  --collect.slave_hosts \

  --log.level=error \

  --collect.info_schema.processlist \

  --collect.info_schema.innodb_metrics \

  --collect.info_schema.innodb_tablespaces \

  --collect.info_schema.innodb_cmp \

  --collect.info_schema.innodb_cmpmem

Restart=on-failure

 

[Install]

WantedBy=multi-user.targe

5.配置alertmanager

#1.创建相关数据存放目录

[sirius@Flare alertmanager-0.21.0.linux-amd64]# mkdir /data/alertmanager/medate/ -p

 

#2.配置system启动

[sirius@Flare alertmanager-0.21.0.linux-amd64]# sudo vim /etc/systemd/system/alertmanager.service

#alertmanager.service

[Unit]

Description=alertmanager

Documentation=https://prometheus.io/

After=network.target

 

[Service]

Type=simple

User=root

ExecStart=/usr/local/software/alertmanager/alertmanager --config.file=/usr/local/software/alertmanager/alertmanager.yml --storage.path=/data/alertmanager/medate/ --data.retention=120h

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

2.7 启动服务

1.重载并启动服务

#1.所有服务器重载服务

[sirius@Flare ~]# systemctl daemon-reload

#2.启动node_exporter并设置开机自启

[sirius@Flare ~]# systemctl enable --now node_exporter.service

#3.启动mysql_exporter并设置开机自启

[sirius@Flare ~]# systemctl enable --now mysqld_exporter.service

#4.启动pushgateway并设置开机自启

[sirius@Flare ~]# systemctl enable --now pushgateway.service

#5.启动并设置开机自启

[sirius@Flare ~]# systemctl enable --now alertmanager.service

#6.启动promethus并设置开机自启

[sirius@Flare ~]# systemctl enable --now prometheus.service

2.8 验证服务

#1.浏览器输入:http://localhost:9090/

#2.点击 Status,选中 Targets:

#3.prometheus、pushgateway 和 node exporter、mysqld exporter都是 up 状态,表示安装启动成功:

#4.使用 systemctl status prometheus确认启动状态

  • 进入http://localhost:9091可以查看pushgateway的基本情况。包括Metrics、Status和帮助文档。目前我们没有接入flink,所以首次打开metrics显示为空白。
  • 进入http://localhost:9090可以查看prometheus的基本情况。
  • 包括Alerts告警(它会显示当前的任务告警信息,如果有的话)、Graph图表(通过输入检索规则来获取相应的文字/图表信息)、Status状态(下拉复选框有多个)以及Help帮助文档。
  • 如果不习惯当前的页面展示,可以点击Classic UI回到经典页面。

status的runtime&build信息

status的command-line flags信息

status的configuration信息

status的服务发现信息

prometheus的graph信息

通过键入检索条件,我们可以获得相应输出:

前面说过, prometheus 通过 HTTP 的方式来暴露的它本身的监控数据,因此它也能够监控本身的健康情况。我们可以通过localhost的 /metrics 路径采集本机的一些metrics。如下所示:

3.集成Flink

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

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

1.拷贝jar包

#1.拷贝新的flink 目录,flink-prometheus

#2.将 flink-metrics-prometheus-1.12.0.jar 拷贝到 <flink_home>/lib 目录下;如果找不到,去maven仓库下一个

[root@ga002 flink-prometheus]$ cp /usr/local/software/flink-prometheus/plugins/metrics-prometheus/flink-metrics-prometheus-1.12.0.jar /usr/local/software/flink-prometheus/lib/

ps:Flink 的 Classpath 位于 lib 目录下,所以插件的jar 包需要放到该目录下

2.修改Flink配置

进入到 Flink 的 conf 目录,修改 flink-conf.yaml

[sirius@Flare /usr/local/software/flink-prometheus/conf]$ sudo vim flink-conf.yaml

添加如下配置:

##### 与 Prometheus 集 成 配 置 #####

metrics.reporter.promgateway.class:

org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter

 

# PushGateway 的主机名与端口号

metrics.reporter.promgateway.host: ga002

metrics.reporter.promgateway.port: 9091

 

# Flink metric 在前端展示的标签(前缀)与随机后缀

metrics.reporter.promgateway.jobName: flink-metrics-ppg

metrics.reporter.promgateway.randomJobNameSuffix: true

metrics.reporter.promgateway.deleteOnShutdown: false

metrics.reporter.promgateway.interval: 30 SECONDS

3.启动netcat

[sirius@Flare /usr/local/software/flink-prometheus/sbin]$ nc -lk 9999

4.启动hdfs、yarn,提交 flink 任务到 yarn 上

# 可以通过 8088 跳到flinkUI 的job 页面,查看指标统计

[sirius@Flare /usr/local/software/flink-prometheus]$ bin/flink run -t yarn-per-job -c

com.atguigu.flink.chapter02.Flink03_WordCount_UnboundStream ./flink-base-1.0-SNAPSHOT- jar-with-dependencies.jar

5.刷新 Prometheus 页面

如果有 flink 指标,集成成功

 

0条评论
0 / 1000
Sirius.
4文章数
0粉丝数
Sirius.
4 文章 | 0 粉丝
Sirius.
4文章数
0粉丝数
Sirius.
4 文章 | 0 粉丝
原创

Prometheus 监控flink

2023-07-26 01:13:00
204
0

Prometheus 监控flink

本文档主要介绍如何将flink任务运行的metric发送到Prometheus,如何做相关的配置接入,以及性能看板展示(包括各个阶段输入输出qps 时延 反压成因 checkpoint延迟 state大小)等。

0.监控的意义

flink流式任务在实时性稳定性方面都有一定的要求,通过Prometheus 采集flink集群的metric,指定一些指标就可以对其进行监控告警。从而能够让开发人员快速反应,及时处理线上问题。

1.Prometheus 简介

Prometheus是一个开源的监控和报警系统。最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于2016年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目。Prometheus 相比于其他传统监控工具主要有以下几个特点:

1.1 特性

  • 多维度的数据模型(通过指标名称和标签键值对标识)
  • 灵活的查询语言
  • 单机工作模式,不依赖于分布式存储
  • 通过pull模式(HTTP)收集监控数据
  • 通过使用中间件可以支持push监控数据到prometheus
  • 通过服务发现或者静态配置发现目标(监控数据源)
  • 支持多模式的画图和仪表盘

1.2 组件

Prometheus生态系统包含很多组件(大多是都是可选择的):

  • Prometheus server(抓取、存储时间序列数据)
  • push gateway(push 的方式将指标数据推送到该网关
  • exporters(暴露指标让任务来抓)
  • alertmanager(处理警报)

大多数 Prometheus 组件都是用 Go 编写的,因此很容易构建和部署为静态的二进制文件。

1.3 架构

下面这张图展示了prometheus的建构和prometheus系统可能需要到的组件:

2.prometheus安装配置

参考文档:

https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/deployment/metric_reporters/#prometheus

PS:除了Prometheus主动发现Pod,然后定期抓取metrcis的方式,flink 也支持向PushGateway 主动push metrcis

2.1 安装 Prometheus Server

Prometheus 基于 Golang 编写,编译后的软件包,不依赖于任何的第三方依赖。只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动 Prometheus Server。

1.下载安装包

[sirius@Flare ~]# mkdir -p /usr/local/software && cd /usr/local/software

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/prometheus/releases/download/v2.29.1/prometheus-2.29.1.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software]# tar -zxvf prometheus-2.29.1.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  prometheus-2.29.1.linux-amd64 prometheus

4.修改配置文件

[sirius@Flare /usr/local/software]# cd prometheus

[sirius@Flare /usr/local/software/prometheus]# sudo vim prometheus.yml

prometheus.yml:

# 控制Prometheus 服务器的全局配置

global:

  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).

 

# Alertmanager configuration

alerting:

  alertmanagers:

  - static_configs:

    - targets: ['localhost:9093']

     # - alertmanager: 9093

 

# 规则配置文件

rule_files:

  - "/usr/local/software/prometheus/rule.yml"

  

# 在 scrape_configs 配置项下添加配置:

scrape_configs:

# 添加 Promethus 监控配置

  - job_name: 'prometheus'

    static_configs:

    - targets: ['localhost:9090']

 

# 添加 PushGateway 监控配置

  - job_name: 'pushgateway'

    static_configs:

    - targets: ['localhost:9091']

      labels:

      instance: pushgateway

 

# 添加 Node Exporter 监控配置

  - job_name: 'node_exporter'

    metrics_path: /metrics

    static_configs:

      - targets: ['localhost:9100']

 

# 添加 Mysql  Exporter 监控配置

  - job_name: 'mysql_exporter'

    metrics_path: /metrics

    static_configs:

      - targets: ['localhost:9104']

        labels:

          instance: gatorade

 

# 添加 Alertmanger 监控配置

  - job_name: 'alertmanger'

    static_configs:

      - targets: ['localhost:9093']

5.配置文件说明

1、global 配置块:控制Prometheus 服务器的全局配置

scrape_interval:配置拉取数据的时间间隔,默认为 15 秒,可以做覆盖。

evaluation_interval:规则验证(生成 alert)的时间间隔,用来控制评估规则的频率,prometheus 使用规则产生新的时间序列数据或者产生警报。默认为 15 秒,可以做覆盖。

2、rule_files 配置块:规则配置文件。它指定了报警规则所在的位置,prometheus 可以根据这个配置加载规则,用于生成新的时间序列数据或者报警信息,当前我们没有配置任何报警规则。

3、scrape_configs 配置块:配置采集目标相关, prometheus 监视的目标。 用于控制 prometheus 监控哪些资源

由于 prometheus 通过 HTTP 的方式来暴露的它本身的监控数据,prometheus 也能够监控本身的健康情况。在默认的配置里有一个单独的 job,叫做 prometheus,它采集 prometheus 服务本身的时间序列数据。这个 job 包含了一个单独的、静态配置的目标:监听 localhost 上的 9090 端口。prometheus 默认会通过目标的 /metrics 路径采集 metrics。所以,默认的 job 通过 URL:http://localhost:9090/metrics 采集 metrics。收集到的时间序列包含 prometheus 服务本身的状态和性能。如果我们还有其他的资源需要监控的话,直接配置在 scrape_configs 模块下面就可以了。

- job_name:监控作业的名称

- static_configs:表示静态目标配置,就是固定从某个 target 拉取数据

- targets : 指定监控的目标, 其实就是从哪儿拉取数据。 Prometheus 会从 http://localhost:9090/metrics 上拉取数据。

Prometheus 是可以在运行时自动加载配置的。启动时需要添加:--web.enable-lifecycle

2.2 安装 Pushgateway

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

1.下载安装包

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/pushgateway/releases/download/v1.4.2/pushgateway-1.4.2.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software]# tar -zxvf pushgateway-1.4.2.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  pushgateway-1.4.2.linux-amd64 pushgateway

2.3 安装 Node Exporter

在 Prometheus 的架构设计中,Prometheus Server 主要负责数据的收集,存储并且对外提供数据查询支持,而实际的监控样本数据的收集则是由 Exporter 完成。因此为了能够监控到某些东西,如主机的CPU 使用率,我们需要使用到 Exporter。Prometheus 周期性的从 Exporter 暴露的HTTP 服务地址(通常是/metrics)拉取监控样本数据。

Exporter 可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向 Prometheus 提供标准格式的监控样本数据即可。

为了能够采集到主机的运行指标如CPU, 内存,磁盘等信息。我们可以使用Node Exporter。Node Exporter 同样采用 Golang 编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。可以从 https://prometheus.io/download/ 获取最新的 node exporter 版本的二进制包。

1.下载安装包

#在被管理机上安装node_exporter组件,本地测试只有一台机器。

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software]# tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  node_exporter-1.2.2.linux-amd64 node_exporter

2.4 安装mysqld_exporter

mysqld_exporter是Prometheus用于监控MySQL指标的一个导出器,支持对MySQL 5.5以上进行监控。使用 mysqld_exporter 来抓取 mysql的一些指标信息。

1.下载安装包

#在被管理机上安装mysqld_exporter组件,本地测试只有一台机器。

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software]# tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  mysqld_exporter-0.12.1.linux-amd64  mysqld_exporter

4.数据库授权

[sirius@Flare /usr/local]# mysql -u root -p

mysql > GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqlexporter'@'localhost' identified by 'mysqlexporter@dataxgroup';

mysql > GRANT SELECT ON performance_schema.* TO 'mysqlexporter'@'localhost';

mysql > flush privileges;

Query OK, 0 rows affected (0.01 sec)

mysql > quit;

Bye

# (注意:授权ip为localhost,因为不是prometheus服务器来直接找mysql获取数据,而是prometheus服务器找mysql_exporter,mysql_exporter 再找mysql。所以这个localhost是指的mysql_exporter的IP)

5.创建配置文件

# 创建一个mysql配置文件,写上连接的用户名与密码(和上面的授权的用户名 和密码要对应)

[sirius@Flare /usr/local]# vim /usr/local/software/mysqld_exporter/.my.cnf

[client]

user=mysqlexporter

password=XXXX

2.5 安装 Alertmanager

Altermanager是Prometheus中的一个独立的告警模块,主要是用针对异常数据进行报警。首先创建一个报警的规则,其次创建路由(给谁发报警信息)。

1.下载安装包

[sirius@Flare /usr/local/software]# wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

2.解压安装包

[sirius@Flare /usr/local/software/software]# tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz

3.做软连接

[sirius@Flare /usr/local/software]# ln -s  alertmanager-0.21.0.linux-amd64 alertmanager

4.建立alertManager报警规则

#1.建立alertManager报警规则

[sirius@Flare /usr/local/software/alertmanager]# sudo vim alertmanager.yml

global:

  resolve_timeout: 1h # 警告的间隔时间,默认是:5m

 

# 邮件告警配置

  smtp_smarthost: 'smtp.qq.com:465'

  smtp_from: 'smtp.qq.com'

  smtp_auth_username: '905604327@qq.com'

  smtp_auth_password: 'XXXX'

  smtp_require_tls: true

 

# 配置报警的模板

templates:

  - '/etc/alertmanager/config/*.tmpl'

 

# 路由

route:

   # 匹配的标签的ksy

  group_by: ['alertname']

  group_wait: 30s

  group_interval: 5m

  repeat_interval: 4h

  receiver: 'email'

  routes:

    - receiver: 'email'

      match_re:

        # 匹配的是标签的值

        service: '^(warning|critical)$'

 

# 接收者

receivers:

  - name: 'email'

    email_configs:

      - to: '905604327@qq.com'

        send_resolved: true

        

#2.检查配置是否生效

[sirius@Flare /usr/local/software/alertmanager]#  ./amtool check-config alertmanager.yml

Checking 'alertmanager.yml'  SUCCESS

Found:

 - global config

 - route

 - 0 inhibit rules

 - 1 receivers

 - 1 templates

  SUCCESS

 

[sirius@Flare /usr/local/software/alertmanager]# mkdir /etc/alertmanager/config/ -p

5.邮件告警模板

[sirius@Flare /usr/local/software/alertmanager]# sudo vim /etc/alertmanager/config/email.tmpl

email.tmpl:

{{ define "email.to.html" }}

{{ range .Alerts }}

=========start==========<br>

告警程序: prometheus_alert <br>

告警级别: {{ .Labels.severity }} <br>

告警类型: {{ .Labels.alertname }} <br>

故障主机: {{ .Labels.instance }} <br>

告警主题: {{ .Annotations.summary }} <br>

告警详情: {{ .Annotations.description }} <br>

=========end==========<br>

{{ end }}

{{ end }}

2.6 配置systemctl启动

1.配置Promethus

#1.配置Promethus

[sirius@Flare ~]# vim /etc/systemd/system/prometheus.service

#prometheus.service:

[Unit]

Description=Prometheus Server

Documentation=https://prometheus.io/

After=network.target

[Service]

Type=simple

User=root

Restart=on-failure

ExecStart=/usr/local/software/prometheus/prometheus --config.file=/usr/local/software/prometheus/prometheus.yml --web.read-timeout=5m  --web.max-connections=10 --storage.tsdb.retention=15d --storage.tsdb.path=/usr/local/software/prometheus/data --query.max-concurrency=20 --query.timeout=2m

Restart=on-failure

[Install]

WantedBy=multi-user.target

#2.创建数据目录

[sirius@Flare /usr/local/software/prometheus]# mkdir data

[sirius@Flare /usr/local/software/prometheus]# sudo chmod -R 777 data

#3.启动参数解释

–config.file=/etc/prometheus.yml 指定配置文件

–web.read-timeout=5m 请求链接的最大等待时间,防止太多的空闲链接占用资源

–web.max-connections=512 针对prometheus,获取数据源的时候,建立的网络链接数,做一个最大数字的限制,防止链接数过多造成资源过大的消耗

–storage.tsdb.retention=15d 重要参数,prometheus 开始采集监控数据后,会存在内存和硬盘中;对于保存期限的设置。时间过长,硬盘和内存都吃不消;时间太短,要查历史数据就没了。企业15天最为合适。

–storage.tsdb.path="/usr/local/software/prometheus/data" 存储数据路径,不要随便定义

–query.max-concurrency=20 用户查询最大并发数

–query.timeout=2m 慢查询强制终止

ps:配置文件不能加双引号,否则启动报错找不到文件或目录,本次启动用户是root生产中最好新建一个用户用于启动,需要设置配置文件及数据文件权限,数据目录在生产中最好单独配置数据硬盘,使用LVM硬盘格式配置。

2.配置Pushgateway

[sirius@Flare ~]# vim /etc/systemd/system/pushgateway.service

#pushgateway.service:

[Unit]

Description=pushgateway

Documentation=https://prometheus.io/

After=network.target

 

[Service]

Type=simple

User=root

ExecStart=/usr/local/software/pushgateway/pushgateway

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

3.配置Node_exporter

[sirius@Flare ~]# vim /etc/systemd/system/node_exporter.service

#node_exporter.service:

[Unit]

Description=Node Exporter

Documentation=https://prometheus.io/

Wants=network-online.target

After=network-online.target

 

[Service]

Type=simple

User=root

ExecStart=/usr/local/software/node_exporter/node_exporter

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

4.配置mysqld_exporter

[sirius@Flare ~]# vim /etc/systemd/system/mysqld_exporter.service

#mysqld_exporter.service:

[Unit]

Description=mysqld_exporter

Documentation=https://prometheus.io/

After=network.target

 

[Service]

Type=simple

User=mysql

# Environment=DATA_SOURCE_NAME=exporter:exporter123@(localhost:3306)/

ExecStart=/usr/local/software/mysqld_exporter/mysqld_exporter --web.listen-address=0.0.0.0:9104

  --config.my-cnf /usr/local/software/mysqld_exporter/.my.cnf \

  --collect.slave_status \

  --collect.slave_hosts \

  --log.level=error \

  --collect.info_schema.processlist \

  --collect.info_schema.innodb_metrics \

  --collect.info_schema.innodb_tablespaces \

  --collect.info_schema.innodb_cmp \

  --collect.info_schema.innodb_cmpmem

Restart=on-failure

 

[Install]

WantedBy=multi-user.targe

5.配置alertmanager

#1.创建相关数据存放目录

[sirius@Flare alertmanager-0.21.0.linux-amd64]# mkdir /data/alertmanager/medate/ -p

 

#2.配置system启动

[sirius@Flare alertmanager-0.21.0.linux-amd64]# sudo vim /etc/systemd/system/alertmanager.service

#alertmanager.service

[Unit]

Description=alertmanager

Documentation=https://prometheus.io/

After=network.target

 

[Service]

Type=simple

User=root

ExecStart=/usr/local/software/alertmanager/alertmanager --config.file=/usr/local/software/alertmanager/alertmanager.yml --storage.path=/data/alertmanager/medate/ --data.retention=120h

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

2.7 启动服务

1.重载并启动服务

#1.所有服务器重载服务

[sirius@Flare ~]# systemctl daemon-reload

#2.启动node_exporter并设置开机自启

[sirius@Flare ~]# systemctl enable --now node_exporter.service

#3.启动mysql_exporter并设置开机自启

[sirius@Flare ~]# systemctl enable --now mysqld_exporter.service

#4.启动pushgateway并设置开机自启

[sirius@Flare ~]# systemctl enable --now pushgateway.service

#5.启动并设置开机自启

[sirius@Flare ~]# systemctl enable --now alertmanager.service

#6.启动promethus并设置开机自启

[sirius@Flare ~]# systemctl enable --now prometheus.service

2.8 验证服务

#1.浏览器输入:http://localhost:9090/

#2.点击 Status,选中 Targets:

#3.prometheus、pushgateway 和 node exporter、mysqld exporter都是 up 状态,表示安装启动成功:

#4.使用 systemctl status prometheus确认启动状态

  • 进入http://localhost:9091可以查看pushgateway的基本情况。包括Metrics、Status和帮助文档。目前我们没有接入flink,所以首次打开metrics显示为空白。
  • 进入http://localhost:9090可以查看prometheus的基本情况。
  • 包括Alerts告警(它会显示当前的任务告警信息,如果有的话)、Graph图表(通过输入检索规则来获取相应的文字/图表信息)、Status状态(下拉复选框有多个)以及Help帮助文档。
  • 如果不习惯当前的页面展示,可以点击Classic UI回到经典页面。

status的runtime&build信息

status的command-line flags信息

status的configuration信息

status的服务发现信息

prometheus的graph信息

通过键入检索条件,我们可以获得相应输出:

前面说过, prometheus 通过 HTTP 的方式来暴露的它本身的监控数据,因此它也能够监控本身的健康情况。我们可以通过localhost的 /metrics 路径采集本机的一些metrics。如下所示:

3.集成Flink

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

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

1.拷贝jar包

#1.拷贝新的flink 目录,flink-prometheus

#2.将 flink-metrics-prometheus-1.12.0.jar 拷贝到 <flink_home>/lib 目录下;如果找不到,去maven仓库下一个

[root@ga002 flink-prometheus]$ cp /usr/local/software/flink-prometheus/plugins/metrics-prometheus/flink-metrics-prometheus-1.12.0.jar /usr/local/software/flink-prometheus/lib/

ps:Flink 的 Classpath 位于 lib 目录下,所以插件的jar 包需要放到该目录下

2.修改Flink配置

进入到 Flink 的 conf 目录,修改 flink-conf.yaml

[sirius@Flare /usr/local/software/flink-prometheus/conf]$ sudo vim flink-conf.yaml

添加如下配置:

##### 与 Prometheus 集 成 配 置 #####

metrics.reporter.promgateway.class:

org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter

 

# PushGateway 的主机名与端口号

metrics.reporter.promgateway.host: ga002

metrics.reporter.promgateway.port: 9091

 

# Flink metric 在前端展示的标签(前缀)与随机后缀

metrics.reporter.promgateway.jobName: flink-metrics-ppg

metrics.reporter.promgateway.randomJobNameSuffix: true

metrics.reporter.promgateway.deleteOnShutdown: false

metrics.reporter.promgateway.interval: 30 SECONDS

3.启动netcat

[sirius@Flare /usr/local/software/flink-prometheus/sbin]$ nc -lk 9999

4.启动hdfs、yarn,提交 flink 任务到 yarn 上

# 可以通过 8088 跳到flinkUI 的job 页面,查看指标统计

[sirius@Flare /usr/local/software/flink-prometheus]$ bin/flink run -t yarn-per-job -c

com.atguigu.flink.chapter02.Flink03_WordCount_UnboundStream ./flink-base-1.0-SNAPSHOT- jar-with-dependencies.jar

5.刷新 Prometheus 页面

如果有 flink 指标,集成成功

 

文章来自个人专栏
Sirius
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0