流處理聯動篇 —— 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 集羣搭建

Prometheus 監控系統入門學習_#監控

  1. 安裝 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
  1. 安裝 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. 集羣配置

該操作在三台機器上都要操作一遍

# 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. 啓動集羣
# 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
  1. 查看
[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

Prometheus 監控系統入門學習_#運維_02


Prometheus 監控系統入門學習_#監控_03

2)部署 Flink

  1. 上傳 flink

上傳 flink-1.12.0-bin-scala_2.12.tgz 到Linux的 /opt/software目錄

[root@hadoop102 software]# rz
  1. 解壓安裝包

解壓到 /opt/module 目錄下

[root@hadoop102 software]# tar -xzvf flink-1.12.0-bin-scala_2.12.tgz -C /opt/module/
  1. 重命名
[root@hadoop102 module]# mv flink-1.12.0/ flink-prometheus
  1. 拷貝 jar
[root@hadoop102 flink-prometheus]# cp plugins/metrics-prometheus/flink-metrics-prometheus-1.12.0.jar lib/

3)集成

  1. 修改 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
  1. 開啓接收數據
[root@hadoop102 flink-prometheus]# nc -lk 9999
  1. 上傳應用程序

flink-prometheus-1.0-SNAPSHOT.jar

[root@hadoop102 flink-prometheus]# rz
  1. 運行 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)驗證

Prometheus 監控系統入門學習_#prometheus_04

Prometheus 監控系統入門學習_#睿象雲_05