【一】從0開始,用flask+mongo打造分布式服務器監控平臺

      網友投稿 936 2025-03-31

      在前面一篇文章《 Python 系統資源信息獲取工具,你用過沒?》中,我們學習了如何使用 Python 中的第三方庫 psutil 來獲取系統的資源信息,比如 cpu 占用率、內存使用情況、硬盤以及進程情況等。并且奎因在文章的末尾還大言不慚、信誓旦旦的說可以用 psutil 打造一個分布式服務器監控平臺

      德萊厄斯:哼!好大的口氣!!!

      我們翻翻舊帳,看看 奎因 上一篇文章末尾說的分布式服務器監控平臺是什么:

      德萊文:德瑪西亞的人為什么要打造這么一個監控平臺呢?莫非有什么陰謀?

      項目開始之前的故事

      現在 奎因 的手上有 N 臺 Linux 服務器,上面部署了很多的爬蟲以及爬蟲依賴的服務,德瑪西亞陣營 希望 奎因 能夠盡量節省開銷,畢竟上次跟 諾克薩斯 一戰之后軍費就很緊張。奎因 臨危受命, 負責爬蟲項目的優化。

      但是在必須在優化之前,記錄服務器上的資源峰值以及對應的爬蟲進程數,以估算爬蟲數量與資源消耗量的關聯關系。市面上的服務器監控平臺很多,而且功能強大無比,為什么 奎因 要自己打造,而不用現成的呢?

      這個項目的需求并不大、也不復雜,而且定制化程度較高,如果使用成熟的服務器監控平臺未免也太浪費了,而且需要頻繁的記錄服務器峰值情況,恐怕還得更改代碼 -- 奎因 考慮到這些問題,心中覺得不如重寫來的實在,畢竟只有造輪子,才能夠進步得更快。

      造一個什么樣的輪子

      上面的項目圖是在假設需求的情況下制作的,但是現在有了真正的需求,那么就應該將上面圖的進行調整和細化,想到這里,奎因不禁皺了皺眉頭:要是 華洛 在這里就好了,至少還有個可以商量的人,但是 華洛 被派出去執行任務,奎因 也只好自己操刀了:

      首先,這個模塊完成的任務是獲取服務器資源信息,包括當前 cpu、內存和磁盤的占用率以及當前 python (因為爬蟲是 python 編寫的,所以監控 python 進程信息)相關進程的列表,它的名字似乎不太合適,應該改為 系統資源信息獲取模塊。

      然后在存儲中心這里,redis 似乎不太適合,如果要用 nosql 的話,mongodb 可能更適合。而且還要考慮分布式的問題。 奎因 心中很清楚,分布式不過是使用一個中心存儲,將不同端的數據共同存儲在數據中心而已,那么這就衍生了三種情況:

      A).對等分布式 -- 每臺服務器上的代碼都一樣,功能也都相同

      B).主從分布式之推模式 -- 多臺從機將數據推給主機,由主機負責存儲和其他操作。

      C).主從分布式之拉模式 -- 由主機主動向從機索要數據,形象的理解為拉。

      奎因 腦海中閃過一個很形象的畫面:

      這不就是早上他去 召喚師峽谷 打野時候路過的 三狼 米粉店門口的貼紙嗎,太適合這個場景了!

      推模式與拉模式的選擇

      推與拉,看似方向相同,但是卻需要不同的操作(你能夠說 紅 Buff 和 ?藍 Buff 一樣嗎?)。

      首先要考慮的是主機所在的環境,如果主機不在公網當中,而從機都在公網中(比如阿里云服務器),這個情況下主機可以訪問從機,但是從機卻無法訪問主機,推拉模式當中的 推 顯然是不適用的,反之亦然。

      奎因 咨詢了峽谷先鋒,得知目前 德瑪西亞陣營 的服務器中主機不在公網,而從機都在公網,所以很適合 拉 模式。根據經驗得出,拉 模式在代碼中的表現通常是主機 request.get(從機)。

      所以,存儲中心只需要提供給主機即可,從機不需要訪問到存儲中心,那么圖就可以改為:

      警報中心

      奎因 是一名優秀的戰士,甚至警報的重要性,這么大的項目怎么能沒有警報功能呢?

      泰隆:就算你再小心也沒有用!

      根據以往對抗 諾克薩斯 的經驗,他們的人都比較實在而且又猛又蠢,所以警報中心需要即時又準確,那么警報中心就分為兩部分:發現警情和通知。也就是閾值檢測以及郵件發送功能

      數據處理與可視化

      要讓大家相信,必須拿出真憑實據,所以數據的處理與可視化是必不可少的,但是由于 華洛 外出執行任務,所以對于數據的呈現這部分 奎因 也沒有什么頭緒,那就暫且保留原樣吧。

      所以整個服務器信息監控平臺的結構圖如下:

      臨陣磨槍

      既然已經規劃好了,那么差不多就可以開始動工了。奎因 最擅長使用的就是工具,他擁有有整個聯盟最強的弓弩,必定知道工具選擇的重要性。

      既然這是一個平臺,那么就需要 WEB 服務作為支撐,縱觀 Python 領域,最受歡迎的莫過于 Django 和 Flask,由于項目并不大,而且要求輕量、快速,所以 奎因 選擇了他從未使用過的 Flask restful 點擊前往文檔。

      剛才探討到數據存儲中心,那就選定 Mongodb,但是為了快速開發,還需要選定一個能夠將 Flask 和 Mongodb 連接在一起的中間工具。目前有幾種可以選擇:

      A).Pymongo -- mongodb 的 Python 連接庫

      B).Flask-pymonggo -- 在 A 的基礎上封裝了一層

      C).MongoEngine -- 一個成熟的 Mongodb ORM 框架

      三種都是可以完成任務的,華洛 曾經跟 奎因 ?說過:從速度、代碼結構完整性、易用性以及可維護性幾個方面來考慮的話,ORM 當然是最合適的,所以這里選擇 MongoEngine 點擊前往文檔

      雖然 Flask restful 和 MongoEngine 是 奎因 之前很少接觸的工具,但是 奎因 相信 華洛 的推薦,也相信自己的快速學習能力

      最重要的能力

      奎因 經歷過大大小小幾百場戰斗,無論是對陣強大的 諾克薩斯陣營 還是召喚師峽谷出沒的那些 怪物,心里深知:你永遠無法學會所有的知識,但是如果你學會了如何快速學習,那么你就會變得很強。

      開始

      經過上面的分析和規劃 『項目似了然于胸 ?又飄渺于峽谷之中』

      奎因: 動手吧!

      工具的安裝

      如果你真的從 0 開始,那么所有的學習都可以從官方文檔開始。相比那些流傳在峽谷和迷霧中的謠言(筆者指的是網上胡亂抄襲的斷頭文章),官方文檔當然是更可靠的選擇,就像 奎因 選擇與 華洛 并肩作戰一樣。

      根據 Flask restful 文檔

      和 MongoEngine

      以及 Mongodb 文檔

      的安裝介紹

      Mongodb 可視化工具 Robt 3T

      的安裝介紹

      由于有官方文檔,所以奎因很快就將他們安裝好了

      運行 Flask

      Flask restful 文檔中的 快速開始 部分,給出了一個簡單的示例代碼,我們可以通過這段代碼來啟動 Flask。當然 奎因 從來都不會這么做,因為直接復制粘貼文檔是不可能快速學習的,必須立即將文檔轉為自己的知識:

      from?flask?import?Flask?from?flask_restful?import?Resource,?Api?app?=?Flask(__name__)?api?=?Api(app)?class?Home(Resource):??????????def?get(self):?????????return?{'status':?'success',?'message':?'Flask?restful?is?running'}?api.add_resource(Home,?'/')?if?__name__?==?'__main__':?????#?崔慶才丨靜覓、韋世東丨奎因?邀請你關注微信公眾號【進擊的Coder】?????app.run(debug=True)?復制代碼

      然后我們運行代碼

      得到 Flask 已經啟動的提示信息,接著我們可以點擊鏈接,到瀏覽器上看一看輸出了什么內容:

      如代碼所寫,正確輸出了剛才的內容,說明適當的改動是可以的,不怕不怕。

      Flask 與 MongoEngine

      通過 MongoEngine 文檔 Connecting to MongoDB 部分的介紹:

      【一】從0開始,用flask+mongo打造分布式服務器監控平臺

      我們很快就學會了如何用代碼連接 Mongodb 數據庫(將剛才的代碼改為):

      from?flask?import?Flask?from?flask_restful?import?Resource,?Api?from?mongoengine?import?*?connect(?????host='mongodb://localhost/server_resource'?)?app?=?Flask(__name__)?api?=?Api(app)?class?Home(Resource):?????def?get(self):?????????return?{'status':?'success',?'message':?'Flask?restful?is?running'}?api.add_resource(Home,?'/')?if?__name__?==?'__main__':?????#?崔慶才丨靜覓、韋世東丨奎因?邀請你關注微信公眾號【進擊的Coder】?????app.run(debug=True)?復制代碼

      數據模型

      數據模型可以讓我們很輕松的操作數據庫,而且還能夠保證代碼的整潔性和美觀程度 -- 就像士兵總喜歡將自己的武器擦亮一樣 奎因 就經常這么做。

      文檔 上面清楚的寫著應該如何建立數據模型,并且用一些例子告訴我們字段的設置和定義應該如何選擇。

      我們現在想一想,需要定義哪一些數據模型呢?

      首先,回到那個推拉的模式,我們已經確定使用 拉 模式(不是龍龜 拉莫斯 ),所以意味著主機要從從機上拉取數據,主機如何在數據記錄中確定數據到底是來自于哪一臺從機呢?

      所以,我們需要一個服務器隊列,隊列中記錄了從機的名稱、ip 地址以及備注信息等,那么數據模型就可以定義了。

      在代碼中新增一個數據模型類:

      class?ResourceModel(Document):?????"""?服務器隊列模型?"""?????name?=?StringField(max_length=255,?required=True)?????address?=?StringField(max_length=160,?required=True)?????description?=?StringField(max_length=255)?復制代碼

      運行代碼后,你就可以打開 Mongodb 可視化工具,查看新生成的 Collection 了。

      小結

      除了編寫代碼之外,開發項目過程中的需求分析、規劃以及技術手段確認也是非常重要的,今天我們的學習就先到這里,因為 ?奎因 要外出執行任務了

      下一次我們再完善這個分布式多機的監控平臺

      分布式 Python Flask 云數據庫 GaussDB(for Mongo) 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何刪除不要的頁面(電腦上如何刪除不要的頁面)
      下一篇:ModelArts域適應算法EfficientMixGVB
      相關文章
      亚洲精品A在线观看| 丰满亚洲大尺度无码无码专线| 亚洲高清免费视频| 亚洲三级在线观看| 亚洲一区二区三区四区视频| 亚洲国产精品无码久久久| 亚洲精品不卡视频| 亚洲春色在线观看| 亚洲宅男天堂a在线| 亚洲另类精品xxxx人妖| 亚洲制服在线观看| 亚洲人成小说网站色| 亚洲另类自拍丝袜第五页| 亚洲国产精品美女久久久久| 亚洲乱亚洲乱妇24p| 亚洲s码欧洲m码吹潮| 男人的天堂av亚洲一区2区| 337p日本欧洲亚洲大胆人人| 一本久久综合亚洲鲁鲁五月天| 亚洲av无码成人精品区在线播放| 亚洲成人影院在线观看| 亚洲人午夜射精精品日韩| 国产亚洲精品自在线观看| 亚洲成色在线综合网站| 亚洲无删减国产精品一区| 亚洲午夜成激人情在线影院 | 91麻豆国产自产在线观看亚洲 | 亚洲不卡视频在线观看| 亚洲日本乱码卡2卡3卡新区| 亚洲 日韩 色 图网站| 久久亚洲欧美国产精品| 亚洲成a人一区二区三区| 亚洲熟妇无码八AV在线播放| 亚洲成人在线网站| 亚洲中文无码av永久| 亚洲av永久无码精品网址| 亚洲乱码国产一区网址| 亚洲AV无码乱码在线观看富二代| 亚洲综合激情六月婷婷在线观看| 亚洲精品123区在线观看| 色欲色欲天天天www亚洲伊|