1. 程式人生 > 其它 >Prometheus對接Grafana和睿象雲

Prometheus對接Grafana和睿象雲

第一章 Prometheus入門

1.1 Prometheus的特點

  • Prometheus是一個開源的完整監控解決方案,其對傳統監控系統的測試和告警模型進行了徹底的顛覆,形成了基於中央紅的規則計算、統一分析和告警的新模型,相比於傳統監控系統,Prometheus具有以下特點

1.1.1 易於管理

  • Prometheus核心部分只有一個單獨的二進位制檔案,不存在任何的第三方依賴庫,唯一需要的就是本地磁碟,因此不會有潛在級聯故障的風險
  • Prometheus基於pull模型的架構方式,可以在任何地方(本地電腦,開發環境,測試環境)搭建我們的監控系統
  • 對於一些複雜的情況,還可以使用Prometheus服務發現(Service Discovery)的能力動態管理監控指標

1.1.2 監控服務的內部執行狀態

  • Prometheus鼓勵使用者監控服務的內部狀態,基於Prometheus豐富的Client庫,使用者可以輕鬆的在應用程式中新增對Prometheus的支援,從而讓使用者獲取服務和應用內部真正的執行狀態

1.1.3 強大的資料模型

  • 所有采集的監控資料均以指標(metric)的形式儲存在內建的時間序列資料庫當中(TSDB)。所有的樣本除了基本的指標名稱以外,還包含一組用於描述該樣本特徵的標籤。
  • 每一條時間序列由指標名稱以及一組標籤唯一標識,每條時間序列按照時間的先後順序儲存一系列的樣本值

1.1.4 強大的查詢語言PromQL

  • Prometheus內建了一個強大的資料查詢語言PromQL。通過PromQL可以實現對監控資料的查詢、聚合。同時PromQL也被應用於資料視覺化(如Grafana)以及告警當中。
  • 通過PromQL可以輕鬆回答類似於以下問題
    • 在過去一段時間中95%應用延遲時間的分佈範圍?
    • 預測在4小時後,磁碟空間佔用大致會是什麼情況?
    • CPU佔用率前5位服務有哪些(過濾)

1.1.5 高效

  • 對於監控系統而言,大量的監控任務必然導致有大量的資料產生。而Prometheus可以高效地處理這些資料,對於單一Prometheus Server例項而言它可以處理
    • 數以百萬的監控指標
    • 每秒處理數十萬的資料點

1.1.6 可擴充套件

  • 可以在每個資料中心、每個團隊執行獨立的Prometheus Server。Prometheus對於聯邦叢集的支援,可以讓多個Prometheus例項產生一個邏輯叢集,當單例項Prometheus Server處理的任務量過大時,通過使用功能分割槽+聯邦叢集可以對其進行擴充套件

1.1.7 易於整合

  • 使用Prometheus可以快速搭建監控服務,並且可以非常方便地在應用程式中進行整合
  • Prometheus還可以與其他的監控系統進行整合

1.1.8 視覺化

  • Prometheus Server中自帶的UI,可以方便地直接對資料進行查詢,並且支援直接以圖形化的形式展示資料
  • 最新的Grafana視覺化工具也已經提供了完整的Prometheus的支援,基於Grafana可以建立更加精美的監控圖示

1.1.9 開放性

  • 通常來說當我們需要監控一個應用程式時,一般需要該應用程式提供對相應監控系統協議的支援,因此應用程式會與所選擇的監控系統進行繫結,為了減少這種繫結所帶來的限制,對於決策者而言要麼你就直接在應用中整合該監控指標的支援,要麼就在外部建立單獨的服務來適配不同的監控系統
  • Prometheus的client library的輸出格式不止支援Prometheus的格式化資料,也可以輸出支援其他監控系統的格式化資料,比如Graphite。因此你甚至可以在不使用Prometheus的情況下 ,採用Prometheus的client library來讓你的應用程式支援監控資料採集。

1.2 Prometheus的架構

1.2.1 Prometheus的生態圈元件

1.2.2 架構理解

  • 儲存計算層
    • Prometheus Server裡面包含了儲存引擎和計算引擎
    • Retrieval元件為取陣列件,它會主動從Pushgateway或者Exporter拉取指標資料
    • Server Discovery,可以動態發現要監控的目標
    • TSDB,資料核心儲存與查詢
    • HTTP server 對外提供HTTP服務
  • 採集層
    • 採集層分兩類,一類是生命週期較短的作業,還有一類是生命週期較長的作業
      • 短作業:直接通過API,在退出時間指標推送給Pushgateway
      • 長作業:Retrieval元件直接從Job或者exporter拉取資料
  • 應用層
    • 應用層主要分為兩種,一種是AlertManager,另一種是資料視覺化
      • AlertManager
        • 對接Pagerduty,是一套付費的監控報警系統,可實現簡訊告警,五分鐘無人ack打電話通知,仍然無人ack,通知值班人員Manager、發郵件......
      • 資料視覺化
        • Prometheus web UI
        • Grafana
        • API Clients

第二章 Prometheus的安裝

2.1 安裝Prometheus Server

2.1.1 上傳安裝包

[root@VM-32-18-centos ~]# cd  /opt/src/
[root@VM-32-18-centos src]# ls
alertmanager-0.23.0.linux-amd64.tar.gz  prometheus-2.30.1.linux-amd64.tar.gz
grafana-5.4.2-1.x86_64.rpm              pushgateway-1.4.1.linux-amd64.tar.gz
node_exporter-1.2.2.linux-amd64.tar.gz

2.1.2 解壓安裝包

[root@VM-32-18-centos src]# tar  -xvf  prometheus-2.30.1.linux-amd64.tar.gz -C  /opt/
[root@VM-32-18-centos opt]# mv  prometheus-2.30.1.linux-amd64  prometheus-2.30.1

2.1.3 修改配置檔案

[root@VM-32-18-centos prometheus]# vim  prometheus.yml 
- job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["172.16.32.18:9090"]
  #新增pushgateway配置
  - job_name: 'pushgateway'
    static_configs:
    - targets: ['172.16.32.18:9091']
      labels:
        instance: pushgateway
  #新增node_exporter配置
  - job_name: 'node_exporter'
      static_configs:
      - targets: ['172.16.32.18:9100']
#配置說明
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://172.16.32.18:9090/metrics上拉取資料
   Prometheus是可以在執行時自動載入配置的,啟動時需要新增:--web.enable-lifecycle

2.2 安裝Pushgateway

  • Prometheus在正常情況下是採用拉取模式從產生metric的作業或者exporter(比如專門監控主機的NodeExporter)拉取監控資料。但是我們要監控的是Flink on Yarn作業,想要讓Prometheus自動發現作業的提交、結束以及自動拉取資料顯然是比較困難的。Pushgateway就是一箇中轉元件,通過配置Flink on yarn作業將metric推到Pushgateway,Prometheus再從Pushgateway拉取就可以啦

2.2.1 解壓安裝包

[root@VM-32-18-centos src]# tar  -xvf  pushgateway-1.4.1.linux-amd64.tar.gz -C  /opt/
[root@VM-32-18-centos opt]# mv pushgateway-1.4.1.linux-amd64  pushgateway

2.3 安裝AlertManager

2.3.1 解壓安裝包

[root@VM-32-18-centos src]# tar  -xvf  alertmanager-0.23.0.linux-amd64.tar.gz -C  /opt/
[root@VM-32-18-centos opt]# mv alertmanager-0.23.0.linux-amd64/  alertmanager

2.4 安裝Node Exporter

  • 在Prometheus的架構設計中,Prometheus Server主要負責資料的收集,儲存並且對外提供資料查詢支援,而實際的監控樣本資料的收集則是由exporter完成,因此為了能夠監控某些東西,如主機的CPU利用率,我們需要使用到exporter。Prometheus週期性的從exporter暴露的HTTP服務地址(通常是/metrics)拉取監控樣本資料
  • exporter可以是一個相對開發的概念,其可以是一個獨立執行的程式獨立於監控目標以外,也可以是直接內建在監控目標中。只要能夠向Prometheus提供標準格式的監控樣本資料即可。
  • 為了能夠採集到主機的執行指標如CPU、記憶體、硬碟等資訊,我們可以用Node exporter,只需要下載解壓即可執行。

2.4.1 解壓安裝包

[root@VM-32-18-centos src]# tar -xvf  node_exporter-1.2.2.linux-amd64.tar.gz -C  /opt/
[root@VM-32-18-centos opt]# mv  node_exporter-1.2.2.linux-amd64/  node_exporter
#啟動服務
[root@VM-32-18-centos node_exporter]# pwd
/opt/node_exporter
[root@VM-32-18-centos node_exporter]# ./node_exporter 
#通過地址加9100埠訪問,可以看到node_exporter獲取到當前主機的所有監控資料
#設定服務開機自啟
[Unit]
Description=node_exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target

[Service]
Type=simple
ExecStart=/opt/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

[root@VM-32-18-centos ~]# systemctl restart  node_exporter.service
[root@VM-32-18-centos ~]# systemctl enable  node_exporter

2.5 啟動服務

#啟動Prometheus,在後臺執行
[root@VM-32-18-centos prometheus]# nohup ./prometheus --config.file=prometheus.yml >./prometheus.log 2>&1 & 

#啟動pushgateway
nohup ./pushgateway --web.listen-address :9091 > ./pushgateway.log 2>&1  &

第三章 PromQL介紹

  • Prometheus通過指標名稱以及對應的一組標籤唯一定義一條時間序列。指標名稱反映了監控樣本的基本標識,而label則在這個基本特徵上為採集到的資料提供了多種特徵維度。使用者可以基於這些特徵維度過濾、聚合、統計從而產生新的計算後的一條時間序列。promQL是Prometheus內建的資料查詢語言,其提供對時間序列資料豐富的查詢,聚合以及邏輯運算能力的支援,並且被廣泛應用在Prometheus的日常應用當中,包括對資料查詢、視覺化、告警處理當中。可以這麼說,promQL是Prometheus所有應用場景的基礎,理解和掌握promQL是Prometheus入門的第一課。

3.1 基本用法

3.1.1 查詢時間序列

  • 當Prometheus通過exporter採集到相應的監控指標樣本資料後,我們就可以通過promQL對監控樣本資料進行查詢

  • 當我們直接使用監控指標名稱查詢時,可以查詢該指標下的所有時間序列

    #查詢Prometheus中所有http請求
    prometheus_http_requests_total
    prometheus_http_requests_total{}
    #該表示式會返回指標名稱的所有時間序列
    prometheus_http_requests_total{code="200", handler="/-/ready", instance="119.91.130.53:9090", job="prometheus"}
    2
    #promQL還支援使用者根據時間序列的標籤匹配模式來對時間序列進行過濾,目前主要支援兩種匹配模式:完全匹配和正則匹配
    
    #完全匹配模式:支援使用 = 和 != 兩種
    prometheus_http_requests_total{handler="/api/v1/metadata"}
    #正則匹配模式:多個表示式之間使用|進行分離
     prometheus_http_requests_total{code=~"200|302",handler="/api/v1/rules"}
    

3.1.2 範圍查詢

  • 直接通過類似於promQL表示式查詢時間序列時,返回值中只會包含該時間序列中的最新的一個樣本值,這樣的返回結果我們稱之為瞬時向量。而對應的這樣的表示式稱之為_瞬時向量表示式

  • 而如果我們想過去一段時間範圍內的樣本資料時,我們則需要使用區間向量表示式。區間向量表示式和瞬時向量表示式之間的差異在於區間向量表示式中我們需要定義時間選擇範圍,時間範圍通過時間範圍選擇器【】進行定義。

    #查詢最近5分鐘內的樣本資料
    prometheus_http_requests_total{}[5m]  #區間向量表示式
    
    

3.1.3 時間位移操作

  • 在瞬時向量表示式或區間向量表示式中,都是以當前時間為基準

  • 使用位移操作。位移操作的關鍵字是offset

    #查詢5分鐘前的樣本資料
    prometheus_http_requests_total{} offset 5m
    #查詢昨天一天的區間資料
    prometheus_http_requests_total{}[1d] offset 1d
    
    

3.1.4 使用聚合操作

  • 一般來說,如果描述樣本特徵的標籤在並非唯一的情況下,通過promQL查詢資料,會返回多條滿足這些特徵維度的時間序列。而promQL提供的聚合操作可以用來對這些時間序列進行處理,形成一條新的時間序列

    #查詢系統所有http請求的總量
    sum(prometheus_http_requests_total)
    #按照mode計算主機CPU的平均使用時間
    avg(node_cpu_seconds_total) by (mode)
    #按照主機查詢各個主機的CPU使用率
    sum(sum(irate(node_cpu_seconds_total{mode!='idle'}[5m])) / sum(irate(node_arp_entries[5m]))) by (instance)
    
    

3.1.5 標量和字串

  • 標量(Scalar):一個浮點型的數字值
    • 標量只有一個數字,沒有時序
    • 使用者可以通過內建函式scalar()將單個瞬時向量轉換為標量
  • 字串:一個簡單的字串值
    • 直接使用字串,作為promQL的表示式,則會直接返回字串

3.1.6 合法的PromQL表示式

  • 所有的promQL表示式必須至少包含一個指標名稱,或者一個不會匹配到的空字串的標籤過濾器

3.2 PromQL操作符

  • 使用PromQL除了能夠方便的按照查詢和過濾時間序列外,PromQL還支援豐富的操作符,使用者可以使用這些操作符對進一步的對事件序列進行第二次加工,這些操作符包括:數學運算子、邏輯運算子、布林值運算子等

第四章 Prometheus和Flink整合

  • Flink提供的metrics可以在Flink內部收集一些指標,通過這些指標讓開發人員更好地理解作業或叢集的狀態

4.1 拷貝jar包

#將plugns下的jar包複製到lib目錄下
[root@VM-32-18-centos metrics-prometheus]# cp flink-metrics-prometheus-1.12.0.jar /opt/flink-prometheus/lib/

4.2 修改Flink配置

#在配置檔案中新增下面配置
#### 與Prometheus整合配置  ####
metric.reporter.prometheus.class: org.apache.flink.metrics.promethus.PrometheusPushGatewayReporter
# pushgateway的主機名與埠資訊
metrics.reporter.promgateway.host: 119.91.130.53
metrics.reporter.prometheus.port: 9091
# Flink metric在前端展示的標籤(字首)與隨機字尾
metrics.reporter.promgateway.jobName: flink-metrics-ppg
metrics.reporter.promgateway.randomJobNameSuffix: true
metrics.reporter.promgateway.deleteOnShtdown: false
metrics.reporter.promgateway.interval: 30 SECONDS
#需要有hadoop環境
[root@VM-32-18-centos bin]# ./start-cluster.sh

4.4 檢視Prometheus監控指標

#登入prometheus控制檯介面,檢視Prometheus是否有flink的監控指標

第五章 Prometheus和Grafana整合

  • grafana是一款採用go語言編寫的開源應用,主要用於大規模指標資料的視覺化展現,是網路架構和應用分析中最流行的時序資料展示工具,目前已經支援絕大部分常用的時序資料庫。
  • 下載地址:https://grafana.com/grafana/download

5.1 上傳並解壓

[root@VM-32-18-centos src]# wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.0.linux-amd64.tar.gz
[root@VM-32-18-centos src]# tar  -zxvf  grafana-enterprise-8.2.0.linux-amd64.tar.gz -C  /opt/

5.2 啟動Grafana

[root@VM-32-18-centos src]# cd  /opt/grafana-8.2.0/bin/
[root@VM-32-18-centos bin]# nohup ./grafana-server web > ./grafana.log 2>&1 &
#開啟web:http://119.91.53.130:3000 預設使用者名稱和密碼:admin

5.3 新增資料來源Prometheus

1、點選配置,點選Data Sources
2、add  data source
3、新增Prometheus的地址加埠
4、儲存配置

5.4 手動建立儀表盤Dashboard

1、點選左上角+號,建立儀表盤
2、修改標題名稱
3、選擇data source
4、新增監控指標
5、ctrl+enter應用監控指標
6、儲存配置

5.5 新增Node Exporter模板

  1. 登入https://grafana.com/grafana/dashboards
  2. 搜尋node_exporter模板
  3. 下載json檔案
  4. 點選左上角+號,選擇import
  5. 匯入json檔案
  6. 選擇Prometheus監控

第六章 整合第三方告警平臺睿象雲

  • 郵件通知常會出現接收不及時的問題,為確保通知資訊被及時接收,可通過配置Prometheus或者Grafana與第三方平臺告警平臺(睿象雲)整合,進而通過第三方平臺提供的多種告警媒介(例如電話,簡訊)等傳送告警資訊

6.1 註冊睿象雲賬號

6.2 整合Grafana

  • 在睿象雲網站點選整合Grafana工具
  • 配置應用名稱,儲存並獲取應用key

6.2.1 Grafana配置Webhook URL

1、在Grafana中建立Notification channel,選擇型別為Webhook;

2、推薦選中Send on all alerts和Include image,Cloud Alert體驗更佳;

3、將第一步中生成的Webhook URL填入Webhook settings Url;

URL格式:
http://api.aiops.com/alert/api/event/grafana/v1/71245665f21047b38527fb3bf127c9fb/

4、Http Method選擇POST;

5、Send Test&Save;

6.2.2 將配置的Webhook Notification Channel新增到Grafana Alert中

6.3 配置分配策略

  • 登入睿象雲介面,選擇配置,配置分派策略

6.4 配置通知策略

  • 登入睿象雲介面,選擇配置,配置通知策略

6.5 測試電話、簡訊和郵件通知

  • 通過Prometheus監控指標到Grafana展示,最後由睿象雲傳送告警通知