Github: github.com/midwayjs/pa…, 歡迎 PR、Issue 和 Star.javascript
Pandora.js 阿里巴巴產出的一個Node.js 應用監控管理器,可讓您對本身的 Node.js 應用瞭若指掌,咱們的目標就是讓應用可管理、可度量、可追蹤。html
咱們自 2014 年開始使用 Node.js 並參與運維工做,Pandora.js 是淘寶 Midway 團隊這些年對企業環境 Node.js 運維監控的一個沉澱與總結。在發展的過程當中,咱們大量使用了社區的開源軟件,此次 Pandora.js 的開源是對社區的回饋。但願 Pandora.js 能讓 Node.js 更好的應用在專業的商業場景上,給予它更好的基礎監控運維能力去服務大規模商業場景。java
同時,這也是阿里巴巴開源的第一個使用了類型系統的 Node.js 軟件。它使用的是 TypeScript,爲 Pandora.js 帶來了史無前例的邏輯健壯性。node
歡迎您來體驗,同時更歡迎您基於 Pandora.js 建構您的 Node.js 運維基礎設施。git
就像前面提到的同樣,Pandora.js 是一個 Node.js 應用監控管理器。它集成了多種類型的能力諸如:監控、鏈路追蹤、調試、進程管理等等。一個一個講太過凌亂,這裏分爲幾個大範疇:github
上面提到的所有能力和數據,所有經過 RESTFul 接口或文本日誌透出,您能夠輕鬆的將其集成進您的監控管理系統(爲了更好的配套,在不遠的未來咱們也會將咱們的私有監控管理平臺開源)。npm
這樣的歸納仍是有些枯燥與難以理解,接下來會經過 Pandora.js dashboard 的界面介紹幾個主要特性,Pandora.js dashboard 是一個與 Pandora.js 相配套的單機可視化儀表。而後在文章的最後是一個能夠跑起來的例子~json
鏈路追蹤是第一個要介紹的重量級特性,能夠追蹤每一個業務請求的全過程,在運行時直觀的看出接口或頁面慢在哪裏、錯在哪裏、超時在哪裏。api
聽上去很厲害的樣子,但實際使用起來很簡單。您只須要簡單的使用 Pandora.js 來啓動您的應用,而後打開 Pandora.js dashboard 就能夠看到您的業務鏈路的所有細節:promise
輕鬆識別慢鏈路和錯誤鏈路
調用了,哪裏耗時多,一目瞭然
Pandora.js 爲您默認提供了近百項開箱即用的默認監控指標,讓您輕鬆的開始監控您的應用。
默認提供了,Node.js Runtime 指標,操做系統指標,HTTP Incoming 指標等等。
Node.js 指標,包含大量運行時指標
操做系統指標,包含 Load、CPU、內存、磁盤、網絡、TCP 等各類指標
應用運行在生產環境,咱們有太多想要知道和觀察的數據了。以往咱們都是寫不少日誌文件,查看分析十分麻煩。Pandora.js 的 Metrics 提供了 Gauge(瞬時)、Counter(計數)、Meter(流速)、Histogram(直方圖) 等多種度量類型,您能夠輕易地完成大部分的應用或業務指標。
下面是一個例子:
根據 Email 去 Gravatar 獲取用戶的 Profile。而後我想統計有多少次成功了,多少次失敗了。(這個例子在文章後面有附上)
const {MetricsClientUtil} = require('dorapan'); // dorapan 是 pandora 的一個客戶端 sdk
const client = MetricsClientUtil.getMetricsClient(); // 得到 Metrics 客戶端
// 建立兩個 Counter (計數)類型的指標
const successCounter = client.getCounter('custom', 'custom.gravatar.success');
const failCounter = client.getCounter('custom', 'custom.gravatar.fail');
// ...此處省略若干代碼
const userAvatars = {};
const promises = [];
for(const user of rows) {
const profileUrl = gravatar.profile_url(user.email);
promises.push(urllib.request(profileUrl, {
followRedirect: true, dataType: 'json'
}).then((res) => {
if(typeof res.data === 'object') {
successCounter.inc(1);
userAvatars[user.email] = res.data;
} else {
failCounter.inc(1);
}
}));
}
await Promise.all(promises);
複製代碼
能夠看到 Metrics 中已經出現了 Custom 分組:
固然還有更多的 Metrics 類型能夠實踐,請具體參見文檔。
這個例子的演示依賴兩個部件:
您最好在 Linux 系統安裝,同時 Pandora.js 依賴 Node.js >= 8.0.0 (也就是當前的 LTS 版本。咱們在 macOS 上指標有部分實現也能夠。若是您是 Windows 用戶的話,我只能說歡迎 PR)。
$ npm i pandora -g
複製代碼
安好後您會得到一個 pandora 命令。
$ npm i pandora-dashboard -g
複製代碼
而後您就能夠啓動 Pandora.js dashboard 了。
$ pandora start --name dashboard `pandora-dashboard-dir`
複製代碼
上面有個 command substitution pandora-dashboard-dir
,它是 Pandora.js 注入的一個全局命令。用來輸出 Pandora.js dashboard 的目錄,而後 Pandora.js 會把它當成一個普通的項目來啓動。
安裝完 Dashboard 以後打開 http://127.0.0.1:9081
,您能夠看到 Dashboard 這個應用,這就是 Pandora.js dashborad 本身。
我找到一個 Node.js 的 簡單 MySQL CRUD 的例子來進行接下來的演示。固然我爲了演示還作了一些修改。示例項目在 Github,Clone 它您也能夠跑跑試試看。
在這個例子裏主入口爲 server.js
,在項目根目錄運行下面的命令來初始化。
$ pandora init server.js
? Which type do you like to generate ? (Use arrow keys)
fork
❯ cluster
複製代碼
我選擇了 Cluster,不過您能夠選擇任意一個,這兩個選項的行爲就像 PM2 同樣。Fork 簡單拉起 server.js ,而 Cluster 則用 Node.js 的 Cluster 模塊啓動 server.js (即 Master / Worker 模型)。
在初始化完後,將會生成一個 procfile.js
文件。這個文件用來定義項目結構,就像 PM2 的 Process file 同樣。其實 procfile 就是 Process File 的簡寫。
而後咱們運行 pandora start
來啓動應用:
$ pandora start
Starting rest-crud at /xx/xxx/rest-crud
rest-crud started successfully! Run command [ pandora log rest-crud ] to get more information
複製代碼
先放問下 http://127.0.0.1:300/api/user
查看下簡單的 CRUD 例子,稍微作點操做。
而後讓咱們無視 Run command [ pandora log rest-crud ]
這個提示,直接打開 http://127.0.0.1:9081/
,而後您將看到:
點擊 Standard Output
按鈕來查看控制檯輸出:
點擊 Trace
查看全部的鏈路:
點擊 Metrics
查看全部的 Metrics 指標:
Node.js 應用在運維方面依舊仍是很薄弱,Pandora.js 所作的也只是一點點工做,幫忙開發者更加了解本身的應用,在問題來臨時,再也不迷惘,再也不慌亂。
四年間,咱們看到了 Node 的興起,工具鏈的完善,也看到了應用場景的萎縮,產品的各類迭代和意外,唏噓之餘,依舊得作好份內之事,讓 Node 在部門,在集團,乃至在業界都能有一些成長和突破,同時讓本身看清和選擇一條路,堅決的走下去。
最後,再一次歡迎您來體驗,嘗試基於 Pandora.js 來建構您的 Node.js 運維基礎設施,讓天下沒有難管理的應用。