亚洲熟妇av一区二区三区,久久久久久精品观看sss,免费观看四虎精品国产永久,国产成人精品一区二三区熟女,天堂网在线最新版www资源网

用 Python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái)(用 python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái))

【原創(chuàng)】 2018-01-22 郭宏澤 高效運(yùn)維

用 Python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái)(用 python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái))

用 Python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái)(用 python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái))

作者簡(jiǎn)介:

用 Python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái)(用 python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái))

郭宏澤,現(xiàn)任為勝科技技術(shù)總監(jiān),高級(jí)咨詢師,IT解決方案專家。擁有12年IT行業(yè)工作經(jīng)驗(yàn),其中有8年一線運(yùn)維經(jīng)驗(yàn),4年運(yùn)維開(kāi)發(fā)經(jīng)驗(yàn),曾就職于易車網(wǎng)、電信云計(jì)算、跟誰(shuí)學(xué)等公司。開(kāi)發(fā)過(guò)日志分析系統(tǒng)、CDN流量計(jì)費(fèi)結(jié)算系統(tǒng),自動(dòng)化容器管理平臺(tái)等。精通Linux相關(guān)技術(shù)及Python、Shell、JavaScript等語(yǔ)言?,F(xiàn)任多家大型公司咨詢顧問(wèn),已幫助IBM、惠普、朗訊等多家跨國(guó)公司進(jìn)行容器化及DevOps轉(zhuǎn)型。

AdminSet開(kāi)源運(yùn)維平臺(tái)創(chuàng)建者,DevOps Master,全球運(yùn)維大會(huì)金牌講師,高效運(yùn)維社區(qū)核心成員。

Python是一個(gè)浩瀚如煙的曠闊領(lǐng)域,有著豐富的應(yīng)用場(chǎng)景,業(yè)務(wù)系統(tǒng)、云計(jì)算、大數(shù)據(jù)、人工智能都有Python的身影。

Python是一個(gè)易于學(xué)習(xí)的語(yǔ)言,是一個(gè)以簡(jiǎn)潔實(shí)用為宗旨的語(yǔ)言,我在以前的工作中接觸過(guò)PHP、C#、Java等語(yǔ)言,但當(dāng)我第一次看到Python的時(shí)候,有一種相見(jiàn)恨晚的感覺(jué),心里冒出一句話“就它了”。

Python的興起是由于云計(jì)算時(shí)代的來(lái)臨,當(dāng)IaaS逐漸成熟、PaaS百花齊放的時(shí)代到來(lái)時(shí),Python終于迎來(lái)了它的黃金時(shí)代。

由于入門簡(jiǎn)單、語(yǔ)法精煉、功能庫(kù)豐富,Python在計(jì)算機(jī)領(lǐng)域漸漸成為了一種通用語(yǔ)言,無(wú)論是應(yīng)用、平臺(tái)還是工具,哪個(gè)沒(méi)有Python的API接口或是SDK呢?這正說(shuō)明了Python的實(shí)力。正因?yàn)檫@些原因,Python在DevOps領(lǐng)域成為一種標(biāo)準(zhǔn),而且不可替代。

如何選擇Python版本

Python目前有兩個(gè)主流版本,Python 2和Python 3,而且都在維護(hù)更新,且這兩個(gè)版本互不兼容。

Python 2和Python 3的區(qū)別

我們先來(lái)看看Python 2和Python 3 之間的主要區(qū)別,參見(jiàn)下表。更多新特性請(qǐng)參考:https://docs.python.org/3/whatsnew/3.0.html。

Python 2

Python 3

Print 變函數(shù)

Print“abc”

Print(\”abc\”)

舊式類和新式類

只有新式類

運(yùn)算

1/2=0

1/2=0.5

字符串格式化

%,Format

Format,%

xrange

xrange

Range

long重命名為int

Long,int

Int

包導(dǎo)入

相對(duì)導(dǎo)入

絕對(duì)導(dǎo)入

源文件編碼

Ascii

utf8

從Python社區(qū)官方態(tài)度來(lái)看,官方強(qiáng)烈建議直接學(xué)習(xí)Python 3,因?yàn)镻ython 2只會(huì)維護(hù)到2020年。那么看到這兒,可能你會(huì)覺(jué)得應(yīng)該直接學(xué)習(xí)Python 3了,但實(shí)際上不是這樣,我們必須從Python 2開(kāi)始。

如果我們對(duì)一件事舉棋不定,那么最好看看別人是怎么做的,下圖是Python各版本在2016年7月和8月的下載量統(tǒng)計(jì)圖。

用 Python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái)(用 python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái))

通過(guò)數(shù)據(jù)換算(Y軸是指數(shù)),Python 2.6和Python 2.7的下載量占比超過(guò)90%。數(shù)據(jù)不會(huì)說(shuō)謊,事實(shí)就是當(dāng)前仍然是Python 2主導(dǎo)的世界,Python 2作為大部分應(yīng)用和工具的基礎(chǔ),還會(huì)在相當(dāng)長(zhǎng)的時(shí)間內(nèi)存在。

為什么會(huì)出現(xiàn)這樣的情況呢?原因有三:

  • 技術(shù)的發(fā)展是快的,但是在生產(chǎn)中落地是非常緩慢的。

  • 如果Python 2就能用,為什么非得升級(jí)到Python 3呢。

  • Python 3不是所有操作系統(tǒng)的默認(rèn)解釋器,在系統(tǒng)環(huán)境中使用Python 3會(huì)消耗巨大的成本。

出于實(shí)用主義考慮,如果能用螺絲刀解決的問(wèn)題絕不會(huì)用一個(gè)電鉆來(lái)解決。使用Python的人大多數(shù)是實(shí)用主義者,所以出現(xiàn)了在Python3出現(xiàn)多年以后仍然無(wú)法普及的現(xiàn)象。

如何學(xué)習(xí)Python

Python 2和Python 3還有一種平衡的方法,可以同時(shí)兼容兩個(gè)版本,那就是在Python 2中引用Python的__future__庫(kù)。__future__庫(kù)里面包含了Python 3的大多特性。

從Python 2開(kāi)始學(xué)習(xí),向Python 3演進(jìn),使用Python 2.7版本,利用Python 2.7的語(yǔ)法兼容性,盡量使用Python 2版本和Python 3版本都能兼容的語(yǔ)法,這樣既保證了在現(xiàn)有系統(tǒng)中的兼容性,又為將來(lái)全面向Python 3遷移做好了準(zhǔn)備。

事實(shí)上Python 2的最新版本Python 2.7和Python 3的差異不超過(guò)10%,可以說(shuō)是比較小的,另外Python 2.7已經(jīng)盡可能地彌合了Python 2與Python 3之間的差異,做到了盡可能多地兼容Python 3。

比如在Python 2.7中使用print “hello world”和 print(“hello world”) 兩者都是可以的,但我們應(yīng)該使用后者,以便全面向Python 3版本遷移。

最后給出幾條學(xué)習(xí)建議:

  • 從Python 2.7開(kāi)始學(xué)習(xí),不要使用Python 2.7以前的版本。

  • 了解Python 3棄用的語(yǔ)法和包,在書寫代碼過(guò)程中盡量避免。

  • 不要使有Python 3.5之前的Python 3.x版本。

  • 盡量多地使用Python 2與Python 3相兼容的語(yǔ)法。

  • 熟悉__future__庫(kù)。

  • DevOps工程師應(yīng)主要使用Python 2.7。

  • 業(yè)務(wù)開(kāi)發(fā)工程師可以直接使用Python 3.5。

開(kāi)發(fā)一個(gè)簡(jiǎn)單的監(jiān)控平臺(tái)

監(jiān)控對(duì)運(yùn)維的重要性

“ 因?yàn)槟闶俏业难?,讓我看?jiàn)這世界就在我眼前”,這是一首耳熟能詳?shù)母枨赌闶俏业难邸?。監(jiān)控,對(duì)于運(yùn)維工程師來(lái)說(shuō)就是眼睛,如果沒(méi)有監(jiān)控,運(yùn)維工作就無(wú)從談起;如果沒(méi)有監(jiān)控,運(yùn)維工程師就成了盲人。

一個(gè)良好的監(jiān)控系統(tǒng)可以快速地發(fā)現(xiàn)并定位問(wèn)題,減少宕機(jī)時(shí)間,提高故障處理速度,減輕運(yùn)維工作壓力,甚至可以促進(jìn)家庭和諧。

但是對(duì)于這么重要的系統(tǒng),我發(fā)現(xiàn)很多公司都做的都不好:要么監(jiān)控不到位,很多盲區(qū);要么監(jiān)控過(guò)多,太多無(wú)效條目導(dǎo)致報(bào)警麻木;要么監(jiān)控系統(tǒng)五花八門,工具琳瑯滿目,重復(fù)監(jiān)控,條理不清,等等。

我認(rèn)為產(chǎn)生這些問(wèn)題的原因主要有兩點(diǎn)。其一,人的問(wèn)題,是我們的運(yùn)維工作人員對(duì)監(jiān)控沒(méi)有深刻的認(rèn)識(shí),經(jīng)驗(yàn)不足;其二,工具的問(wèn)題,沒(méi)有得心應(yīng)手的工具,開(kāi)源、閉源,五花八門,難以統(tǒng)籌高效利用及整合。

以前我們習(xí)慣于拿來(lái)主義,有問(wèn)題需要用工具,上網(wǎng)查查別人都在用什么,我也下載一個(gè)試一試,差不多就行了。

但是現(xiàn)在時(shí)代變了,IaaS、PaaS、SaaS的結(jié)構(gòu)越來(lái)越復(fù)雜,對(duì)于運(yùn)維工程師說(shuō)來(lái),必須對(duì)監(jiān)控有深度定制或二次開(kāi)發(fā)的能力才能滿足當(dāng)下的需要。

所以我的建議是,可以考慮自研一套監(jiān)控系統(tǒng),這固然有壓力,但是一旦成功,收益巨大。俗話說(shuō)萬(wàn)事開(kāi)頭難,開(kāi)了頭其實(shí)就不難。我以自己的經(jīng)驗(yàn)來(lái)說(shuō)說(shuō)自寫一套監(jiān)控系統(tǒng)的套路。

服務(wù)器端

前端開(kāi)發(fā)主要會(huì)用到大量的頁(yè)面元素,我建議使用目前開(kāi)源的adminlte,這個(gè)前端框架元素非常豐富,頁(yè)面簡(jiǎn)潔,比較適合作為監(jiān)控系統(tǒng)的基礎(chǔ)頁(yè)面框架。

adminlte本身是基于Bootstrap開(kāi)發(fā)的,對(duì)于我們將來(lái)進(jìn)行深度頁(yè)面定制是非常友好的。圖表庫(kù)內(nèi)置了font awesome和iconic,表單整合了Select2,adminlte幾乎能滿足你的任何要求。

在圖形展示上,建議使用Echarts監(jiān)控圖表(參見(jiàn)下圖),它由百度團(tuán)隊(duì)開(kāi)發(fā)維護(hù),資料文檔非常豐富,在圖形質(zhì)量、異步獲取和加載方面都比較成熟,要把它嵌入到系統(tǒng)中,只需要引入一個(gè)JavaScript包發(fā)即可。

后臺(tái)開(kāi)發(fā)使用Django,主要是快,無(wú)論是Model、FORM、Auth等系統(tǒng),還是在插件中間件的豐富程度、文檔的完善度上,Django都具有絕對(duì)優(yōu)勢(shì)。通過(guò)將平臺(tái)微服務(wù)化,Django本身的速度劣勢(shì)將被彌補(bǔ)。

在監(jiān)控?cái)?shù)據(jù)的設(shè)計(jì)方面,對(duì)資產(chǎn)信息、用戶關(guān)系等的監(jiān)控肯定要使MySQL這種關(guān)系性數(shù)據(jù)庫(kù),但是對(duì)于監(jiān)控條目的處理就得三思而后行了,我見(jiàn)過(guò)很多項(xiàng)目都是把監(jiān)控條目直接丟到MySQL里,導(dǎo)致后期擴(kuò)展困難,數(shù)據(jù)庫(kù)成了監(jiān)控平臺(tái)的巨大瓶頸。

我的方法是將所有監(jiān)控信息全部寫入MongoDB這樣的NoSQL數(shù)據(jù)庫(kù),無(wú)論是在可擴(kuò)展性還是性能上,它們都能應(yīng)對(duì)當(dāng)前海量的監(jiān)控?cái)?shù)據(jù)需求。

然后在服務(wù)端寫一個(gè)獨(dú)立的微服務(wù)接口,負(fù)責(zé)接收客戶端上傳的監(jiān)控信息,然后將數(shù)據(jù)進(jìn)行處理后插入MongoDB,以供前端進(jìn)行數(shù)據(jù)調(diào)用,下面代碼截圖是一個(gè)API插入的示例。

這個(gè)API通過(guò)HTTP Server的方式啟動(dòng),然后監(jiān)聽(tīng)客戶端的POST數(shù)據(jù),接收到數(shù)據(jù)后以服務(wù)器本地時(shí)間為基準(zhǔn),打上監(jiān)控?cái)?shù)據(jù)的時(shí)間戳后存入MongoDB,并以主機(jī)名為依據(jù),直接進(jìn)行分表。

客戶端

客戶端的開(kāi)發(fā)相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,主要引入了requests 進(jìn)行HTTP動(dòng)作的處理,引入了Schedule進(jìn)行定時(shí)上報(bào)和計(jì)劃任務(wù),引入了Psutil進(jìn)行性能信息采集。

客戶端的性能數(shù)據(jù)主要依靠Psutil采集,Psutil有非常豐富的監(jiān)控接口,能夠輕松實(shí)現(xiàn)對(duì)CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤的監(jiān)控。

獲取磁盤信息的函數(shù)截圖如下:

用 Python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái)(用 python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái))

通過(guò)Psutil提供的接口采集性能信息,然后將結(jié)果封裝成一個(gè)Json數(shù)據(jù),使用Requests Post提交到服務(wù)器的API接口中去——一次監(jiān)控過(guò)程就完成了。

監(jiān)控平臺(tái)的通道也就打開(kāi)了,以后監(jiān)控任意條目的套路不過(guò)如此。NPM、中間件監(jiān)控、APM,不都是這樣嗎?采集數(shù)據(jù)、上報(bào)、存盤并展現(xiàn)。

開(kāi)發(fā)規(guī)劃

服務(wù)端、客戶端,數(shù)據(jù)庫(kù)和圖表展現(xiàn)完成之后,一個(gè)簡(jiǎn)單的監(jiān)控平臺(tái)雛形就完成了。這只是一個(gè)開(kāi)始,DevOps的核心思想是持續(xù)學(xué)習(xí)、持續(xù)迭代,在這個(gè)過(guò)程中不斷完善。有了平臺(tái)和架子,我們就可以不斷地添磚加瓦。

  • 對(duì)于硬件監(jiān)控,可以通過(guò)Linux系統(tǒng)命令(比如smartctl、dmidecode等)來(lái)獲取相關(guān)信息。

  • 對(duì)于NPM、CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)和進(jìn)程,可使用Psutil來(lái)完成。

  • 對(duì)于中間件監(jiān)控,比如MySQL、Nginx,可以通過(guò)命令行或是中間件的監(jiān)控接口來(lái)采集數(shù)據(jù)。

  • 對(duì)于某些自定義監(jiān)控,比如監(jiān)控某個(gè)文件大小、某個(gè)目錄的文件數(shù)、某個(gè)文件的屬性,可以用Shell來(lái)完成。

  • 對(duì)于APM、應(yīng)用程序指標(biāo)、函數(shù)調(diào)用、響應(yīng)時(shí)間、業(yè)務(wù)數(shù)據(jù)等,我們可以通過(guò)埋點(diǎn)、API或是JVM嗅探來(lái)完成。

  • 對(duì)于報(bào)警系統(tǒng),可以使用郵件、微信等形式,這個(gè)可以根據(jù)企業(yè)自身的需要來(lái)設(shè)置,都是十幾行代碼即可搞定。

如果我們使用開(kāi)源軟件Cacti Zabbix,在實(shí)現(xiàn)和整合上都會(huì)比較麻煩,很多時(shí)候會(huì)受制于軟件原有的結(jié)構(gòu),二次開(kāi)發(fā)比較麻煩。

所以,我們何不自己寫一個(gè),將所有的控制權(quán)都放在自己手上呢?況且又不是特別難,在開(kāi)發(fā)平臺(tái)的過(guò)程中,你的Python技術(shù)、軟件工程能力都會(huì)有很大的提升,你將能夠快速實(shí)現(xiàn)企業(yè)的需求,而不是跑到社區(qū)去哭訴“給我加個(gè)功能吧”。

Python 開(kāi)發(fā)三十六計(jì):

用 Python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái)(用 python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái))

用 Python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái)(用 python 開(kāi)發(fā)一個(gè)企業(yè)級(jí)的監(jiān)控平臺(tái))

如果您對(duì)其中內(nèi)容表示質(zhì)疑,歡迎指出并發(fā)表意見(jiàn),一經(jīng)采納,您將成為內(nèi)測(cè)版讀者,《DevOps三十六計(jì)》在年末的第一批印刷將在第一時(shí)間送到您的手中。

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。