PM25 - 開源Node服務器監控平臺

jopen 8年前發布 | 44K 次閱讀 PM25

NodeJS服務監控報警系統的核心實現和開源共建

  1. 建設服務監控系統的初衷和歷程
  2. 核心實現思路及實際應用
  3. 現有功能點介紹和路線圖
  4. 代碼半開源的目的、愿景
  5. 開源代碼的結構和部署拓撲圖
  6. 項目開發者的個人介紹
  7. </ol>

    建設服務監控系統的初衷和歷程

    隨著基于NodeJS前后端分離方案的推行,前端的開發模式和角色也在發生著悄無聲息的變化,而今NodeJS的開發儼然已經成為我們日常工作中的一部分,前端工程師與服務端、運維都有了更多的交集,但隨著業務和項目的擴張,生產環境Node服務也在不斷增多,如何對這些服務的運行狀態和各項指標了如指掌是當前我們大家共同遇到的挑戰。

    我的初衷是建立一個專門針對NodeJS的服務監控平臺,它能夠支持服務集群的統一管理和多用戶登錄,旨在幫助團隊的開發者、架構人員以及管理者能夠直觀的觀察線上各個服務的實時狀態,并能夠幫助開發者及時發現線上服務的異常情況(比如內存泄露、服務崩潰重啟、慢路由等)。

    PM2是一款非常優秀的Node進程管理工具,它有著豐富的特性:能夠充分利用多核CPU且能夠負載均衡、能夠幫助應用在崩潰后自動重啟、能夠監控資源的使用情況并且支持API方式查看、并且有配套的Keymetrics可以用于服務的監控。相信不少開發者都在使用PM2部署自己的NodeJS應用,起初也曾嘗試使用Keymetrics,但Keymetrics是一款商業服務且價格不菲,雖有兩臺服務器的免費配額但對于有著眾多服務器的團隊或者公司而言無異于杯水車薪,而且對于國內的大公司而言都會考慮到自身的數據敏感性不希望服務的運行狀態接入到第三方平臺中,當然如果你的服務器數量很少,又或者能夠支付昂貴的使用費用,而且無需關心數據的安全問題依舊推薦可以使用Keymetrics,畢竟它是PM2的開發者的開發和維護,而且功能特性也很豐富。

    但我遇到的場景是如何實現一套通用的監控系統,它能夠獨立部署而且方便進行擴展和定制化,顯然在現階段使用Keymetrics不是十分明智的決定,于是便想到利用PM2的API進行服務監控,但API的方式不利于多臺機器的統一管理和聚合,而且通過API的方式會將服務的詳細信息泄露到外網,有一定的安全隱患。之后便開始設想是否能夠基于PM2進行一些二次開發,實現一個核心功能并具備一定定制性的系統(類似Keymetrics),一方面可以為整個行業的Node推廣起到一定的積極作用,一方面能夠確實幫助到我們團隊的服務運維。我將這個項目命名為PM25,意即基于PM2的基礎設施多做了一點,僅此而已別無他意。

    現有功能點介紹和路線圖

    • 支持用戶的管理(登錄作為中間件)
    • 被監控機器的分桶管理
    • 機器列表、快速過濾和主機的指標信息(進程數、CPU數、負載、上線時長、內存占用)
    • 進程的詳細指標信息(PID、進程名、重啟次數、上線時長、狀態、CPU占用、內存占用、錯誤日志)
    • 同Falcon整合,支持監控報警管理(核心指標同步Falcon,可以查看歷史圖表或者配置監控報警)
    • 支持擴展包,引入擴展包后可以收集統計服務端慢路由信息
    • 支持進程的遠程控制,可以在云端對進程進行遠程操作(比如重啟、重載)

    代碼開源的目的、愿景

    我的初衷很簡單,一方面能夠把自己在工作之余的貢獻拿出來和行業分享,也希望綿薄之力能夠對行業的Node推廣起到一些作用,反過來也希望行業內的濟濟人才能夠參與到它的建設中來,基于我目前的成果和代碼進行更多的功能開發和細節完善,把大家對Node的熱忱和對PM25的建設形成合力為行業帶來一些影響或是價值,代碼托管于Github,項目地址為PM25.io

    開源代碼的組成結構

    ├── PM2.5-Cli           // PM25 CLI
    ├── PM2.5-Cloud         // PM25 云端控制臺
    ├── PM2.5-Service       // PM25 服務端代碼
    ├── PM2.5-Docs          // PM25 文檔
    └── PM2.5-Ext           // PM25 擴展包

    數據庫組成和分表結構

    ├── pm25                // 主庫,用于監控主機的信息存儲
    │   ├── buckets         // 桶表,用于存儲主機分桶信息
    │   ├── events          // 事件表,用于存儲主機的事件信息
    │   ├── exceptions      // 錯誤異常表,用于存儲主機的線上報錯
    │   ├── monitorings     // 監控信息表,用于存儲主機的整體監控數據
    │   ├── status          // 主表,用于存儲主機的各個進程數據
    │   └── transactions    // 網絡傳輸表,用于存儲慢路由相關信息
    ├── pm25-session        // 會話信息庫,用于存儲SSO登錄后的用戶會話
    │   └── sessions        // 會話信息主表,用于存儲用戶會話詳情
    ├── pm25-test           // 測試表,用于開發過程中的測試

    部署拓撲圖

    使用截圖

    項目作者的個人背景介紹

    郭凱,工作狂、強迫癥,崇尚工匠精神,全棧工程師,翻譯作品有《編寫可維護的JavaScript》、《第三方JavaScript編程》。開源項目有InJuicerjSQL、以及開源前端技術社區F2E等,歡迎關注我的微博個人博客、或者加入前端技術社區,隨時同我進行技術交流。


    項目地址: https://github.com/PaulGuo/PM25

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!