第六章 Prometheus-2.29.1和 Flink 集成


官網:https://prometheus.io/

下載地址:https://prometheus.io/download/

一、 安裝 Prometheus Server

Prometheus 基於 Golang 編寫,編譯后的軟件包,不依賴於任何的第三方依賴。只需要下載對應平台的二進制包,解壓並且添加基本的配置即可正常啟動 Prometheus Server。

1.下載安裝包

[root@ga002 ~]# mkdir -p /data/software && cd /data/software
[root@ga002 /data/software]# wget https://github.com/prometheus/prometheus/releases/download/v2.29.1/prometheus-2.29.1.linux-amd64.tar.gz

2.解壓安裝包

[root@ga002 /data/software]# mkdir -p /opt/module
[root@ga002 /data/software]# tar -zxvf prometheus-2.29.1.linux-amd64.tar.gz -C /opt/module

3.做軟連接

[root@ga002 /data/software]# cd /opt/module
[root@ga002 /opt/module]# ln -s  prometheus-2.29.1.linux-amd64 prometheus

4.修改配置文件

[root@ga002 /opt/module]# cd prometheus

[root@ga002 /opt/module/prometheus]# vim 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: ['ga002:9093']
     # - alertmanager: 9093

# 規則配置文件
rule_files:
  - "/opt/module/prometheus/rule.yml"
  
# 在 scrape_configs 配置項下添加配置:
scrape_configs:
# 添加 Promethus 監控配置
  - job_name: 'prometheus'
    static_configs:
    - targets: ['ga002:9090']

# 添加 PushGateway 監控配置
  - job_name: 'pushgateway'
    static_configs:
    - targets: ['ga002:9091']
      labels:
        instance: pushgateway

# 添加 Node Exporter 監控配置
  - job_name: 'node_exporter'
    metrics_path: /metrics
    static_configs:
      - targets: ['ga002:9100','gd001:9100','ga001:9100','gw001:9100','ga003:9100']

# 添加 Mysql  Exporter 監控配置
  - job_name: 'mysql_exporter'
    metrics_path: /metrics
    static_configs:
      - targets: ['gd001:9104']
        labels:
          instance: gatorade

# 添加 Alertmanger 監控配置
  - job_name: 'alertmanger'
    static_configs:
      - targets: ['ga002:9093']

5.配置文件說明

1、global 配置塊:控制Prometheus 服務器的全局配置
scrape_interval:配置拉取數據的時間間隔,默認為 1 分鍾。
evaluation_interval:規則驗證(生成 alert)的時間間隔,默認為 1 分鍾。

2、rule_files 配置塊:規則配置文件
3、scrape_configs 配置塊:配置采集目標相關, prometheus 監視的目標。Prometheus 自身的運行信息可以通過 HTTP 訪問,所以Prometheus 可以監控自己的運行數據。
- job_name:監控作業的名稱
- static_configs:表示靜態目標配置,就是固定從某個 target 拉取數據
- targets : 指定監控的目標, 其實就是從哪兒拉取數據。 Prometheus 會從 http://ga002:9090/metrics 上拉取數據。
Prometheus 是可以在運行時自動加載配置的。啟動時需要添加:--web.enable-lifecycle

二、安裝 Pushgateway

Prometheus 在正常情況下是采用拉模式從產生 metric 的作業或者 exporter(比如專門監控主機的Node Exporter)拉取監控數據。但是我們要監控的是 Flink on YARN 作業, 想要讓 Prometheus 自動發現作業的提交、結束以及自動拉取數據顯然是比較困難的。PushGateway 就是一個中轉組件,通過配置Flink on YARN 作業將 metric 推到PushGateway,Prometheus 再從PushGateway 拉取就可以了。

1.下載安裝包

[root@ga002 ~]# cd /data/software
[root@ga002 /data/software]# wget https://github.com/prometheus/pushgateway/releases/download/v1.4.2/pushgateway-1.4.2.linux-amd64.tar.gz

2.解壓安裝包

[root@ga002 /data/software]# mkdir -p /opt/module
[root@ga002 /data/software]# tar -zxvf pushgateway-1.4.2.linux-amd64.tar.gz -C /opt/module

3.做軟連接

[root@ga002 /data/software]# cd /opt/module
[root@ga002 /opt/module]# ln -s  pushgateway-1.4.2.linux-amd64 pushgateway

三、安裝 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.下載安裝包

#在被管理機ga001,ga002,ga003,gd001,gw001上安裝node_exporter組件
[root@ga002 ~]# cd /data/software
[root@ga002 /data/software]# wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

2.解壓安裝包

[root@ga002 /data/software]# mkdir -p /opt/module
[root@ga002 /data/software]# tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /opt/module

3.做軟連接

[root@ga002 /data/software]# cd /opt/module
[root@ga002 /opt/module]# ln -s  node_exporter-1.2.2.linux-amd64 node_exporter

四、安裝mysqld_exporter

mysqld_exporter是Prometheus用於監控MySQL指標的一個導出器,支持對MySQL 5.5以上進行監控。使用 mysqld_exporter 來抓取 mysql的一些指標信息。

1.下載安裝包

#在被管理機gd001上安裝mysqld_exporter組件
[root@gd001 ~]# cd /data/software
[root@gd001 /data/software]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

2.解壓安裝包

[root@gd001 /data/software]# mkdir -p /opt/module
[root@gd001 /data/software]# tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /opt/module

3.做軟連接

[root@gd001 /data/software]# cd /opt/module
[root@gd001 /opt/module]# ln -s  mysqld_exporter-0.12.1.linux-amd64  mysqld_exporter

4.數據庫授權

[root@gd001 opt]# 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配置文件,寫上連接的用戶名與密碼(和上面的授權的用戶名 和密碼要對應)
[root@gd001 opt]# vim /opt/module/mysqld_exporter/.my.cnf
[client]
user=mysqlexporter
password=mysqlexporter@dataxgroup

五、安裝 Alertmanager

Altermanager是Prometheus中的一個獨立的告警模塊,主要是用針對異常數據進行報警。首先創建一個報警的規則,其次創建路由(給誰發報警信息)。

1.下載安裝包

[root@ga002 ~]# cd /data/software
[root@ga002 /data/software]# wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

2.解壓安裝包

[root@ga002 /data/software]# tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz -C /opt/module

3.做軟連接

[root@ga002 /data/software]# cd /opt/module
[root@ga002 /opt/module]# ln -s  alertmanager-0.21.0.linux-amd64 alertmanager

4.建立alertManager報警規則

#1.建立alertManager報警規則
[root@ga002 /opt/module]# cd alertmanager
[root@ga002 /opt/module/alertmanager]# vim alertmanager.yml
global:
  resolve_timeout: 1h	# 警告的間隔時間,默認是:5m

# 郵件告警配置
  smtp_smarthost: 'smtp.mxhichina.com:465'
  smtp_from: 'smtp.mxhichina.com'
  smtp_auth_username: 'mjn.support@DataXgroup.com'
  smtp_auth_password: 'Qdl63aQm'
  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: 'li.yang@dataxgroup.com,hui.jin@dataxgroup.com'
        send_resolved: true
        
#2.檢查配置是否生效
[root@ga002 /opt/module/alertmanager]#  ./amtool check-config alertmanager.yml
Checking 'alertmanager.yml'  SUCCESS
Found:
 - global config
 - route
 - 0 inhibit rules
 - 1 receivers
 - 1 templates
  SUCCESS
[root@ga002 /opt/module/alertmanager]# mkdir /etc/alertmanager/config/ -p

5.alertManager報警規則說明

global:
  resolve_timeout: 1h   # 警告的間隔時間,默認是:5m

  # 郵件告警配置
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: 'axxxy@qq.com'
  smtp_auth_username: 'axxxy@qq.com'
  smtp_auth_password: 'qxxxxb'
  smtp_require_tls: false

# 配置報警的模板
templates:
  - '/etc/alertmanager/config/*.tmpl'

# 路由
route:
  # 匹配的標簽的ksy
  group_by: ['severity']
  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: '12xxxx30@qq.com'
        send_resolved: true

6.郵件告警模板

[root@ga002 /opt/module/alertmanager]# vim /etc/alertmanager/config/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 }}

六、配置systemctl啟動

1.配置Promethus

#1.配置Promethus
[root@ga002 ~]# vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
ExecStart=/opt/module/prometheus/prometheus --config.file=/opt/module/prometheus/prometheus.yml --web.read-timeout=5m  --web.max-connections=10 --storage.tsdb.retention=15d --storage.tsdb.path=/data/prometheus --query.max-concurrency=20 --query.timeout=2m
Restart=on-failure
[Install]
WantedBy=multi-user.target

#2.創建數據目錄
[root@ga002 ~]# mkdir /data/prometheus
#3.啟動參數解釋
–config.file=/etc/prometheus.yml 指定配置文件

–web.read-timeout=5m 請求鏈接的最大等待時間,防止太多的空閑鏈接占用資源

–web.max-connections=512 針對prometheus,獲取數據源的時候,建立的網絡鏈接數,做一個最大數字的限制,防止鏈接數過多造成資源過大的消耗

–storage.tsdb.retention=15d 重要參數,prometheus 開始采集監控數據后,會存在內存和硬盤中;對於保存期限的設置。時間過長,硬盤和內存都吃不消;時間太短,要查歷史數據就沒了。企業15天最為合適。
–storage.tsdb.path="/prometheus/data" 存儲數據路徑,不要隨便定義
  
–query.max-concurrency=20 用戶查詢最大並發數
  
–query.timeout=2m 慢查詢強制終止

ps:配置文件不能加雙引號,否則啟動報錯找不到文件或目錄,本次啟動用戶是root生產中最好新建一個用戶用於啟動,需要設置配置文件及數據文件權限,數據目錄在生產中最好單獨配置數據硬盤,使用LVM硬盤格式配置。

2.配置Pushgateway

[root@ga002 ~]# vim /etc/systemd/system/pushgateway.service
[Unit]
Description=pushgateway
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/opt/module/pushgateway/pushgateway
Restart=on-failure

[Install]
WantedBy=multi-user.target

3.配置Node_exporter

[root@ga001 opt]# vim /etc/systemd/system/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=/opt/module/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

4.配置mysqld_exporter

[root@gd001 opt]# vim /etc/systemd/system/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=/opt/module/mysqld_exporter/mysqld_exporter --web.listen-address=0.0.0.0:9104 
  --config.my-cnf /opt/module/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.創建相關數據存放目錄
[root@ga002 alertmanager-0.21.0.linux-amd64]# mkdir /data/alertmanager/medate/ -p

#2.配置system啟動
[root@ga002 alertmanager-0.21.0.linux-amd64]# vim /etc/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=root
ExecStart=/opt/module/alertmanager/alertmanager --config.file=/opt/module/alertmanager/alertmanager.yml --storage.path=/data/alertmanager/medate/ --data.retention=120h
Restart=on-failure

[Install]
WantedBy=multi-user.target

七、啟動服務

1.重載並啟動服務

#1.所有服務器重載服務
[root@ga002 ~]# systemctl daemon-reload

#2.啟動node_exporter並設置開機自啟
[root@ga002 ~]# systemctl enable --now node_exporter.service

#3.啟動mysql_exporter並設置開機自啟
[root@gd001 ~]# systemctl enable --now mysqld_exporter.service

#4.啟動pushgateway並設置開機自啟
[root@ga002 ~]# systemctl enable --now pushgateway.service

#5.啟動並設置開機自啟
[root@ga002 ~]# systemctl enable --now alertmanager.service

#6.啟動promethus並設置開機自啟
[root@ga002 ~]# systemctl enable --now promethus.service

八、驗證服務

#1.瀏覽器輸入:http://ga002:9090/

#2.點擊 Status,選中 Targets:

#3.prometheus、pushgateway 和 node exporter、mysqld exporter都是 up 狀態,表示安裝啟動成功:

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 目錄下
[root@ga002 flink-prometheus]$ cp /opt/module/flink-prometheus/plugins/metrics-prometheus/flink-metrics-prometheus-1.12.0.jar /opt/module/flink-prometheus/lib/
 
ps:Flink 的 Classpath 位於 lib 目錄下,所以插件的jar 包需要放到該目錄下

2.修改Flink配置

進入到 Flink 的 conf 目錄,修改 flink-conf.yaml
[root@ga002 conf]$ 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

[root@ga002 sbin]$ nc -lk 9999
# 可以通過 8088 跳到flinkUI 的job 頁面,查看指標統計
[root@ga002 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM