流處理聯動篇 —— Prometheus 與 Flink 集成(實時計算 + 智能監控)
- 一:概述
- 1)背景
- 2)Flink Metrics 的作用
- 3)Prometheus 集成
- 二:部署
- 1) `hadoop` 集羣搭建
- 2)部署 `Flink`
- 3)集成
- 4)驗證
- 總結
當你完整學完並實操本系列,你將擁有:
✅ 一套完整的 Prometheus 企業級監控體系
✅ 可落地的實時分析與異常檢測能力
✅ 高顏值可視化監控大屏
✅ 真正“無人值守”的智能告警系統
✅ 企業級項目經驗,可寫進簡歷/畢設/項目經驗
真正實現:監控採集 → 實時分析 → 可視化展示 → 智能告警 → 自動化運維閉環
一:概述
1)背景
在 Flink 作業運行過程中,開發人員往往難以及時獲取作業或集羣的內部運行狀況:
- 作業為什麼跑得慢或快?
- 是否存在異常?
- 無法實時查看所有 Task 的日誌,尤其在 大作業或多作業並行時更困難。
為了解決這些問題,Flink 提供了 Metrics 機制,用於收集和暴露作業與集羣運行指標。
2)Flink Metrics 的作用
通過 Metrics,開發人員可以:
- 實時瞭解 作業運行狀態(吞吐量、延遲、反壓情況等);
- 快速定位 性能瓶頸;
- 在 多作業場景下獲得全局視角,而無需逐個查看日誌;
- 結合可視化工具(如 Grafana)形成監控大盤,方便運維。
3)Prometheus 集成
從 Flink 源碼結構可見,Flink 官方支持 Prometheus,並提供了對接所需的 jar 包:
- 通過簡單配置即可啓用 Prometheus Reporter;
- Flink 的內部指標會通過 HTTP endpoint 暴露給 Prometheus;
- Prometheus 抓取這些指標後,可以與 Grafana 等工具結合,形成實時可視化監控。
二:部署
1) hadoop 集羣搭建
- 安裝
JDK
該操作在三台機器上都要操作一遍
# 1. 卸載系統自帶 JDK
rpm -qa | grep -i jdk | grep -i java | xargs -n1 rpm -e --nodeps
# 2. 上傳 jdk-8u212-linux-x64.tar.gz 到 /opt/software
rz
# 3. 解壓縮
tar -xzvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module
# 4. 配置環境變量
vim /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
# 5. 加載環境變量
source /etc/profile
- 安裝
Hadoop
該操作在三台機器上都要操作一遍
# 1. 上傳 hadoop-3.1.3.tar.gz 到 /opt/software
rz
# 2. 解壓縮
tar -xzvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module
# 3. 配置環境變量
vim /etc/profile
# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 4. 加載環境變量
source /etc/profile
- 集羣配置
該操作在三台機器上都要操作一遍
# 1. 配置 core-site.xml 文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop數據的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS網頁登錄使用的靜態用户為 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
# 2. 配置 hdfs-site.xml 文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
<configuration>
<!-- namenode web端訪問地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- SecondaryNameNode web端訪問地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
<!-- 指定 HDFS 副本的數量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 關閉 HDFS 檢查 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
# 3. 配置 yarn-site.xml 文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 環境變量的繼承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
# 4. 配置 mapred-site.xml 文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
<configuration>
<!-- 指定MapReduce程序運行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
# 5. 配置 workers 文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
hadoop102
hadoop103
hadoop104
# 6. 配置 hadoop-env.sh 文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_212
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
# . 創建 logs 文件夾
mkdir /opt/module/hadoop-3.1.3/logs
- 啓動集羣
# 1. 在 NameNode 節點進行格式化
[root@hadoop102 hadoop-3.1.3]# ./bin/hdfs namenode -format
# 2. 啓動 HDFS
[root@hadoop102 hadoop-3.1.3]# ./sbin/start-dfs.sh
# 3. 啓動 Yarn
[root@hadoop103 hadoop-3.1.3]# ./sbin/start-yarn.sh
- 查看
[root@hadoop102 hadoop-3.1.3]# xcall.sh jps
================ 腳本作用 =================
批量執行命令: 'jps'
節點區間: 102 - 104
當前用户: root
============================================
--- root@hadoop104 ---
94692 SecondaryNameNode
94232 DataNode
95402 Jps
93964 NodeManager
--- root@hadoop103 ---
95794 Jps
94263 NodeManager
94536 DataNode
94043 ResourceManager
--- root@hadoop102 ---
95409 DataNode
96705 Jps
94968 NodeManager
95162 NameNode
2)部署 Flink
- 上傳
flink
上傳
flink-1.12.0-bin-scala_2.12.tgz到Linux的/opt/software目錄
[root@hadoop102 software]# rz
- 解壓安裝包
解壓到
/opt/module目錄下
[root@hadoop102 software]# tar -xzvf flink-1.12.0-bin-scala_2.12.tgz -C /opt/module/
- 重命名
[root@hadoop102 module]# mv flink-1.12.0/ flink-prometheus
- 拷貝
jar包
[root@hadoop102 flink-prometheus]# cp plugins/metrics-prometheus/flink-metrics-prometheus-1.12.0.jar lib/
3)集成
- 修改
Flink配置
[root@hadoop102 flink-prometheus]# vim conf/flink-conf.yaml
# 文件末尾追加
##### 與Prometheus集成配置 #####
# promgateway class
metrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
# PushGateway的主機名與端口號
metrics.reporter.promgateway.host: hadoop102
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
- 開啓接收數據
[root@hadoop102 flink-prometheus]# nc -lk 9999
- 上傳應用程序
flink-prometheus-1.0-SNAPSHOT.jar
[root@hadoop102 flink-prometheus]# rz
- 運行 Flink job 任務
[root@hadoop102 flink-prometheus]# ./bin/flink run -t yarn-per-job -c com.alex.flink.prometheus.WordCountStream flink-prometheus-1.0-SNAPSHOT.jar
4)驗證