Pandora.jsNode.js 應(yīng)用監(jiān)控管理器
Pandora.js 阿里巴巴產(chǎn)出的一個(gè)Node.js 應(yīng)用監(jiān)控管理器,可以讓您對(duì)自己的 Node.js 應(yīng)用了若指掌,我們的目標(biāo)就是讓應(yīng)用可管理、可度量、可追蹤。
同時(shí),這也是阿里巴巴開源的第一個(gè)使用了類型系統(tǒng)的 Node.js 軟件。它使用的是 TypeScript,為 Pandora.js 帶來(lái)了前所未有的邏輯健壯性。
什么是 Pandora.js
就像前面提到的一樣,Pandora.js 是一個(gè) Node.js 應(yīng)用監(jiān)控管理器。它集成了多種類型的能力諸如:監(jiān)控、鏈路追蹤、調(diào)試、進(jìn)程管理等等。一個(gè)一個(gè)講太過(guò)凌亂,這里分為幾個(gè)大范疇:
-
讓業(yè)務(wù)更易追蹤
-
基于 Open-tracing 實(shí)現(xiàn)了業(yè)務(wù)鏈路追蹤系統(tǒng)。
-
實(shí)時(shí)追蹤每個(gè)請(qǐng)求鏈路,讓每次請(qǐng)求不再是黑盒。在運(yùn)行時(shí)直觀的看出接口或頁(yè)面慢在哪里、錯(cuò)在哪里、超時(shí)在哪里。
-
可以實(shí)時(shí)追蹤多種基礎(chǔ)中間件的用量及錯(cuò)誤,諸如: MySQL、Mongose、Redis 等等。
-
-
讓應(yīng)用更易度量
-
實(shí)現(xiàn)了軟件行業(yè)上通用的 Metrics 系統(tǒng)。
-
自帶多種監(jiān)控指標(biāo)實(shí)現(xiàn),從操作系統(tǒng)指標(biāo)到 Node.js Runtime,從 HTTP QPS 到中間件用量。
-
支持多種監(jiān)控指標(biāo)類型(Metrics 類型),您可以基于這些指標(biāo)類型,輕松地建構(gòu)您的業(yè)務(wù)監(jiān)控指標(biāo)。
-
-
讓系統(tǒng)更加健壯
-
故障演練擴(kuò)展,可以模擬大部分基礎(chǔ)中間件的不可以用狀態(tài)。這是從淘寶多次大促中沉淀下來(lái)的斷網(wǎng)演習(xí)工具。
-
遠(yuǎn)程調(diào)試擴(kuò)展,基于 Dashboard 的能力可以實(shí)時(shí)調(diào)試您的線上進(jìn)程,線上業(yè)務(wù)問(wèn)題不再抓瞎。
-
-
讓應(yīng)用更易管理
-
進(jìn)程管理管理能力,提供了基礎(chǔ)的進(jìn)程守護(hù)和 Cluster 能力。
-
基礎(chǔ)服務(wù)管理能力來(lái)滿足中間件管理等場(chǎng)景,提供了依賴管理和標(biāo)準(zhǔn)的啟停接口。
-
提供了進(jìn)程間通信的基礎(chǔ)能力。
-
上面提到的全部能力和數(shù)據(jù),全部通過(guò) RESTFul 接口或文本日志透出,您可以輕松的將其集成進(jìn)您的監(jiān)控管理系統(tǒng)。
業(yè)務(wù)鏈路追蹤 - Trace
鏈路追蹤是第一個(gè)要介紹的重量級(jí)特性,可以追蹤每個(gè)業(yè)務(wù)請(qǐng)求的全過(guò)程,在運(yùn)行時(shí)直觀的看出接口或頁(yè)面慢在哪里、錯(cuò)在哪里、超時(shí)在哪里。
聽上去很厲害的樣子,但實(shí)際使用起來(lái)很簡(jiǎn)單。您只需要簡(jiǎn)單的使用 Pandora.js 來(lái)啟動(dòng)您的應(yīng)用,然后打開 Pandora.js dashboard 就可以看到您的業(yè)務(wù)鏈路的全部細(xì)節(jié):
輕松識(shí)別慢鏈路和錯(cuò)誤鏈路
調(diào)用了,哪里耗時(shí)多,一目了然
應(yīng)用度量
默認(rèn)的應(yīng)用度量 - Built-in Metrics
Pandora.js 為您默認(rèn)提供了近百項(xiàng)開箱即用的默認(rèn)監(jiān)控指標(biāo),讓您輕松的開始監(jiān)控您的應(yīng)用。
默認(rèn)提供了,Node.js Runtime 指標(biāo),操作系統(tǒng)指標(biāo),HTTP Incoming 指標(biāo)等等。
Node.js 指標(biāo),包含大量運(yùn)行時(shí)指標(biāo)
操作系統(tǒng)指標(biāo),包含 Load、CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)、TCP 等各種指標(biāo)
自定義的應(yīng)用度量 - Custom Metrics
應(yīng)用運(yùn)行在生產(chǎn)環(huán)境,我們有太多想要知道和觀察的數(shù)據(jù)了。以往我們都是寫很多日志文件,查看分析十分麻煩。Pandora.js 的 Metrics 提供了 Gauge(瞬時(shí))、Counter(計(jì)數(shù))、Meter(流速)、Histogram(直方圖) 等多種度量類型,您可以輕易地完成大部分的應(yīng)用或業(yè)務(wù)指標(biāo)。
下面是一個(gè)例子:
根據(jù) Email 去 Gravatar 獲取用戶的 Profile。然后我想統(tǒng)計(jì)有多少次成功了,多少次失敗了。(這個(gè)例子在文章后面有附上)
const {MetricsClientUtil} = require('dorapan'); // dorapan 是 pandora 的一個(gè)客戶端 sdk
const client = MetricsClientUtil.getMetricsClient(); // 獲得 Metrics 客戶端
// 創(chuàng)建兩個(gè) Counter (計(jì)數(shù))類型的指標(biāo)
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 中已經(jīng)出現(xiàn)了 Custom 分組:
當(dāng)然還有更多的 Metrics 類型可以實(shí)踐,請(qǐng)具體參見文檔。
應(yīng)用管理 - 兼容常用的啟動(dòng)模式
Pandora.js 提供了 fork 和 cluster 兩種模式來(lái)啟動(dòng)應(yīng)用,您只需要在初始化時(shí)簡(jiǎn)單選擇:
$ pandora init app.js ? Which type do you like to generate ? (Use arrow keys) fork ? cluster
