在當(dāng)前微服務(wù)架構(gòu)流行情況下,對(duì)于初創(chuàng)企業(yè)银受,可能就幾個(gè)技術(shù)(2-20個(gè)不等),但是卻要開發(fā)十多個(gè)應(yīng)用鸦采,要維護(hù)幾十臺(tái)云機(jī)器宾巍,甚至可能是混合云的模式。由于業(yè)務(wù)變化迅速渔伯,應(yīng)用需要采用敏捷開發(fā)顶霞,針對(duì)這十來(lái)個(gè)應(yīng)用怎么快速高效無(wú)誤的部署,出現(xiàn)系統(tǒng)異常能快速給出報(bào)警信息锣吼,快速定位問題并修復(fù)bug后重新部署上線选浑,并且是在不影響線上服務(wù)的基礎(chǔ)上,這對(duì)技術(shù)團(tuán)隊(duì)提出很高的要求玄叠。
傳統(tǒng)的開發(fā)模式和流程里面古徒,這些工作需要開發(fā)人員和運(yùn)維人員一起配合協(xié)作才能完成。但是實(shí)際上的效果不少特別好读恃,因?yàn)殚_發(fā)人員對(duì)操作系統(tǒng)優(yōu)化隧膘,監(jiān)控報(bào)警并不熟悉代态,而運(yùn)維人員不懂業(yè)務(wù)邏輯,不懂具體應(yīng)用開發(fā)疹吃。所以針對(duì)這樣的情況蹦疑,今年devOPS的概念和具體的實(shí)踐不斷被提出來(lái)。
行業(yè)內(nèi)各巨頭(比如BAT)的自動(dòng)化運(yùn)維架構(gòu)都各種功能各種酷炫互墓,功能復(fù)雜必尼,但是開發(fā)工作難度和強(qiáng)度也非常大蒋搜,需要消耗大量的人力和財(cái)力篡撵。那么小團(tuán)隊(duì)就沒有實(shí)現(xiàn)自己的devOPS了嗎?
答案當(dāng)然是可以實(shí)現(xiàn)的豆挽。
筆者在一家小團(tuán)隊(duì)育谬,有10幾個(gè)開發(fā)人員,管理這幾十臺(tái)服務(wù)器和幾十個(gè)應(yīng)用帮哈,在初期代碼的管理膛檀、應(yīng)用的構(gòu)建、部署發(fā)布娘侍、監(jiān)控等都只能都人肉實(shí)現(xiàn)咖刃,需要不斷的到處救火,消耗了大量的開發(fā)人員的精力憾筏。好在有opensource嚎杨,我們借助開源的力量慢慢形成了自己的一套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 是一套開源的系統(tǒng)監(jiān)控報(bào)警框架是嗜。它啟發(fā)于 Google 的 borgmon 監(jiān)控系統(tǒng),由工作在 SoundCloud 的 google 前員工在 2012 年創(chuàng)建油额,作為社區(qū)開源項(xiàng)目進(jìn)行開發(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ù)器推送壞的 metrics辅肾。
可以采用 push gateway 的方式把時(shí)間序列數(shù)據(jù)推送至 Prometheus server 端队萤。
可以通過服務(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基本原理
Prometheus的基本原理是通過HTTP協(xié)議周期性抓取被監(jiān)控組件的狀態(tài)旁钧,任意組件只要提供對(duì)應(yīng)的HTTP接口就可以接入監(jiān)控船殉。不需要任何SDK或者其他的集成過程冒掌。這樣做非常適合做虛擬化環(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)成的:
- prometheus-ansble (https://github.com/cloudalchemy/ansible-prometheus)
不過這ansible role需要linux支持systemd充活,centos6及以下操作系統(tǒng)安裝不了±ⅲ可以采用二進(jìn)制文件安裝的方式混卵。
安裝所需各種exporter
比如需要采集操作系統(tǒng)系統(tǒng),需要安裝node_exporter,當(dāng)然安裝exporter也可以用ansible來(lái)實(shí)現(xiàn)翎蹈。
安裝和配置監(jiān)控可視化Grafana
Grafana是用于可視化大型測(cè)量數(shù)據(jù)的開源程序淮菠,它提供了強(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)化碎赢、過程控制等等。
Grafana支持熱插拔控制面板和可擴(kuò)展的數(shù)據(jù)源速梗,目前已經(jīng)支持Graphite肮塞、InfluxDB、OpenTSDB姻锁、Elasticsearch枕赵、Prometheus等。
具體安裝比較簡(jiǎn)單位隶,參照官網(wǎng)安裝即可拷窜。
安裝結(jié)束后登錄,默認(rèn)用戶名密碼admin涧黄、admin
添加一個(gè)數(shù)據(jù)源
導(dǎo)入的模板會(huì)看到已經(jīng)有各種圖篮昧,下圖筆者所在公司導(dǎo)入的node_exporter的監(jiān)控圖
好了,有了監(jiān)控?cái)?shù)據(jù)后笋妥,我們就可以對(duì)數(shù)據(jù)進(jìn)行可視化了懊昨,是不是很黑科技呢?并且告訴你這些監(jiān)控圖是可以隨意定制的哦春宣!
可是酵颁,我們不可能 24 小時(shí)盯著屏幕看 CPU 負(fù)載有沒有超吧狈孔?這時(shí)候就要上告警了。由于篇幅原因材义,下篇來(lái)說(shuō)說(shuō)告警(http://www.reibang.com/p/0dbece52b488)均抽。