09 生產(chǎn)經(jīng)驗:如何為生產(chǎn)環(huán)境中的數(shù)據(jù)庫部署監(jiān)控系統(tǒng)?

生產(chǎn)經(jīng)驗:如何為生產(chǎn)環(huán)境中的數(shù)據(jù)庫部署監(jiān)控系統(tǒng)?
1、生產(chǎn)環(huán)境的數(shù)據(jù)庫可不能裸奔??!
之前我們已經(jīng)給大家講解完了數(shù)據(jù)庫的壓測相關(guān)的知識,想必大家只要利用我們講解的知識,在自己的公司里,哪怕DBA團隊、QA團隊都沒法給你提供專業(yè)的數(shù)據(jù)庫壓測技術(shù)支持,但是大家手上拿到一個數(shù)據(jù)庫之后,其實自己也可以通過各種工具和命令,非常好的完成一臺機器上的數(shù)據(jù)庫的壓測了。
你應(yīng)該可以心里非常有數(shù),一臺什么樣配置的機器,部署了一個數(shù)據(jù)庫之后,利用sysbench構(gòu)造了多少個表和數(shù)據(jù)量,然后模擬了多少個線程壓測的時候,機器的各項硬件負載在可以接受的范圍內(nèi)時,數(shù)據(jù)庫的QPS和TPS可以壓測到多高。
這個時候你大致就明白你的數(shù)據(jù)庫在高峰時期最多可以讓他去承受多少Q(mào)PS和TPS了。
但是搞定壓測之后,難道大家就想直接開始開發(fā)你的Java系統(tǒng)?直接讓你的系統(tǒng)連接到MySQL上去執(zhí)行各種CRUD的SQL語句?然后接著就開始拼命寫各種Java代碼和SQL語句,寫好之后就找QA進行測試,然后部署到線上生產(chǎn)環(huán)境,接著就萬事大吉了,不管數(shù)據(jù)庫了?
這種做法可能目前很多公司和團隊都是這樣做的,但是如果你僅僅是這么搞是絕對不行的。因為實際上我們需要對線上系統(tǒng)進行完善的監(jiān)控,不光是對你開發(fā)的Java系統(tǒng)進行監(jiān)控,還得對你的數(shù)據(jù)庫進行監(jiān)控,包括對CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤IO、慢查詢、QPS、TPS的監(jiān)控。
因為如果你不對你的數(shù)據(jù)庫做任何監(jiān)控,那么有可能你的數(shù)據(jù)庫CPU負載已經(jīng)很高了,或者磁盤IO已經(jīng)達到極限了,你都不知道,結(jié)果你還是一如既往的運行你的Java系統(tǒng),有一天可能你的數(shù)據(jù)庫突然掛了你都沒反應(yīng)過來!
所以今天我們就帶著大家來一步步搭建一下生產(chǎn)環(huán)境數(shù)據(jù)庫的可視化監(jiān)控平臺,我們會基于Prometheus+Grafana來搭建。
當然在公司里,如果要針對數(shù)據(jù)庫搭建一個統(tǒng)一的可視化監(jiān)控平臺,這個活兒往往是DBA團隊負責的,但是不管如何,我們這里也要對這個數(shù)據(jù)庫可視化監(jiān)控的技術(shù)有一定的了解。
2、簡單介紹一下Prometheus和Grafana是什么
我們先給大家簡單介紹一下Prometheus和Grafana兩個系統(tǒng)分別是什么。
簡單來說,Prometheus其實就是一個監(jiān)控數(shù)據(jù)采集和存儲系統(tǒng),他可以利用監(jiān)控數(shù)據(jù)采集組件(比如mysql_exporter)從你指定的MySQL數(shù)據(jù)庫中采集他需要的監(jiān)控數(shù)據(jù),然后他自己有一個時序數(shù)據(jù)庫,他會把采集到的監(jiān)控數(shù)據(jù)放入自己的時序數(shù)據(jù)庫中,其實本質(zhì)就是存儲在磁盤文件里。
我們采集到了MySQL的監(jiān)控數(shù)據(jù)還不夠,現(xiàn)在我們還要去看這些數(shù)據(jù)組成的一些報表,所以此時就需要使用Grafana了,Grafana就是一個可視化的監(jiān)控數(shù)據(jù)展示系統(tǒng),他可以把Prometheus采集到的大量的MySQL監(jiān)控數(shù)據(jù)展示成各種精美的報表,讓我們可以直觀的看到MySQL的監(jiān)控情況。
其實不光是對數(shù)據(jù)庫監(jiān)控可以采用Prometheus+Grafana的組合,對你開發(fā)出來的各種Java系統(tǒng)、中間件系統(tǒng),都可以使用這套組合去進行可視化的監(jiān)控,無非就是讓Prometheus去采集你的監(jiān)控數(shù)據(jù),然后用Grafana展示成報表而已。
3、安裝和啟動Prometheus
之前給大家說過,讓大家自己準備一個linux機器,如果你是windows筆記本電腦,可以自己裝一個linux虛擬機。我們就基于一臺linux機器來部署Prometheus和Grafana,至于MySQL的安裝,這個非常的簡單,大家在網(wǎng)上很容易搜索到。
首先大家需要下載3個壓縮包,在下面鏈接:
https://prometheus.io/download/
大家可以下載到下面兩個壓縮包,這里prometheus就是用來部署監(jiān)控系統(tǒng)自己的,然后node_exporter是用來采集MySQL數(shù)據(jù)庫所在機器的CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤之類的監(jiān)控數(shù)據(jù)的:
prometheus-2.1.0.linux-amd64.tar.gz ? ?
node_exporter-0.15.2.linux-amd64.tar.gz ?
接著大家可以通過下面的鏈接下載第三個壓縮包:mysqld_exporter-0.10.0.linux-amd64.tar.gz,這個mysqld_exporter就是用來采集MySQL數(shù)據(jù)庫自己的一些監(jiān)控數(shù)據(jù)的,比如SQL性能、連接數(shù)量之類的:
https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz
接著需要解壓縮上面的幾個包,參照我如下的命令來做就可以了:
mkdir /data
mkdir /root
tar xvf prometheus-2.1.0.linux-amd64.tar -C /data
tar xf node_exporter-0.15.2.linux-amd64.tar -C /root
tar xf mysqld_exporter-0.10.0.linux-amd64.tar.gz -C /root
cd /data
mv prometheus-2.1.0.linux-amd64/ prometheus
cd /prometheus
vi prometheus.yml,接下來修改prometheus的配置文件,其實主要是在scrape_configs下面加入一大段自定義的配置,因為他需要去采集MySQL數(shù)據(jù)庫本身和MySQL所在機器的監(jiān)控數(shù)據(jù):
scrape_configs:
?- file_sd_configs:
? ?-files:
? ? ?- host.yml
? ?job_name: Host
? ?metrics_path: /metrics
? ?relabel_configs:
? ?- source_labels: [__address__]
? ? ?regex: (.*)
? ? ?target_label: instance
? ? ?replacement: $1
? ?- source_labels: [__address__]
? ? ?regex: (.*)
? ? ?target_label: __address__
? ? ?replacement: $1:9100
?- file_sd_configs:
? ?- files:
? ? ?- mysql.yml
? ?job_name: MySQL
? ?metrics_path: /metrics
? ?relabel_configs:
? ?- source_labels: [__address__]
? ? ?regex: (.*)
? ? ?target_label: instance
? ? ?replacement: $1
? ?- source_labels: [__address__]
? ? ?regex: (.*)
? ? ?target_label: __address__
? ? ?replacement: $1:9104
?- job_name: prometheus
? ?static_configs:
? ?- targets:
? ? ?- localhost: 9090
上面的配置文件寫好之后,就可以啟動Prometheus了,不過大家仔細看幾遍上面的配置信息,因為我在寫文章的時候不太方便,都是直接手敲出來的,可能會有少數(shù)配置錯誤,如果大家有發(fā)現(xiàn)配置文件錯誤的地方,及時在后臺評論區(qū)告訴我。
接著必須要在/data/prometheus目錄中,去執(zhí)行啟動命令:
/data/prometheus/prometheus --storage.tsdb.retention=30d &,這里的30d是說你的監(jiān)控數(shù)據(jù)保留30天的。啟動之后,就可以在瀏覽器中訪問9090端口號去查看prometheus的主頁了。
因為我們部署和安裝Prometheus和Grafana的過程比較多,所以拆分為兩篇文章,今天同步更新的第二篇文章里,會把剩余的Grafana的安裝部署過程,以及監(jiān)控配置和采集的過程都講完。
End
專欄版權(quán)歸公眾號儒猿技術(shù)窩所有
未經(jīng)許可不得傳播,如有侵權(quán)將追究法律責任