公司目前也有一套監(jiān)控系統(tǒng),但由于監(jiān)控系統(tǒng)的性能問題及功能擴(kuò)展性問題等等導(dǎo)致監(jiān)控系統(tǒng)后端急需進(jìn)行一次大的重構(gòu);采用的是C++寫成的探針用來采集各個主機(jī)硬件信息和組件的業(yè)務(wù)信息。前端采用的是基于electron和vue搭建的跨平臺PC客戶端監(jiān)控系統(tǒng),其實際是由js實現(xiàn)的前端項目,因為我們業(yè)務(wù)數(shù)據(jù)過大,對后端和前端都造成的很大的困擾,因此準(zhǔn)備著手開發(fā)一套新的監(jiān)控系統(tǒng)。
新的監(jiān)控系統(tǒng)我們選擇了Prometheus+Grafana這樣的組合方式,后端部分一部分是go語言寫的探針采集主機(jī)信息的功能,另一部分是原來的C++寫的探針采集的業(yè)務(wù)信息。go探針采集的信息通過Prometheus將數(shù)據(jù)發(fā)送給一個中間件websever,業(yè)務(wù)信息也是發(fā)送到中間件websever中。再通過websever與前端進(jìn)行交互,Grafana將嵌入到前端客戶端當(dāng)中。
進(jìn)行一段時間研究后,發(fā)現(xiàn)Prometheus+Grafana還是可以的。這里就主要記錄一下搭建的過程。
概述
Prometheus是一個開源的服務(wù)監(jiān)控系統(tǒng),它通過HTTP協(xié)議從遠(yuǎn)程的機(jī)器收集數(shù)據(jù)并存儲在本地的時序數(shù)據(jù)庫上。
- 多維數(shù)據(jù)模型(時序列數(shù)據(jù)由metric名和一組key/value組成)
- 在多維度上靈活的查詢語言(PromQl)
- 不依賴分布式存儲,單主節(jié)點工作.
- 通過基于HTTP的pull方式采集時序數(shù)據(jù)
- 可以通過push gateway進(jìn)行時序列數(shù)據(jù)推送(pushing)
- 可以通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置去獲取要采集的目標(biāo)服務(wù)器
- 多種可視化圖表及儀表盤支持
Prometheus通過安裝在遠(yuǎn)程機(jī)器上的exporter來收集監(jiān)控數(shù)據(jù),后面我們將使用到node_exporter收集系統(tǒng)數(shù)據(jù)。
架構(gòu)

Grafana 是一個開箱即用的可視化工具,具有功能齊全的度量儀表盤和圖形編輯器,有靈活豐富的圖形化選項,可以混合多種風(fēng)格,支持多個數(shù)據(jù)源特點。

架構(gòu)

軟件安裝
Prometheus
官網(wǎng)下載(https://prometheus.io/),支持Linux、Mac、Windows系統(tǒng),很好很強(qiáng)大。我這里安裝過Centos和Mac,這里的實例以Mac為準(zhǔn)。
Mac下載的發(fā)行版為darwin版;
-
下載下來解壓縮就好,我得到的版本(2.0.0)內(nèi)容如下:
image.png -
目錄下的prometheus可以直接啟動
98772DB7-389C-4C48-84AF-AA8D153494C6.png -
啟動成功以后我們可以通過Prometheus內(nèi)置了web界面訪問,http://ip:9090 ,如果出現(xiàn)以下界面,說明配置成功
image.png
安裝exporter
(一)下載并解壓node_exporter:
#下載
wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.15.0.linux-amd64.tar.gz -O node_exporter-0.15.0.linux-amd64.tar.gz
# 可自定義解壓目錄
tar -xvf node_exporter-0.15.0.linux-amd64.tar.gz
運行node_exporter:
## 后臺運行
./node_exporter &
(二)prometheus可以理解為一個數(shù)據(jù)庫+數(shù)據(jù)抓取工具,工具從各處抓來統(tǒng)一的數(shù)據(jù),放入prometheus這一個時間序列數(shù)據(jù)庫中。那如何保證各處的數(shù)據(jù)格式是統(tǒng)一的呢?就是通過這個exporter。exporter也是用GO寫的程序,它開放一個http接口,對外提供格式化的數(shù)據(jù)。所以在不同的環(huán)境下,需要編寫不同的exporter。好在已經(jīng)有很多寫好的exporter,我們可以直接使用,(本句是一句廢話為了更好的排版顯示)(https://github.com/prometheus這里可以找到很多exporter)我們這里直接使用mysqld_exporter(prometheus.io/download/#mysqld_exporter)。當(dāng)然也要下載對應(yīng)系統(tǒng)的版本。解壓后的內(nèi)容如下:

這里的mysqld_exporter是啟動文件,.my.cnf是配置文件。想要正確的導(dǎo)出mysql的狀態(tài)數(shù)據(jù),必須在配置文件中正確的配置mysql的連接信息。我的配置如下:

配置好了,就可以啟動了。成功如下所示:

通過localhost:9104,就可以看到exporter導(dǎo)出的數(shù)據(jù)了:


在Prometheus中配置mysqld_exporter
exporter啟動了,需要在Prometheus中正確的配置。修改prometheus目錄中的prometheus.yml,增加配置如下:
global:
scrape_interval: 15s
evaluation_interval: 15s
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux1
static_configs:
- targets: ['192.168.1.120:9100']
labels:
instance: sys1
- job_name: linux2
static_configs:
- targets: ['192.168.1.130:9100']
labels:
instance: sys2
重啟prometheus,點擊導(dǎo)航欄中的status->targets可以看到,mysql的exporter已經(jīng)集成進(jìn)來了。

至此,prometheus這邊的搭建基本完成了。
安裝Grafana
Grafana官網(wǎng)(https://grafana.com/),上面有各個系統(tǒng)安裝的步驟,我的mac是直接通過brew安裝的(如果你的brew太慢,可以換成國內(nèi)的源試一下)。安裝后用brew services start grafana啟動即可。啟動后,即可通過http://127.0.0.1:3000/來訪問了(默認(rèn)賬號密碼是admin/admin)。進(jìn)來之后應(yīng)該看到這個頁面:

首先,你要添加一個數(shù)據(jù)源,將Grafana和Prometheus關(guān)聯(lián)起來。點擊Add data source,如下填寫數(shù)據(jù)保存即可:

看到如下的提示,說明你的prometheus工作是正常的:

接著回到首頁,你需要添加一個dashboard,如下圖進(jìn)入dashboard導(dǎo)入頁面:

這里你需要從https://github.com/percona/grafana-dashboards項目中的dashboards下載MySQL_Overview.json,然后通過上面頁面的Upload .json File按鈕上傳上去,導(dǎo)入即可。

導(dǎo)入成功后,你將看到監(jiān)控頁面,大功告成?。?!



