搭建Prometheus+Grafana的云平臺監(jiān)控系統(tǒng)
1.1 Prometheus和Grafana概述
1.2 安裝配置Prometheus監(jiān)控服務(wù)
1.3 啟動用于采集linux系統(tǒng)和mysql服務(wù)狀態(tài)的exporter服務(wù)
1.4 實戰(zhàn)-使用Grafana可視化工具美化監(jiān)控數(shù)據(jù)顯示效果
1.5 實戰(zhàn)-Grafana配置郵件告警

1.1 Prometheus和Grafana概述
1.1.1 Prometheus概述
Prometheus(普羅米修斯)是一套開源的監(jiān)控&報警&時間序列數(shù)據(jù)庫的組合,起始是由SoundCloud公司開發(fā)的?,F(xiàn)在最常見的Docker、Mesos、Kubernetes容器管理系統(tǒng)中,通常會搭配Prometheus進(jìn)行監(jiān)控。 Prometheus [pr??miθju:s] 普羅米修斯
Prometheus基本原理是通過HTTP協(xié)議周期性抓取被監(jiān)控組件的狀態(tài),這樣做的好處是任意組件只要提供HTTP接口就可以接入監(jiān)控系統(tǒng),不需要任何SDK或者其他的集成過程。這樣做非常適合虛擬化環(huán)境比如VM或者Docker 。
輸出被監(jiān)控組件信息的HTTP接口被叫做exporter。目前互聯(lián)網(wǎng)公司常用的組件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系統(tǒng)信息 (包括磁盤、內(nèi)存、CPU、網(wǎng)絡(luò)等等),具體支持的源看:
https://github.com/prometheus。
exporter ([ek?sp?:t?(r)] 出口商)
對比主流的監(jiān)控工具的操作界面:
nagios監(jiān)控界面:

zabbix監(jiān)控界面

Grafana+Prometheus監(jiān)控界面:

通過上面的界面,我們可以看出來Grafana+Prometheus展示界面更美觀
1.1.2 Prometheus 架構(gòu)圖解
普羅米修斯(Prometheus)及其一些生態(tài)系統(tǒng)組件的整體架構(gòu):

retrieval [r??tri?vl] 數(shù)據(jù)檢索
Prometheus各組件運行流程如下:
1、Prometheus Server:Prometheus Sever是Prometheus組件中的核心部分,負(fù)責(zé)實現(xiàn)對監(jiān)控數(shù)據(jù)的獲取,存儲及查詢。Prometheus Server可以通過靜態(tài)配置管理監(jiān)控目標(biāo),也可以配合使用Service Discovery(服務(wù)發(fā)現(xiàn))的方式動態(tài)管理監(jiān)控目標(biāo),并從這些監(jiān)控目標(biāo)中獲取數(shù)據(jù)。其次Prometheus Sever需要對采集到的數(shù)據(jù)進(jìn)行存儲,Prometheus Server本身就是一個實時數(shù)據(jù)庫,將采集到的監(jiān)控數(shù)據(jù)按照時間序列的方式存儲在本地磁盤當(dāng)中。Prometheus Server對外提供了自定義的PromQL,實現(xiàn)對數(shù)據(jù)的查詢以及分析。另外Prometheus Server的聯(lián)邦集群能力可以使其從其他的Prometheus Server實例中獲取數(shù)據(jù)。
2、Exporters:Exporter將監(jiān)控數(shù)據(jù)采集的端點通過HTTP服務(wù)的形式暴露給Prometheus Server,Prometheus Server通過訪問該Exporter提供的Endpoint端點,即可以獲取到需要采集的監(jiān)控數(shù)據(jù)??梢詫xporter分為2類:
(1)、直接采集:這一類Exporter直接內(nèi)置了對Prometheus監(jiān)控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接內(nèi)置了用于向Prometheus暴露監(jiān)控數(shù)據(jù)的端點。
(2)、間接采集:原有監(jiān)控目標(biāo)并不直接支持Prometheus,因此需要通過Prometheus提供的Client Library編寫該監(jiān)控目標(biāo)的監(jiān)控采集程序。例如:Mysql Exporter,JMX Exporter,Consul Exporter等。
3、AlertManager:在Prometheus Server中支持基于Prom QL創(chuàng)建告警規(guī)則,如果滿足Prom QL定義的規(guī)則,則會產(chǎn)生一條告警。常見的接收方式有:電子郵件,webhook 等。
4、PushGateway:Prometheus數(shù)據(jù)采集基于Prometheus Server從Exporter pull數(shù)據(jù),因此當(dāng)網(wǎng)絡(luò)環(huán)境不允許Prometheus Server和Exporter進(jìn)行通信時,可以使用PushGateway來進(jìn)行中轉(zhuǎn)。
Prometheus的工作流:
1.Prometheus server定期從配置好的jobs和exporters中拉取metrics,或者接收來自Pushgateway發(fā)送過來的metrics,或者從其它的Prometheus server中拉metrics。
metrics [?metr?ks] 衡量指標(biāo)
2.Prometheus server在本地存儲收集到的metrics,并運行定義好的alerts.rules,記錄新的時間序列或者向Alert manager推送警報。
3.Alertmanager根據(jù)配置文件,對接收到的警報進(jìn)行處理,發(fā)出告警。
4.在圖形界面中,可視化采集數(shù)據(jù)。
實驗拓?fù)鋱D:


搭建Prometheus+Grafana的云平臺監(jiān)控系統(tǒng)工作流程:
1、安裝exporter(出口)采集數(shù)據(jù)
2、美化采集到的數(shù)據(jù)
3、在web界面查看
懂:1不懂:2
1.2 安裝配置Prometheus監(jiān)控服務(wù)
1、安裝go語言環(huán)境
方法1:使用tar包安裝go語言環(huán)境
上傳到go1.13.3.linux-amd64.tar.gz到linux服務(wù)器上
或在線下載:
[root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~]

方法2:使用yum安裝go語言環(huán)境
[root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~]
擴(kuò)展:
Go(又稱Golang)是Google開發(fā)的一種靜態(tài)強類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。
下載安裝:
Prometheus(https://prometheus.io/download/)[root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~]
修改prometheus配置文件,配置監(jiān)控linux主機(jī)和mysql數(shù)據(jù)庫,配置文件為yml語法,注意縮進(jìn)對齊
[root@xuegod63 prometheus-2.7.1.linux-amd64]# vim prometheus.yml #在文檔的最后插入以下內(nèi)容
- job_name: system-statusstatic_configs:- targets: ['192.168.1.64:9100']labels:instance: xuegod64- job_name: mysql-statusstatic_configs:- targets: ['192.168.1.64:9104']labels:instance: xuegod64-mysql
插入時,要和文件之前的job_name保持對齊,如下圖:

注釋:
- job_name: system-status #
每一個job_name都是一個監(jiān)控項,這里代表監(jiān)控操作系統(tǒng)狀態(tài)
static_configs:
- targets: ['192.168.1.64:9100'] #
被監(jiān)控主機(jī)IP地址和端口
labels:
instance: xuegod64 #
實例名稱,在grafana中表示對應(yīng)的主機(jī)。
- job_name: mysql-status #
監(jiān)控mysql數(shù)據(jù)庫狀態(tài)
static_configs:
- targets: ['192.168.1.64:9104'] #
目標(biāo)主機(jī)IP地址和端口
labels:
instance: xuegod64-mysql #
實例名稱,在grafana中表示對應(yīng)的主機(jī)。
[root@xuegod63prometheus-2.7.1.linux-amd64]# ./prometheus --config.file=prometheus.yml
出現(xiàn)以下信息吧表示啟動成功。
或直接后臺運行:
[root@xuegod63prometheus-2.7.1.linux-amd64][root@xuegod63 ~]瀏覽器輸入http://192.168.1.63:9090

注:因為我們還沒有開始配置xuegod64了,所以現(xiàn)在還獲取不到xuegod64的信息
1.3 啟動用于采集linux系統(tǒng)和mysql服務(wù)狀態(tài)的exporter服務(wù)
prometheus常見的exporter及作用:
(1)、node_exporter用于監(jiān)控操作系統(tǒng)的性能和運行狀態(tài)
(2)、mysqld_exporter用于監(jiān)控mysql服務(wù)
(3)、snmp_exporter用于監(jiān)控網(wǎng)絡(luò)設(shè)備
更多exporter可在官網(wǎng)下載:
https://prometheus.io/download/#node_exporter

1、配置 node_exporter監(jiān)控xuegod64運行狀態(tài)
[root@xuegod64 ~]上傳node_exporter-1.1.2.linux-amd64.tar.gz到linux上。[root@xuegod64 ~][root@xuegod64 ~]
2、配置mysqld_exporter用于監(jiān)控xuegod64上的mysql服務(wù)
(1)、安裝數(shù)據(jù)庫服務(wù)
[root@xuegod64 ~][root@xuegod64 ~][root@xuegod64 ~]mysql> GRANT REPLICATION CLIENT,PROCESS ON *.* TO 'mysql_monitor'@'localhost' identified by '123456';mysql> GRANT SELECT ON *.* TO 'mysql_monitor'@'localhost';MariaDB [(none)]> exit;
注:mysql 用戶權(quán)限說明:
(1)、replication client權(quán)限 #擁有此權(quán)限可以查詢master server、slave server狀態(tài)。
(2)、PROCESS權(quán)限 #通過這個權(quán)限,用戶可以執(zhí)行SHOW PROCESSLIST和KILL命令。默認(rèn)情況下,每個用戶都可以執(zhí)行SHOW PROCESSLIST命令,但是只能查詢本用戶的進(jìn)程。如:
mysql> show processlist;
另外,管理權(quán)限 process不能夠指定某個數(shù)據(jù)庫,on后面必須跟*.*
(3)、select權(quán)限 #必須有select的權(quán)限,才可以使用select * from table 查看數(shù)據(jù)
(2)、安裝mysqld_exporter

上傳mysqld_exporter到linux系統(tǒng)上
[root@xuegod64 ~]創(chuàng)建隱藏配置文件.my.cnf,用于mysqld_exporter連接mysql采集數(shù)據(jù)。
[root@xuegod64 ~][client]user=mysql_monitorpassword= 123456[root@xuegod64 ~]
在web界面,再次查看監(jiān)控信息已經(jīng)成功添加linux 和mysql節(jié)點,已經(jīng)up了
瀏覽器輸入:
http://192.168.1.63:9090

查看網(wǎng)絡(luò)端口:
[root@xuegod64 ~]tcp6 0 0 :::9100 :::* LISTEN 2158/node_exportertcp6 0 0 :::9104 :::* LISTEN 41308/mysqld_export
總結(jié)prometheus使用方法:
1、想監(jiān)控操作系統(tǒng),只需要一步:
在被監(jiān)控系統(tǒng)上安裝node_exporter并啟動,就ok了
2、想監(jiān)控操mysql數(shù)據(jù)庫,只需要兩步:
(1)、創(chuàng)建一個mysql用戶
(2)、安裝mysqld_exporter并啟動
1.4 實戰(zhàn)-使用Grafana可視化工具美化監(jiān)控數(shù)據(jù)顯示效果
1.4.1 配置grafana
1、上傳grafana到linux系統(tǒng)/root/下
[root@xuegod63 ~]或在線下載:[root@xuegod64 ~]
2、安裝圖形餅狀圖插件,方便顯示餅狀圖
方法1:離線安裝
下載:
https://grafana.com/api/plugins/grafana-piechart-panel/versions/1.6.1/download
然后上傳grafana-piechart-panel-1.6.1.zip到linux系統(tǒng)上
[root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~]
方法2:在線安裝
[root@xuegod63 ~][root@xuegod63 ~]
3、訪問:
http://192.168.1.63:3000/login
用戶名:admin密碼admin

第一次登陸會提示修改密碼,咱們改成123456

配置數(shù)據(jù)源

url地址:http://192.168.1.63:9090

在頁面最下面,點:Save & Test

Scrape [skre?p] 刮擦 ;
interval [??nt?vl] 間隔;
Scrape interval 抓取數(shù)據(jù)間隔
彈出下面信息,說明成功了

1.4.2 將監(jiān)控Linux系統(tǒng)和mysql服務(wù)運行狀態(tài)的web儀表盤插件導(dǎo)入grafana
1、查找可以美化Linux系統(tǒng)監(jiān)控數(shù)據(jù)的儀表盤插件


打開官方網(wǎng)站:
https://grafana.com/grafana/dashboards
在頁面中找到這個:
https://grafana.com/grafana/dashboards?search=node
輸入關(guān)鍵字node,進(jìn)行查詢,查看自已想要的展示看板:

我使用們這個ID:8919
打開這個鏈接:
https://grafana.com/grafana/dashboards/8919

也可以直接下載JSON文件,然后后期,直接導(dǎo)入這個離線文件:

ID號是: 8919。 注: 如果在線導(dǎo)入的看板,看不到數(shù)據(jù),可以換一個ID號,再試試。
開始導(dǎo)入:

點load,

刷新瀏覽器界面:

注:也可以導(dǎo)入之前下載的
node-exporter-for-prometheus-dashboard-cn-v20201010_rev24.json離線文件上傳。

2、查出mysql的 Web儀表盤插件的ID號
打開此鏈接可直接搜索到與課程對應(yīng)版本的儀表盤
https://grafana.com/grafana/dashboards?search=mysql%20overview&utm_source=grafana_search然后選擇這個由nasskach開發(fā)的界面

打開鏈接:
https://grafana.com/grafana/dashboards/7362
復(fù)制7362 的ID

來到grafana主界面,導(dǎo)入dashboard:



下拉選擇Prometheus


1.5 實戰(zhàn)-Grafana配置郵件告警
1.5.1 配置SMTP發(fā)送郵件
配置163郵箱smtp服務(wù)

點擊開啟SMTP服務(wù),點擊開啟后會提示我們下載手機(jī)APP,我們點繼續(xù)開啟不需要下載APP。

根據(jù)提示發(fā)送手機(jī)驗證碼即可開啟成功

EMXCERHXVHVDXKJF
開啟成功后會新增授權(quán)密碼管理的選項,如果你之前已經(jīng)開啟過,直接點擊新增授權(quán)密碼即可。

Grafana配置SMTP賬戶
[root@xuegod63 ~]第522行修改smtp配置

注:所有修改配置前 ; 注釋符號需要取消,將對應(yīng)行,改為以下內(nèi)容:
[smtp]enabled = true #啟用smtphost = smtp.163.com:465 #163 smtp服務(wù)地址user = jianmingbasic@163.com #163郵箱用戶名# If the password containspassword = EMXCERHXVHVDXKJF #授權(quán)密碼; cert_file =; key_file =; skip_verify = falsefrom_address = jianmingbasic@163.com #郵件From地址,和登錄用戶一致即可。;from_name = Grafana; ehlo_identity =
修改完郵件配置后修改domain信息,郵件內(nèi)容中包含Grafana的訪問地址,默認(rèn)地址為localhost。
改:
41 ;domain = localhost
為:
41 domain = 192.168.1.63
1.5.2 配置圖片渲染功能
配置插件地址
改:
813 ;server_url =
為:
813 server_url = http://192.168.1.63:8081/render
配置callback_url,該地址為Grafana地址。
改:
815 ;callback_url =
815 callback_url =
http://192.168.1.63:3000/
修改默認(rèn)語言,默認(rèn)配置渲染圖片時不支持中文。
改:
840 ;rendering_language =
為:
840 rendering_language = zh
安裝圖片渲染插件(經(jīng)測試僅docker方式搭建的插件支持中文渲染)
安裝docker環(huán)境
[root@xuegod63 ~]配置國內(nèi)docker的yum源(阿里云)[root@xuegod63 ~]安裝docker-ce[root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~][root@xuegod63 ~]{"registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com","https://rncxm540.mirror.aliyuncs.com","https://e9yneuy4.mirror.aliyuncs.com"]}EOF[root@xuegod63 ~][root@xuegod63 ~]運行docker版本的圖片渲染插件上傳課程資料中的grafana-image-renderer.tar.gz[root@xuegod63 ~][root@xuegod63 ~]重啟Grafana使配置生效[root@xuegod63 ~]
檢查郵件服務(wù)是否配置成功,添加告警頻道。


取任意名稱,選擇Email發(fā)送,填寫收件人地址即可發(fā)送測試郵件。Include image需要手動勾選,這樣發(fā)送郵件時才會附帶監(jiān)控圖表信息。新版本中默認(rèn)不勾選,因為需要安裝插件。

測試成功后點擊保存即可。

收到Grafana郵件

內(nèi)容是測試信息

1.5.3 自定義監(jiān)控項與告警規(guī)則
配置告警,回到儀表盤進(jìn)行操作。


添加panel


修改一個新的標(biāo)題
Panel title: xuegod64-CPU使用率

修改監(jiān)控項配置。刪除監(jiān)控項。保留user配置即可。因為我們手工測試只能測試到User監(jiān)控項。刪除AFDC保留B
metrics [?metr?ks] 衡量指標(biāo)
Metrics: (1 - avg(rate(node_cpu_seconds_total{instance=~"xuegod64",mode="idle"}[30s])) by (instance)) * 100Legend: CPU使用率注:idle表示總負(fù)載,system表示系統(tǒng)使用率,user表示用戶使用率。
只留這個監(jiān)控項參數(shù)

添加告警

配置告警規(guī)則。
xuegod64-cpu使用率報警
隨便輸出點告警描述信息:
xuegod64-CPU > 50% (test)

注:query查詢的時間默認(rèn)是5分鐘的平均數(shù)據(jù),如果想快速觸發(fā)報警可以時間縮短至1m。0.5=50%
保存配置,點擊按鈕


點擊save保存即可
可以看到這里有這個標(biāo)識:

應(yīng)用一下:

1.5.4 壓力測試觸發(fā)告警
安裝壓力測試工具
[root@xuegod64 ~][root@xuegod64 ~]
對CPU進(jìn)行壓力測試。注:教學(xué)環(huán)境中xuegod64分配了8核心CPU,我們的監(jiān)控指標(biāo)配置的是超過50%告警,則需要將超過半數(shù)的CPU資源耗盡,所以-c參數(shù)大于虛擬機(jī)中CPU核心數(shù)量的一半即可,同學(xué)們根據(jù)自己學(xué)習(xí)環(huán)境進(jìn)行調(diào)整。
[root@xuegod64 ~]# stress -c 6
新建終端窗口使用top命令查看系統(tǒng)負(fù)載
[root@xuegod64 ~]# top
已經(jīng)創(chuàng)建了6個占用CPU100%的進(jìn)程。
查看狀態(tài)信息,可以看到pending和發(fā)送郵件間隔了1分鐘。

查看郵箱

郵件中可以看到監(jiān)控指標(biāo)數(shù)據(jù)

Ctrl+C關(guān)閉壓力測試工具

等待平均負(fù)載指標(biāo)下來后就會收到恢復(fù)郵件。


-------- THE END --------
