Prometheus+Grafana+Sysstat構建性能監控系統

Jmeter/LR+Prometheus+Grafana+Sysstat構建性能監控系統

1:前言

1.1:Jmeter/LR能滿足性能測試嗎?

  • Jmeter/LR肯定是可以滿足一般的互聯網企業的性能測試需求的
  • Jmeter/LR能滿足性能測試需求 但是未必同時也是優秀的監控工具
  • 我們知道Jmeter也可以用來監控一些服務器的資源 但是這個數據很粗糙 只能看到一些最基本的情況或者Fail Pass的情況 看不到更深層次的數據,既然沒有這些數據 我們怎麼去分析性能瓶頸,怎麼取針對性地優化?
  • 綜上我們在做性能測試的時候同時引入Prometheus+Grafana+Sysstat這些系統來收集數據 配合這些數據可以快速定位待瓶頸 開發纔可以跟快速地定位問題

1.2:性能測試爲什麼要引入Prometheus+Grafana+Sysstat這樣的監控系統

  • Prometheus+Grafana一般被用於監控線上環境的一套組合系統,它可以監控到跟深層面 不僅僅是監控一些服務器資源這麼簡單
  • Prometheus相對一些其他的監控工具 它的精度更高 更底層,採集數據的準確率那是槓桿地
  • Sysstat一般被用來監控服務器硬件資源情況 在性能結合它的使用可以幫助我們快速分析性能瓶頸 方便開發做針對性的優化
  • 綜上 在性能測試時使用這套系統的目的就是提供儘可能詳近的數據 方便相關人員分析數據 發現瓶頸 針對優化
  • 關於Jmeter或者LoadRunner怎麼去做性能測試 這個就不描述了

2:環境的安裝

2.1:prometheus-Server端和node_exporter的安裝

2.1.1:設置時區

  • timedatectl set-timezone Asia/Shanghai
  • contab -e 添加命令:* * * * * ntpdate -u cn.pool.ntp.org
  • 重啓命令:service crond restart

2.1.2:Prometheus-Server端的安裝

  • 下載prometheus-xxxx.linux-amd64.tar.gz
  • 解壓 tar -zxvf prometheus-xxxx.linux-amd64.tar.gz
  • 進入prometheus文件夾
  • 後臺啓動:setsid ./prometheus 或者setsid ./prometheus --config.file=“prometheus.yml”
  • prometheus-Server端默認啓動在9090端口

2.1.3:node_exporter的安裝

  • 下載node_exporter的tar包
  • 解壓
  • 進入目錄
  • 後臺運行:setsid ./node_exporter

2.1.4:添加node_exporter到prometheus-Server

  • 進入prometheus目錄 打開prometheus.yml文件 添加如下內容
  - job_name: 'node_exporter'
    static_configs:
      - targets:
        - 'xx.xx.xx.xx:9100'
  • 重啓prometheus
    1:ps -ef|grep prometheus
    2: kill -9 PID
  • 注意:安裝prometheus-Server的機器不用再安裝node_exporter 只需用在node機器上安裝node_exporter 然後添加到prometheus-Server的prometheus.yml文件中即可

2.1:Grafana的安裝與配置

2.1.1:Grafana的安裝

2.1.2:Grafana的基本配置

  • Add data source–>Prometheus–>Settings中設置Name、URL 然後save and Test沒報錯即可
  • Add data source–>Prometheus–>Dashboards中導入必須的3個dashboards

2.2:Sysstat的安裝與使用

2.2.1:Sysstat的安裝與配置

  • yum list sysstat 查看sysstat是否已被安裝
  • yum install -y sysstat
  • 進入/etc/cron.d/目錄下 打開sysstat文件 修改爲每分鐘運行一次收集數據
    在這裏插入圖片描述
  • 重啓sysstat:systemctl restart sysstat
  • 生成的sa文件會默認保存在 /var/log/sa/路徑下
    1:sa文件爲每分鐘生成的數據
    2: sar位每天生成的summary文件

2.2.2:Sysstat的基本使用(excel文檔上傳到了github上 項目地址:https://github.com/AnndyTsai/prometheus-sysstat)

2.2.2.1:Sysstat的監控-CPU監控
  • 查看excel sysstat.xls
2.2.2.2:Sysstat的監控-內存監控
  • 查看excel sysstat.xls
2.2.2.3:Sysstat的監控-IO監控
  • 查看excel sysstat.xls
2.2.2.4:Sysstat的監控-NetWork監控
  • 查看excel sysstat.xls

3:prometheus的使用

  • prometheus的使用建立在prometheus與node_exporter均配置正常的情況下

3.1:監控公式的使用

3.1.1:CPU使用率的計算

3.1.1.1:在計算CPU的使用率我們需要知道下列知識

  • 1:CPU狀態有8總 常見的是用戶態和內核態 IO等待態以及idle狀態
  • 2:單位時間的CPU使用率計算:(內核態時間+用戶態時間+其他5種狀態時間)/單位時間x100%
  • 3:注意上面分子是沒有包含idle狀態的時間的

3.1.1.2:現在我們如何使用prometheus的公式計算一分鐘內的CPU使用率呢?

  • 監控cpu每分鐘的idle率公式如下
sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance)
  • 截圖如下:

在這裏插入圖片描述

  • 監控cpu每分鐘的總的用戶使用率公式如下
(1-((sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)) / (sum(increase(node_cpu_seconds_total[1m])) by (instance))))*100
  • 截圖如下:

在這裏插入圖片描述

  • 基於上述我們舉一反三 獲取其他CPU狀態的使用率

    1:獲取用戶態每分鐘的CPU使用率

    (sum(increase(node_cpu_seconds_total{mode="user"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance))*100
    

    2:獲取內核每分鐘的CPU使用率

    (sum(increase(node_cpu_seconds_total{mode="system"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance))*100
    

    3:獲取IO等待態每分鐘的CPU使用率

    (sum(increase(node_cpu_seconds_total{mode="iowait"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance))*100
    

4:Prometheus結合Grafana的配置

4.1:Grafana添加Prometheus

  • Add data source–>Prometheus–>Settings中設置Name、URL 然後save and Test沒報錯即可
  • Add data source–>Prometheus–>Dashboards中導入必須的3個dashboards
  • 具體的設置請查考下列截圖

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4.2:Grafana新添加dashboard

  • 新建DashBoard
    在這裏插入圖片描述

  • 新建DashBoard
    在這裏插入圖片描述

  • 新建DashBoard查詢的設置
    在這裏插入圖片描述

  • 新建DashBoard修改title和描述
    在這裏插入圖片描述

  • 新建DashBoard視圖的設置
    在這裏插入圖片描述

  • 保存

  • 在剛剛新建的DashBoard上添加新的監控選項
    在這裏插入圖片描述

5:Prometheus結合Grafana的使用

5.1:CPU的監控

  • 針對CPU的監控 主要由以下三部分 具體Grafana的設置請參考4

    • 監控cpu每分鐘的總的用戶使用率公式如下
    (1-((sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)) / (sum(increase(node_cpu_seconds_total[1m])) by (instance))))*100
    
    • 獲取user態每分鐘的CPU使用率(主要是應用測試啓動太多 導致進程多 從而導致user態的CPU使用時間佔比較高)
    (sum(increase(node_cpu_seconds_total{mode="iowait"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance))*100
    
    • 獲取IO等待態每分鐘的CPU使用率(當磁盤IO比較高的時候會出現IO等待時間較長 導致IOWAIT狀態的CPU使用佔比較高)
    (sum(increase(node_cpu_seconds_total{mode="iowait"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance))*100
    

5.2:Memory的監控

  • 針對內存的監控 主要由剩餘的可用內存組成
    1:剩餘內存的計算:剩餘可用內存=free+Buffers+Cached ()
    (1-((node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes)/node_memory_MemTotal_bytes))*100
    

5.3:IO的監控

  • 磁盤使用率

    100 - (node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs"} / node_filesystem_size_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100)
    
  • 磁盤IO讀寫(1min數據讀寫的量 單位MB/S) 一般情況下IO高的情況下會導致CPU的IOWAIT升高

    ((rate(node_nfsd_disk_bytes_read_total[1m])+rate(node_nfsd_disk_bytes_written_total[1m]))/1024/1024) > 0
    
  • 網絡IO傳輸的監控(網絡讀寫IO的速率 Mb/S)

    rate(node_network_transmit_bytes_total[1m])/1024/1024
    

5.4:文件句柄的監控

  • 文件句柄介紹
    1:文件句柄:文件句柄即文件描述符,每當一個進程打開一個文件時(Linux任何資源都可以看做文件)系統會分配一個唯一的整數型文件描述符 用來標示進程使用的這個文件,PID即文件句柄

  • 文件句柄使用率

    (node_filefd_allocated/node_filefd_maximum)*100
    

6:Prometheus結合Grafana監控進程

6.1:process-exporter的安裝配置

6.2:process-exporter的使用

  • 進程的所有信息幾乎都可以監控 這個就不再介紹了 baidu

7:結束語

  • Jmeter/LR能完成對業務層的性能監控 但是結合Prometheus和sysstat可以完成對系統層面 硬件層面的監控
  • Prometheus和sysstat能提供更底層的數據 讓分析人員有數據可依
  • Prometheus還能監控很多數據 socket TCP http https的數據 只要是Linux能提供的數據Prometheus都能監控
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章