1. 程式人生 > 實用技巧 >prometheus+grafana安裝部署

prometheus+grafana安裝部署

官網:https://prometheus.io/download/#mysqld_exporter

【1】基本介紹

【1.0】Prometheus 與 其他監控產品的優劣

優點:

  (1)監控資料的精細程度非常高,可以精確到1-5秒的採集精度

  (2)軟體的部署非常快,大大縮減搭建時間成本

  (3)周邊外掛很豐富,比如 exporter pushgateway 大多數都步需要自己開發了

  (4)基於數學計算模型(proMQL),大量的使用函式,可以實現很複雜規則的業務邏輯監控(比如QPS曲線,彎曲,凸起,下跌,比例等等模糊)

  (5)可以嵌入很多開源工具的內部,比如nignx 、資料庫 等,進行監控,資料更準時更可信(其他監控比較難做到)

  (6)結合grafana 圖形很高大上很美觀

不足:

  (1)因為圖形菜雞經度,如果叢集資料量太大,那麼簡單監控有效能瓶頸。

  (2)學習成本大,還有 proMQL,中文資料極少,沒有人教 官網英文資料也是比較難入門

  (3)對磁碟資源消耗比較大,這個具體要看監控的叢集數量 和 監控項的多少 以及儲存時長的設定

  (4)本身的使用,需要使用者數學不能太差,有一定的資料邏輯

【1.1】概念及特點

簡介:

  Prometheus是一個最初在SoundCloud上構建的開源系統監控和警報工具包 。自2012年成立以來,許多公司和組織都採用 Prometheus,該專案擁有非常活躍的開發人員和使用者社群。

  它現在是一個獨立的開源專案,並且獨立於任何公司。為了強調這一點,並澄清 專案的治理結構,Prometheus 於2016年加入 雲本地計算基金會,作為Kubernetes之後的第二個託管專案。

特點:

  Prometheus 屬於一站式監控告警平臺,依賴少,功能齊全。 Prometheus 支援對雲的或容器的監控,其他系統主要對主機監控。

   Prometheus 資料查詢語句表現力更強大,內建更強大的統計函式。 Prometheus 在資料儲存擴充套件性以及永續性上沒有 InfluxDB,OpenTSDB,Sensu 好。

優質特性:

(1)基於 time series 時序模型,既使用時序資料庫儲存模型。什麼是時序序列呢?就是(x,y)軸,x為時間,y為值

(2)使用 K/V 的資料模型,格式簡單,速度快,易維護開發

(3)取樣資料查詢:promQL,比如可以 (增量A+增量B)/ 總量C

(4)採用 HTTP pull /push 兩種對應的資料採集方式傳輸

(5)【開源,及大量外掛】

(6)【本身自帶挺除錯】、【秒級資料取樣頻率,秒級取樣間隔】

不足:

(1)本身不支援叢集化

(2)被監控叢集過大後,本身可能會產生效能瓶頸

(3)中文支援不好,中文資料也少

【1.2】prometheus 基本元件

  1. Prometheus Server, 主要用於抓取資料和儲存時序資料,另外還提供查詢和 Alert Rule 配置管理。
  2. client libraries,用於對接 Prometheus Server, 可以查詢和上報資料。
  3. push gateway ,用於批量,短期的監控資料的彙總節點,主要用於業務資料彙報等。
  4. 各種彙報資料的 exporters ,例如彙報機器資料的 node_exporter, 彙報 MongoDB 資訊的 MongoDB exporter 等等。
  5. 用於告警通知管理的 alertmanager 。

【1.3】基本原理

  Prometheus基本原理是通過HTTP協議週期性抓取被監控元件的狀態,這樣做的好處是任意元件只要提供HTTP介面就可以接入監控系統, 不需要任何SDK或者其他的整合過程。

  這樣做非常適合虛擬化環境比如VM或者Docker 。 Prometheus應該是為數不多的適合Docker、Mesos、Kubernetes環境的監控系統之一。

  輸出被監控元件資訊的HTTP介面被叫做exporter 。

  目前網際網路公司常用的元件大部分都有exporter可以直接使用,比如Varnish、 Haproxy、Nginx、MySQL、Linux 系統資訊 (包括磁碟、記憶體、CPU、網路等等)

【1.4】監控的基本體系流程

  

【2】認識prometheus

【2.1】基本架構與模組

      

  從這個架構圖,也可以看出 Prometheus 的主要模組包含,Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI等。

(1)

【2.2】prometheus 四種資料型別

Counter

  Counter用於累計值,例如記錄請求次數、任務完成數、錯誤發生次數。一直增加,不會減少。重啟程序後,會被重置。

例如:http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10秒後抓取http_response_total {method=”GET”,endpoint=”/api/tracks”} 100。

Gauge

Gauge常規數值,例如 溫度變化、記憶體使用變化。可變大,可變小。重啟程序後,會被重置。 例如: memory_usage_bytes{host=”master-01″} 100 < 抓取值、memory_usage_bytes{host=”master-01″} 30、 memory_usage_bytes{host=”master-01″} 50、memory_usage_bytes{host=”master-01″} 80 < 抓取值。

Histogram

  Histogram(直方圖)可以理解為柱狀圖的意思,常用於跟蹤事件發生的規模。

    例如:請求耗時、響應大小。它特別之處是可以對記錄的內 容進行分組,提供count和sum全部值的功能。

    例如:{小於10=5次,小於20=1次,小於30=2次},count=7次,sum=7次的求和值。

Summary

  Summary和Histogram十分相似,常用於跟蹤事件發生的規模,例如:請求耗時、響應大小。同樣提供 count 和 sum 全部值的功能。

  例如:count=7次,sum=7次的值求值。 它提供一個quantiles的功能,可以按%比劃分跟蹤的結果。例如:quantile取值0.95,表示取取樣值裡面的95%資料。

【2.3】預設埠

伺服器端:

9090埠是必須配置的,這是prometheus自帶的web介面
9100是node_exporter的預設埠
9104是mysqld_exporter預設埠

【3】prometheus安裝

裝在192.168.175.129

【3.1】下載

官網:https://prometheus.io/download/#mysqld_exporter

linux:

mkdir /soft
cd /soft 
wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz

【3.2】安裝 prometheus

#【1】安裝go
yum -y install go

#【2】安裝 prometheus 服務端
cd /soft
tar -zxf prometheus-2.20.1.linux-amd64.tar.gz
cd prometheus-2.20.1.linux-amd64
vim prometheus.yml

修改配置檔案 vim prometheus.yml

  

主要是把紅框中的加上:

9090埠是必須配置的,這是prometheus自帶的web介面
9100是 node_exporter 的預設埠
9104是 mysqld_exporter 預設埠

【3.3】啟動與檢視

#prometheus啟動命令新增引數 --web.enable-lifecycle ,這樣修改配置檔案後就不用再重啟 prometheus 了
nohup ./prometheus --web.enable-lifecycle

如果有錯誤會顯示的,沒有錯誤我們就看看程序起來沒有,如下圖,沒有問題,OK

  

【3.4】驗證:訪問 prometheus Web介面

我們輸入IP+它的自帶web 埠 9090,URL輸入下列

  http://192.168.175.129:9090

  

【4】node_exporter 採集器

裝在192.168.175.129

【4.1】什麼是 node_exporter

舉個例子,如果你有一臺伺服器,你想要獲取它執行時候的引數,比如當前的CPU負載、系統負載、記憶體消耗、硬碟使用量、網路IO等等。

那麼你就可以在伺服器上執行一個node_exporter,它能幫你把這些引數收集好,並且暴露出一個HTTP介面以便你訪問查詢。廢話不多說我們直接試一試

【4.2】node_exporter 下載

官網:https://github.com/prometheus/node_exporter/releases

linux:

mkdir /soft
cd /soft
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

【4.3】node_exporter 安裝啟動

sudo tar -zxf node_exporter-1.0.1.linux-amd64.tar.gz
cd node_exporter-1.0.1.linux-amd64
sudo ./node_exporter

啟動成功會顯示如下資訊:注意後後續有沒有報錯 

   

【4.4】核驗

(1)curl訪問核驗

  

有資料就沒有問題

(2)prometheus 介面核驗

  

狀態是up就ok

【4.5】監控指標舉例

#HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
#TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 1.40181324e+06

  

這是其中一條指標,由指標名+{標籤鍵值對}+值組成。

#HELP開頭的行用來說明下面指標node_cpu_seconds_total的意義:

  指標node_cpu_seconds_total用來表示CPU在每種模式下工作的秒數,而大括號裡的稱之為標籤,以鍵值對的形式出現。

  可以用來細分同一個指標下的不同部分,比如這裡的cpu="0"表示CPU的第0個核心,mode="idle"表示工作模式為idle,也就是沒被任何程式使用的空閒模式。

#TYPE開始的第二行表示指標的數值型別為counter型別。在Prometheus的規範中,counter型別表示只增長的型別,也就是隻會增加不會減少的值,且數值只能是正整數。大數值會啟用科學計數法。

  此時可以看出指標node_cpu_seconds_total{cpu="0",mode="idle"} 1.40181324e+06表示節點的CPU0的空閒時間共計1.40181324e+06秒。數值從系統開機時算起,重啟歸零。

小結:

  此時我們可以從頁面中看到很多類似的指標以及值,如果只打算監控這一臺,又或者只需要這一個值,我們可以自行編寫程式碼訪問這個介面,匹配出想要的指標和值即可。

  但是如果有很多臺伺服器,而且想要綜合多臺進行對比分析,更有甚者希望將指標繪製成圖表,或者說保留歷史資料以便查詢過去的某個時間點其伺服器的執行狀態,那麼這將會變得很麻煩。

  而Prometheus就是幹這個事情的。



【5】mysqld_exporter 採集器安裝

這個我是裝在另外一臺機器上192.168.175.130

【5.1】下載

官網:https://prometheus.io/download/#mysqld_exporter

linux:

mkdir /soft
cd /soft
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

【5.2】解壓、配置、啟動、核驗

tar -zxf mysqld_exporter-0.12.1.linux-amd64.tar.gz
cd mysqld_exporter-0.12.1.linux-amd64/
vim mysqld_exporter.cnf
[client]
user=root
password=123456
nohup ./mysqld_exporter --config.my-cnf ./mysqld_exporter.cnf  &

如上,就沒有問題,就成功了。

【5.3】prometheus 介面核驗

  

看到我們的狀態是up就OK

【6】prometheus 介面檢視

  

【6.1】基本抓取值檢視

上免的介面中可以看到,標題欄Graph連結到圖形查詢介面,在輸入框中允許輸入查詢語句,點選execute執行,insert metric at cursor下拉列表中列舉了當前所有的存在的指標可以不用輸入而直接選擇。
往下,預設的console欄表示查詢結果以文字的形式顯示,而Graph欄表示繪製圖表。
我們試一下,在輸入框中輸入先前的指標名node_cpu_seconds_total單機Execute。
可以看到很多指標被列舉了出來

  

  為了更精確的查詢,我們輸入node_cpu_seconds_total{cpu="0",mode="idle"},可以看到選項很競爭的被顯示出來了
node_cpu_seconds_total{cpu="0",instance="localhost:9100",job="node",mode="idle"}    613608.34

為了方便我直接拷貝出來了,可以看到,指標新增了很多的標籤

  比如instance就表示IP地址和埠號,是配置檔案中輸入的

  點選Graph檢視圖形,下面還可以調節時間

    

【6.2】狀態檢視

  

【7】Grafana

【7.1】下載安裝

官網:https://grafana.com/grafana/download

安裝:https://grafana.com/docs/grafana/latest/installation/rpm/

(1)下載安裝

cd /soft 
wget https://dl.grafana.com/oss/release/grafana-7.1.3.linux-amd64.tar.gz
tar -zxf grafana-7.1.3.linux-amd64.tar.gz
cd grafana-7.1.3

(2)啟動

./bin/grafana-server web

(3)核驗

netstat -anp|grep -E "9100|9104|3000"

  

(4)相關資訊

  • 預設埠:3000
  • 預設日誌:var/log/grafana/grafana.log
  • 預設持久化檔案:/var/lib/grafana/grafana.db
  • web預設賬戶密碼:admin/admin

【7.2】進入Grafana web介面

http://192.168.175.129:3000進入圖形介面

web預設賬戶密碼:admin/admin

  

【7.3】配置 Grafana 新增 Prometheus 資料來源

  

然後點選 add data source,點選prometheus

  

輸入好 prometheus 的服務端地址和埠

  

然後點選完成,檢視資訊是否成功

  

【7.4】配置mysql儀表盤

如下圖,我們可以看到似乎圖形介面中並沒有可以選擇的儀表盤

  

實際上這需要我們去官網找

  https://grafana.com/grafana/dashboards

  

這邊有可以篩選

  

如果可以聯網,就可以用 ID 來匯入,如果伺服器網路不好或沒有外網就可以下載json