小團(tuán)隊(duì)從0搭建devOPS平臺(tái)-Prometheus監(jiān)控報(bào)警系統(tǒng)

在當(dāng)前微服務(wù)架構(gòu)流行情況下,對(duì)于初創(chuàng)企業(yè),可能就幾個(gè)技術(shù)(2-20個(gè)不等),但是卻要開(kāi)發(fā)十多個(gè)應(yīng)用,要維護(hù)幾十臺(tái)云機(jī)器,甚至可能是混合云的模式。由于業(yè)務(wù)變化迅速,應(yīng)用需要采用敏捷開(kāi)發(fā),針對(duì)這十來(lái)個(gè)應(yīng)用怎么快速高效無(wú)誤的部署,出現(xiàn)系統(tǒng)異常能快速給出報(bào)警信息,快速定位問(wèn)題并修復(fù)bug后重新部署上線,并且是在不影響線上服務(wù)的基礎(chǔ)上,這對(duì)技術(shù)團(tuán)隊(duì)提出很高的要求。
傳統(tǒng)的開(kāi)發(fā)模式和流程里面,這些工作需要開(kāi)發(fā)人員和運(yùn)維人員一起配合協(xié)作才能完成。但是實(shí)際上的效果不少特別好,因?yàn)殚_(kāi)發(fā)人員對(duì)操作系統(tǒng)優(yōu)化,監(jiān)控報(bào)警并不熟悉,而運(yùn)維人員不懂業(yè)務(wù)邏輯,不懂具體應(yīng)用開(kāi)發(fā)。所以針對(duì)這樣的情況,今年devOPS的概念和具體的實(shí)踐不斷被提出來(lái)。

行業(yè)內(nèi)各巨頭(比如BAT)的自動(dòng)化運(yùn)維架構(gòu)都各種功能各種酷炫,功能復(fù)雜,但是開(kāi)發(fā)工作難度和強(qiáng)度也非常大,需要消耗大量的人力和財(cái)力。那么小團(tuán)隊(duì)就沒(méi)有實(shí)現(xiàn)自己的devOPS了嗎?

答案當(dāng)然是可以實(shí)現(xiàn)的。

筆者在一家小團(tuán)隊(duì),有10幾個(gè)開(kāi)發(fā)人員,管理這幾十臺(tái)服務(wù)器和幾十個(gè)應(yīng)用,在初期代碼的管理、應(yīng)用的構(gòu)建、部署發(fā)布、監(jiān)控等都只能都人肉實(shí)現(xiàn),需要不斷的到處救火,消耗了大量的開(kāi)發(fā)人員的精力。好在有opensource,我們借助開(kāi)源的力量慢慢形成了自己的一套devOPS體系,總體效果還不錯(cuò)。

本文就是總結(jié)筆者在這方面一些經(jīng)驗(yàn)和實(shí)踐,希望對(duì)讀者有幫助。

對(duì)于監(jiān)控和告警,現(xiàn)在市面上監(jiān)控系統(tǒng)很多:Zabbix、Open-Falcon、Prometheus,最終選擇了 Prometheus,因?yàn)镻rometheus生態(tài)強(qiáng)大,功能強(qiáng)大。

Prometheus 簡(jiǎn)介

Prometheus 是一套開(kāi)源的系統(tǒng)監(jiān)控報(bào)警框架。它啟發(fā)于 Google 的 borgmon 監(jiān)控系統(tǒng),由工作在 SoundCloud 的 google 前員工在 2012 年創(chuàng)建,作為社區(qū)開(kāi)源項(xiàng)目進(jìn)行開(kāi)發(fā),并于 2015 年正式發(fā)布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成為受歡迎度僅次于 Kubernetes 的項(xiàng)目。

作為新一代的監(jiān)控框架,Prometheus 具有以下特點(diǎn):

  • 強(qiáng)大的多維度數(shù)據(jù)模型:

  • 插件多,想要監(jiān)控什么,基本都會(huì)有現(xiàn)成的插件。

  • 易于管理: Prometheus server 是一個(gè)單獨(dú)的二進(jìn)制文件,可直接在本地工作,不依賴于分布式存儲(chǔ)。

  • 高效:平均每個(gè)采樣點(diǎn)僅占 3.5 bytes,且一個(gè) Prometheus server 可以處理數(shù)百萬(wàn)的 metrics。

  • 使用 pull 模式采集時(shí)間序列數(shù)據(jù),這樣不僅有利于本機(jī)測(cè)試而且可以避免有問(wèn)題的服務(wù)器推送壞的 metrics。

  • 可以采用 push gateway 的方式把時(shí)間序列數(shù)據(jù)推送至 Prometheus server 端。

  • 可以通過(guò)服務(wù)發(fā)現(xiàn)或者靜態(tài)配置去獲取監(jiān)控的 targets。

  • 有多種可視化圖形界面。

  • 易于伸縮。

需要指出的是,由于數(shù)據(jù)采集可能會(huì)有丟失,所以 Prometheus 不適用對(duì)采集數(shù)據(jù)要 100% 準(zhǔn)確的情形。但如果用于記錄時(shí)間序列數(shù)據(jù),Prometheus 具有很大的查詢優(yōu)勢(shì),此外,Prometheus 適用于微服務(wù)的體系架構(gòu)。


Prometheus技術(shù)架構(gòu)圖.png

Prometheus基本原理

Prometheus的基本原理是通過(guò)HTTP協(xié)議周期性抓取被監(jiān)控組件的狀態(tài),任意組件只要提供對(duì)應(yīng)的HTTP接口就可以接入監(jiān)控。不需要任何SDK或者其他的集成過(guò)程。這樣做非常適合做虛擬化環(huán)境監(jiān)控系統(tǒng),比如VM、Docker、Kubernetes等。輸出被監(jiān)控組件信息的HTTP接口被叫做exporter 。目前互聯(lián)網(wǎng)公司常用的組件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系統(tǒng)信息(包括磁盤、內(nèi)存、CPU、網(wǎng)絡(luò)等等)。

用Ansible 來(lái)Prometheus安裝

Ansible是一個(gè)自動(dòng)配置管理工具,本文先不介紹了,以后有空再來(lái)做下介紹,ansible也是小團(tuán)隊(duì)搭建devOPS的利器。
使用 Ansible 作為部署工具的一個(gè)好處是太多現(xiàn)成的 role 了,安裝 Prometheus 時(shí),筆者使用的是現(xiàn)成的:

安裝所需各種exporter

比如需要采集操作系統(tǒng)系統(tǒng),需要安裝node_exporter,當(dāng)然安裝exporter也可以用ansible來(lái)實(shí)現(xiàn)。

安裝和配置監(jiān)控可視化Grafana

Grafana是用于可視化大型測(cè)量數(shù)據(jù)的開(kāi)源程序,它提供了強(qiáng)大和優(yōu)雅的方式去創(chuàng)建、共享、瀏覽數(shù)據(jù)。
Dashboard中顯示了你不同metric數(shù)據(jù)源中的數(shù)據(jù)。
Grafana最常用于因特網(wǎng)基礎(chǔ)設(shè)施和應(yīng)用分析,但在其他領(lǐng)域也有用到,比如:工業(yè)傳感器、家庭自動(dòng)化、過(guò)程控制等等。
Grafana支持熱插拔控制面板和可擴(kuò)展的數(shù)據(jù)源,目前已經(jīng)支持Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus等。
具體安裝比較簡(jiǎn)單,參照官網(wǎng)安裝即可。
安裝結(jié)束后登錄,默認(rèn)用戶名密碼admin、admin

添加一個(gè)數(shù)據(jù)源


配置prometheus數(shù)據(jù)源.png

導(dǎo)入的模板會(huì)看到已經(jīng)有各種圖,下圖筆者所在公司導(dǎo)入的node_exporter的監(jiān)控圖


屏幕快照 2019-08-14 22.58.15.png

好了,有了監(jiān)控?cái)?shù)據(jù)后,我們就可以對(duì)數(shù)據(jù)進(jìn)行可視化了,是不是很黑科技呢?并且告訴你這些監(jiān)控圖是可以隨意定制的哦!
可是,我們不可能 24 小時(shí)盯著屏幕看 CPU 負(fù)載有沒(méi)有超吧?這時(shí)候就要上告警了。由于篇幅原因,下篇來(lái)說(shuō)說(shuō)告警(http://www.lxweimin.com/p/0dbece52b488)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容