Node服務(wù)接入點(diǎn)評Cat監(jiān)控之egg-cat-client插件接入指南


Cat是大眾點(diǎn)評用于對服務(wù)端應(yīng)用進(jìn)行業(yè)務(wù)監(jiān)控的一整套系統(tǒng)谋旦,具體可以直接參考他們的github有非常詳細(xì)的介紹,這里只是單獨(dú)將Node服務(wù)接入Cat的流程整理出來,并介紹了為Egg編寫的客戶端插件egg-cat-client匙监。


系統(tǒng)支持

OSX (>=10.13)
Alpine linux
CentOS 6
CentOS 7
Ubuntu 14.04 LTS
Ubuntu 16.04 LTS
Ubuntu 18.04 LTS

node版本

node v8+

準(zhǔn)備工作

下載Cat代碼到本地
git clone git@github.com:dianping/cat.git
編譯libcatclient動(dòng)態(tài)庫

查看lib/node.js/binding.gyp的c庫依賴新荤,發(fā)現(xiàn)node包的安裝需要依賴一個(gè)lcatclient的動(dòng)態(tài)鏈接庫揽趾,這里需要先編譯出這個(gè)庫并加載到系統(tǒng)中。

{
    "targets": [
        {
            "target_name": "nodecat",
            "sources": [
                "src/nodecat.cc",
            ],
            "include_dirs": [
                "include"
            ],
            "libraries": [
                "-lcatclient"
            ]
        }
    ]
}
  1. 需要安裝一個(gè)支持C99或者C編譯器苛骨,Mac直接安裝Xcode就可以篱瞎。
  2. 需要安裝cmake和make,這個(gè)用來構(gòu)建動(dòng)態(tài)鏈接庫的工具痒芝。
  3. 進(jìn)入lib/c目錄并執(zhí)行下面的命令:
1. mkdir -p cmake
2. cd cmake 
3. cmake ..  
4. make -j
5. make install

上面??執(zhí)行完成后俐筋,libcatclient.so (或Mac下 libcatclient.dylib)已經(jīng)安裝到LD_LIBRARY_PATH目錄下,大多數(shù)情況下是 /usr/local/lib

安裝node cat client
npm i @dp-cat/client
cat環(huán)境配置

cat的client所鏈接的cat server并不是在代碼里面進(jìn)行設(shè)置的严衬,而是cat的默認(rèn)系統(tǒng)目錄/data進(jìn)行配置的:

  1. 創(chuàng)建/data/appdatas/cat目錄并保證讀寫權(quán)限澄者。
  2. 創(chuàng)建/data/applogs/cat目錄并保證讀寫權(quán)限。
  3. 創(chuàng)建/data/appdatas/cat/client.xml配置文件:
<?xml version="1.0" encoding="utf-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd">
    <servers>
        <server ip="<cat server ip address>" port="2280" http-port="8080" />
    </servers>
</config>

根據(jù)上面??的配置文件请琳,配置cat client所連接的server粱挡。這樣所有的準(zhǔn)備工作就完成了,可以在業(yè)務(wù)代碼中直接使用了俄精。

cat使用

cat中已經(jīng)包含了使用的examples,可以直接查看:

Transaction
var cat = require('@dp-cat/client')

cat.init({
    appkey: 'nodecat'
})

cat = new cat.Cat(true)

let t = cat.newTransaction('foo', 'bar')
t.addData("key", "val")
t.addData("context")
t.setStatus(cat.STATUS.SUCCESS)
setTimeout(() => t.complete(), 3000)
Event
var cat = require('@dp-cat/client')

cat.init({
    appkey: 'nodecat'
})

// Log a event with success status and empty data.
cat.logEvent("Event", "E1")

// The 3rd parameter (status) is optional, default is "0".
// It can be any of string value.
// The event will be treated as "problem" unless the given status == cat.STATUS.SUCCESS ("0")
// which will be recorded in our problem report.
cat.logEvent("Event", "E2", cat.STATUS.FAIL)
cat.logEvent("Event", "E3", "failed")

// The 4th parameter (data) is optional, default is "".
// It can be any of string value.
cat.logEvent("Event", "E4", "failed", "some debug info")

// The 4th parameter (data) can also be an object
// In this case, the object will be dumped into json.
cat.logEvent("Event", "E5", "failed", {a: 1, b: 2})
Error
var cat = require('@dp-cat/client')

cat.init({
    appkey: 'nodecat'
})

cat.logError('ErrorInTransaction', new Error())

這樣我們在cat的web端(http://<cat server ip address>:8080/cat/r)就可以看到相應(yīng)的數(shù)據(jù)了询筏。

Egg的支持

這里為egg的服務(wù)端封裝了一個(gè)插件egg-cat-client,可以方便egg的應(yīng)用直接接入cat:

安裝
$ npm i egg-cat-client --save
使用
// {app_root}/config/plugin.js
exports.catClient = {
  enable: true,
  package: 'egg-cat-client',
};
配置
// {app_root}/config/config.default.js
exports.catClient = {
    appKey: '<your application name>'
    connection: {
        ip:'127.0.0.1', // ip與host同時(shí)存在的話優(yōu)先用ip
        host: 'xxx.xxx.xx', //host 和 ip只要填其中一個(gè)即可如果竖慧, 
        port: '2208',
        http-port: '8080'
    }
}; 
// {app_root}/app.js
 
module.exports = app => {
  app.beforeStart(async () => {
    app.cat = app.catFactory.createClient(app.config.catClient.appKey, {});
    await app.cat.ready(true);
  });
};
代碼嵌入
class HomeController extends Controller {
  async index() {
    this.ctx.body = 'hi, egg';

    // 獲取初始化好的cat對象
    const cat = this.ctx.app.catClient;
    const threadCat = new cat.Cat(true);
    //創(chuàng)建一個(gè)transaction實(shí)例
    const trans = threadCat.newTransaction('TestTran', 'DDD');
    //添加數(shù)據(jù)
    trans.addData('key', 'value');
    trans.logEvent('EventTransaction', 'E1111');
    const subTrans = a.newTransaction('TestSubTran', 'GGGGG');
    subTrans.addData('subKey', 'subValue');
    trans.setStatus(cat.STATUS.SUCCESS);
    setTimeout(function() {
      trans.complete();
    }, 1000);

    // Event 
    cat.logEvent('Event', 'E1');
    cat.logEvent('Event', 'E2', cat.STATUS.FAIL);
    cat.logEvent('Event', 'E3', 'failed');
    // Error
    cat.logError('ErrorInTransaction', new Error());
  }
}

module.exports = HomeController;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫌套,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子圾旨,更是在濱河造成了極大的恐慌踱讨,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碳胳,死亡現(xiàn)場離奇詭異勇蝙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)挨约,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門味混,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诫惭,你說我怎么就攤上這事翁锡。” “怎么了夕土?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵馆衔,是天一觀的道長瘟判。 經(jīng)常有香客問我,道長角溃,這世上最難降的妖魔是什么拷获? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮减细,結(jié)果婚禮上匆瓜,老公的妹妹穿的比我還像新娘。我一直安慰自己未蝌,他們只是感情好驮吱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萧吠,像睡著了一般左冬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纸型,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天拇砰,我揣著相機(jī)與錄音,去河邊找鬼绊袋。 笑死毕匀,一個(gè)胖子當(dāng)著我的面吹牛铸鹰,可吹牛的內(nèi)容都是我干的癌别。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蹋笼,長吁一口氣:“原來是場噩夢啊……” “哼展姐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剖毯,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤圾笨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后逊谋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擂达,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年胶滋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了板鬓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡究恤,死狀恐怖俭令,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情部宿,我是刑警寧澤抄腔,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布瓢湃,位于F島的核電站,受9級特大地震影響赫蛇,放射性物質(zhì)發(fā)生泄漏绵患。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一悟耘、第九天 我趴在偏房一處隱蔽的房頂上張望藏雏。 院中可真熱鬧,春花似錦作煌、人聲如沸掘殴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奏寨。三九已至,卻和暖如春鹰服,著一層夾襖步出監(jiān)牢的瞬間病瞳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工悲酷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留套菜,地道東北人速梗。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓火俄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親院塞。 傳聞我的和親對象是個(gè)殘疾皇子顿肺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 個(gè)人專題目錄 Dianping CAT 安裝說明文檔 CAT基于Java開發(fā)的實(shí)時(shí)應(yīng)用監(jiān)控平臺(tái)戏溺,包括實(shí)時(shí)應(yīng)用監(jiān)控,...
    Java及SpringBoot閱讀 5,386評論 0 2
  • 一屠尊、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,734評論 0 10
  • feisky云計(jì)算旷祸、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,833評論 0 5
  • 在實(shí)現(xiàn) egg + vue 服務(wù)端渲染工程化實(shí)現(xiàn)之前,我們先來看看前面兩篇關(guān)于Webpack構(gòu)建和Egg的文章: ...
    hubcarl閱讀 6,004評論 0 19
  • 今早抽到的牌是倒立的寶劍9掺炭,提示我要留意自己的潛意識了辫诅,留意自己的夢告訴了我什么。 只是涧狮,昨夜好像...
    木木碎碎念哇閱讀 251評論 0 0