国产粉嫩无码不卡在线观看,酒店大战丝袜高跟鞋人妻,特级精品毛片免费观看,欧美亚洲日本国产综合在线

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

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

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

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

作者簡介:

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

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

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

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

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

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

由于入門簡單、語法精煉、功能庫豐富,Python在計(jì)算機(jī)領(lǐng)域漸漸成為了一種通用語言,無論是應(yīng)用、平臺還是工具,哪個(gè)沒有Python的API接口或是SDK呢?這正說明了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ū)別

我們先來看看Python 2和Python 3 之間的主要區(qū)別,參見下表。更多新特性請參考: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)入

相對導(dǎo)入

絕對導(dǎo)入

源文件編碼

Ascii

utf8

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

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

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

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

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

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

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

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

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

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

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

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

事實(shí)上Python 2的最新版本Python 2.7和Python 3的差異不超過10%,可以說是比較小的,另外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開始學(xué)習(xí),不要使用Python 2.7以前的版本。

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

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

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

  • 熟悉__future__庫。

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

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

開發(fā)一個(gè)簡單的監(jiān)控平臺

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

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

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

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

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

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

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

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

服務(wù)器端

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

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

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

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

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

我的方法是將所有監(jiān)控信息全部寫入MongoDB這樣的NoSQL數(shù)據(jù)庫,無論是在可擴(kuò)展性還是性能上,它們都能應(yīng)對當(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通過HTTP Server的方式啟動,然后監(jiān)聽客戶端的POST數(shù)據(jù),接收到數(shù)據(jù)后以服務(wù)器本地時(shí)間為基準(zhǔn),打上監(jiān)控?cái)?shù)據(jù)的時(shí)間戳后存入MongoDB,并以主機(jī)名為依據(jù),直接進(jìn)行分表。

客戶端

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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