Prometheus學習筆記二–安裝部署簡單監控及使用PromQL查詢監控數據

1,安裝部署。
1,環境準備。

軟件包下載地址:https://prometheus.io/download/

地址 規劃/軟件包
192.168.0.10 Prometheus Server
192.168.0.10 node_exporter

2,部署Prometheus Server。
1,下載安裝包。

$ cd /usr/local/src/
$ wget https://github.com/prometheus/prometheus/releases/download/v2.19.1/prometheus-2.19.1.linux-amd64.tar.gz
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

2.安裝 Prometheus

創建prometheus用戶
$ groupadd prometheus
$ useradd -g prometheus -m -d /var/lib/prometheus -s /sbin/nologin prometheus
解壓安裝包。
$ tar xf prometheus-2.19.1.linux-amd64.tar.gz -C /usr/local/ && cd /usr/local/
$ ln -s /usr/local/prometheus-2.19.1.linux-amd64/ prometheus

創建systemd啓動腳本

$ vim /etc/systemd/system/prometheus.service
 
添加如下內容:
[Unit]
Description=prometheus
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/
var/lib/prometheus --storage.tsdb.retention.time=10d --log.level=info
Restart=on-failure

[Install]
WantedBy=multi-user.target

–storage.tsdb.path 修改本地數據存儲的路徑
–log.level 日誌等級
–storage.tsdb.retention.time 保存時間

2.1 使用容器安裝
對於Docker用戶,直接使用Prometheus的鏡像即可啓動Prometheus Server

docker run -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

啓動完成後,可以通過http://localhost:9090訪問Prometheus的UI界面:

3,安裝 node_exporter
在Prometheus的架構設計中,Prometheus Server並不直接服務監控特定的目標,其主要任務負責數據的收集,存儲並且對外提供數據查詢支持。因此爲了能夠能夠監控到某些東西,如主機的CPU使用率,我們需要使用到Exporter。Prometheus週期性的從Exporter暴露的HTTP服務地址(通常是/metrics)拉取監控樣本數據.

從上面的描述中可以看出Exporter可以是一個相對開放的概念,其可以是一個獨立運行的程序獨立於監控目標以外,也可以是直接內置在監控目標中。只要能夠向Prometheus提供標準格式的監控樣本數據即可。

在 Prometheus 本節點或者另一臺節點上分別安裝 node_exporter

$ tar xf node_exporter-1.0.1.linux-amd64.tar.gz -C /usr/local/ && cd /usr/local/
$ ln -s /usr/local/node_exporter-1.0.1.linux-amd64/ node_exporter
$ chown -R prometheus.prometheus node_exporter/

創建 node_exporter 啓動腳本

$ vim /etc/systemd/system/node_exporter.service
 
添加如下內容:
 
[Unit]
Description=node_export
Documentation=https://github.com/prometheus/node_exporter
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

注意:node_exporter 的運行用戶也是 prometheus 用戶需要在每臺節點上都創建該用戶。

啓動 node_exporter 服務:
$ systemctl enable node_exporter.service
$ systemctl start node_exporter.service
$ systemctl status node_exporter.service
$ ss -tnl | grep 9100
#訪問http://localhost:9100/
curl http://localhost:9100/

訪問http://localhost:9100/metrics,可以看到當前node exporter獲取到的當前主機的所有監控數據,如下所示:
在這裏插入圖片描述
每一個監控指標之前都會有一段類似於如下形式的信息:

# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="idle"} 362812.7890625
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 3.0703125

其中HELP用於解釋當前指標的含義,TYPE則說明當前指標的數據類型。在上面的例子中node_cpu的註釋表明當前指標是cpu0上idle進程佔用CPU的總時間,CPU佔用時間是一個只增不減的度量指標,從類型中也可以看出node_cpu的數據類型是計數器(counter),與該指標的實際含義一致。又例如node_load1該指標反映了當前主機在最近一分鐘以內的負載情況,系統的負載情況會隨系統資源的使用而變化,因此node_load1反映的是當前狀態,數據可能增加也可能減少,從註釋中可以看出當前指標類型爲儀表盤(gauge),與指標反映的實際含義一致。
除了這些以外,在當前頁面中根據物理主機系統的不同,你還可能看到如下監控指標:

  1. node_boot_time:系統啓動時間
  2. node_cpu:系統CPU使用量
  3. nodedisk*:磁盤IO
  4. nodefilesystem*:文件系統用量
  5. node_load1:系統負載
  6. nodememeory*:內存使用量
  7. nodenetwork*:網絡帶寬
  8. node_time:當前系統時間
  9. go_*:node exporter中go相關指標
  10. process_*:node exporter自身進程相關運行指標

2,配置 Prometheus 添加監控目標,從Node Exporter收集監控數據

$ cd /usr/local/prometheus
$ vim prometheus.yml 
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'.
    # 蒐集node exporter監控數據
    static_configs:
    - targets: ['localhost:9090','localhost:9100'] # 對本機node_exporter 監控

舉例新添加的對其它node節點抓取數據
  - job_name: '0.11'
    #重寫了全局抓取間隔時間,由15秒重寫成5秒。
    scrape_interval: 5s
    static_configs:
    - targets: ['192.168.0.11:9100']

啓動 Prometheus 服務:

$ chown -R prometheus.prometheus prometheus/
$ systemctl enable prometheus.service
$ systemctl start prometheus.service
$ systemctl status prometheus.service

注意:要留意啓動之前的目錄權限更改,否則可能會在啓動的時候報錯Feb 11 16:08:41 localhost alertmanager: level=error ts=2019-02-11T08:08:41.419390133Z caller=main.go:179 msg=“Unable to create data directory” err=“mkdir data/: permission denied”。
訪問 Prometheus WEB 查看我們定義的目標主機:http://192.168.0.10:9090/targets
在這裏插入圖片描述
其中“1”表示正常,反之“0”則爲異常。
在這裏插入圖片描述
使用PromQL查詢監控數據
Prometheus UI是Prometheus內置的一個可視化管理界面,通過Prometheus UI用戶能夠輕鬆的瞭解Prometheus當前的配置,監控任務運行狀態等。 通過Graph面板,用戶還能直接使用PromQL實時查詢監控數據:
在這裏插入圖片描述
切換到Graph面板,用戶可以使用PromQL表達式查詢特定監控指標的監控數據。如下所示,查詢主機負載變化情況,可以使用關鍵字node_load1可以查詢出Prometheus採集到的主機負載的樣本數據,這些樣本數據按照時間先後順序展示,形成了主機負載隨時間變化的趨勢圖表:
在這裏插入圖片描述
PromQL是Prometheus自定義的一套強大的數據查詢語言,除了使用監控指標作爲查詢關鍵字以外,還內置了大量的函數,幫助用戶進一步對時序數據進行處理。例如使用rate()函數,可以計算在單位時間內樣本數據的變化情況即增長率,因此通過該函數我們可以近似的通過CPU使用時間計算CPU的利用率:

rate(node_cpu[2m])

在這裏插入圖片描述
這時如果要忽略是哪一個CPU的,只需要使用without表達式,將標籤CPU去除後聚合數據即可:

avg without(cpu) (rate(node_cpu[2m]))

在這裏插入圖片描述
那如果需要計算系統CPU的總體使用率,通過排除系統閒置的CPU使用率即可獲得:

1 - avg without(cpu) (rate(node_cpu{mode="idle"}[2m]))

在這裏插入圖片描述
通過PromQL我們可以非常方便的對數據進行查詢,過濾,以及聚合,計算等操作。通過這些豐富的表達書語句,監控指標不再是一個單獨存在的個體,而是一個個能夠表達出正式業務含義的語言。

幫助文檔:https://yunlzheng.gitbook.io/prometheus-book/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章