1. 程式人生 > 實用技巧 >第六講:prometheus初探和配置

第六講:prometheus初探和配置

  • prometheus官網下載
  • prometheus開始安裝
  • prometheus啟動執行
  • prometheus基本配置檔案講解
  • 安裝第一個個exporter -》node_exporter
  • prometheus連線exporter獲取資料
  • prometheus命令列入門

  時間同步

ntpdate time1.aliyun.com

  下載prometheus

  本次下載版本為2.10.0

  下載地址https://github.com/prometheus/prometheus/releases/tag/v2.10.0

   解壓安裝

mv prometheus-2.10.0.linux-amd64.tar.gz /usr/local/
cd /usr/local/
tar -xf prometheus-2.10.0.linux-amd64.tar.gz 
mv prometheus-2.10.0.linux-amd64 prometheus

  啟動

cd prometheus
./prometheus 

  預設啟動埠是9090

  prometheus解壓安裝以後,就預設自帶了一個基本的配置檔案,在解壓的資料夾下面的prometheus.yml

# cat prometheus.yml 
# my global config
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:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

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

    static_configs:
    - targets: ['localhost:9090']

  配置檔案解析

#全域性變數,抓取資料的時間間隔,預設15秒,不建議定義成1秒
scrape_interval:     15s
#全域性變數,監控資料規則評估頻率
#這個引數是prometheus多長時間會進行一次監控規則評估
#例如我們設定當記憶體使用量大於70%發出報警 這麼一條rule(規則)
#那麼prometheus會預設每15秒來執行一次這個規則 檢查記憶體情況
evaluation_interval: 15s

  

Alertmanager是prometheus的一個用於管理和發出報警的外掛
這裡對Alertmanager暫時先不做介紹,暫時也不需要,我們採用4.0Grafana,本身就已經支援報警發出功能

#抓取資料配置
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  #定義一個任務名稱prometheus
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    #定義監控節點targets
    static_configs:
    - targets: ['localhost:9090']

  這裡可以繼續擴充套件加入其它需要監控的節點

static_configs:
    - targets: ['localhost:9090','server01:9100']

  可以targets可以並列寫入多個節點,需要設定hosts可以解析,也可以設定IP地址(IP地址不直觀)

  埠號:通常就是exporter的埠

  這裡9100其實是node_exporter的預設埠

  光搭建好prometheus_server是不夠的,我們需要給監控節點搭建第一個exporter用來採集資料

  我們就選用企業中最常用的node_exporter這個外掛

  node_exporter是一個以http_server方式執行在後臺,並且持續不斷採集Linux系統中各種作業系統本身相關的監控引數的程式

  其採集量的很大很全的,往往預設的採集專案就遠超實際需求

  下載node_exporter

  下載地址:https://github.com/prometheus/node_exporter/releases/tag/v0.15.2

  解壓執行

tar -xf node_exporter-0.15.2.linux-amd64.tar.gz 
mv node_exporter-0.15.2.linux-amd64 node_exporter
cd node_exporter
./node_exporter &

  可以使用curl命令檢視

curl 192.168.1.101:9100/metrics

  執行curl之後可以看到node_exporter返回了大量metrics型別的K/V資料

  而這些返回的K/V資料,其中的key名稱就可以直接複製貼上在prometheus的查詢命令來看結果了

  試試node_memory_MemFree 空閒記憶體

  前提是prometheus修改配置把該主機的對應的ip和埠新增進來,新增後需要重啟prometheus

  

  難一點的監控CPU使用率

  node_cpu這個key也是node_exporter返回的一個用來統計CPU使用率的

  返回的是一個持續不斷累加的近似於直線的龐大數值

  這個其實關係到prometheus對Linux資料採集的精細特性

  其實prometheus對Linux CPU的採集並不是直接返回給我們一個CPU使用率的百分百,而是返回Linux很底層的cpu時間片 累積數值這樣一個數據

  當我們平時習慣top/uptime這種簡單的方式檢視CPU使用率,往往淺嘗輒止,沒有好好深入理解CPU使用率在linux到底是怎麼回事

  其實如果想要真的弄明白CPU使用率這個概念 在Linux要先從CPU時間這個概念開始建立

  Linux CPU時間 實際是指:從作業系統開啟算起CPU就開始工作了,並記錄在自己的工作中,總共使用的時間的累積量把它儲存在系統中

  而累積的CPU使用時間還會分成幾個重要的狀態

  比如CPU time分成 CPU user time/sys time/nice time/idle time/irq等

  翻譯過來就是CPU 使用者態使用時間 系統核心態使用時間 nice值分配使用時間 空閒時間 中斷時間等

  CPU使用率最準確的定義其實是CPU各種狀態中除了idle(空閒)外,其他所有CPU狀態的和/總CPU時間

  得出來的就是CPU使用率

  那麼會到我們剛才使用node_cpu這個key如果直接輸入jinq

  返回的其實是CPU剛剛狀態下從開機開始一直累積下來CPU使用時間的累積值

  CPU時間狀態解釋

us(user time) 表示CPU執行使用者程序的時間,包括ni時間。通常我們只看這項。 



sy(system time) 表示CPU在核心執行時間,包括IRQ和softirq時間,系統CPU佔用率高,表明系統某部份存在瓶頸,通常值越低越好。 



wa(waiting time) CPI在等待I/O操作完成所花費的時間,系統不應該花費大量時間來等待I/O操作,否則說明I/O存在問題。



id(idle time) 系統處於空閒期,等待程序執行。 

ni(nice time) 系統調整程序優先順序所花費的時間。

hi(hard irq time) 系統處理硬中斷所花費的時間。

si(softirq time) 系統處理軟體中斷所花費的時間。

st(steal time) 被強制等待虛擬CPU的時間,此時hypervisor在為另一個虛擬處理器服務。

  所以:如果在prometheus中,想對CPU的使用率 準確來查詢

(1-((sum(increase(node_cpu{mode="idle"}[1m]))by(instance))/(sum(increase(node_cpu[1m]))by(instance))))*100

  在web頁面輸入執行

  prometheus這種精細的底層的計算特性雖然學起來難不過帶來的好處也是顯而易見的

  1)prometheus這種底層資料採集所形成的監控是最準確最可信的

  2)prometheus本身也逼著使用它的運維同學,你不踏實下來好好真正把Linux技術學習過關的話就沒有辦法使用好這個超強力的監控工具了