5. falcon-hbs模塊

5.1 介紹

Heartbeat Server. 所有Agent都會(huì)連到hbs吁讨,每分鐘發(fā)一次心跳髓迎,匯報(bào)自己的hostname、ip建丧、agent version排龄、plugin version,hbs據(jù)此
填充host表翎朱。agent還會(huì)通過(guò)hbs拿到應(yīng)該監(jiān)控的端口橄维、進(jìn)程,應(yīng)該執(zhí)行的插件等信息拴曲。

hbs要能夠處理agent的上述請(qǐng)求争舞,就需要與portal的數(shù)據(jù)庫(kù)打交道,這是無(wú)論如何無(wú)法避免的疗韵,那就為hbs再賦予一個(gè)功能:DB的緩存器兑障。judge
也需要通過(guò)portal的DB拿到策略列表,在一個(gè)大點(diǎn)的公司蕉汪,judge實(shí)例可能比較多,幾十個(gè)逞怨、甚至上百個(gè)者疤,有了hbs這個(gè)DB緩存器在這了,judge就
無(wú)需直接訪問DB了叠赦,從hbs獲取策略列表即可驹马。如此一來(lái),hbs可以每分鐘從DB讀取一次數(shù)據(jù)除秀,這一分鐘內(nèi)所有judge的請(qǐng)求都可以直接讀取內(nèi)存糯累。
另外,DB存的是關(guān)系型數(shù)據(jù)册踩,需要做一些轉(zhuǎn)換才能被judge使用泳姐,hbs從DB中讀取到數(shù)據(jù)之后順便把轉(zhuǎn)換也做了,這樣所有judge就無(wú)需再做轉(zhuǎn)換了暂吉。

所以hbs的邏輯就變成了:每分鐘從DB中l(wèi)oad各種數(shù)據(jù)胖秒,處理后放到內(nèi)存里缎患,靜待agent、judge的請(qǐng)求阎肝。

5.2 安裝Installation

# set $GOPATH and $GOROOT
mkdir -p $GOPATH/src/github.com/open-falcon
cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/hbs.git
cd hbs
go get ./...
./control build
./control start

5.3 配置 Configuration

- database: portal的db連接地址
- maxIdle: 數(shù)據(jù)庫(kù)連接池的MaxIdle配置
- listen: 監(jiān)聽的rpc端口挤渔,judge要通過(guò)這個(gè)端口拿到策略列表
- trustable: 可信ip列表,安全起見留空即可
- http: 監(jiān)聽的http地址风题,主要是做調(diào)試

# 配置說(shuō)明
{
    "debug": true,
    "database": "root:password@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true", # Portal的數(shù)據(jù)庫(kù)地址
    "hosts": "", # portal數(shù)據(jù)庫(kù)中有個(gè)host表判导,如果表中數(shù)據(jù)是從其他系統(tǒng)同步過(guò)來(lái)的,此處配置為sync沛硅,否則就維持默認(rèn)骡楼,留空即可
    "maxIdle": 100,
    "listen": ":6030", # hbs監(jiān)聽的rpc地址
    "trustable": [""],
    "http": {
        "enabled": true,
        "listen": "0.0.0.0:6031" # hbs監(jiān)聽的http地址
    }
}

5.4 執(zhí)行流程

1. 解析配置文件
2. db初始化
    將數(shù)據(jù)庫(kù)打開并將打開的鏈接,一直放在db模塊稽鞭,不用關(guān)閉
3. cache初始化
    初始化鸟整,并開啟定期初始化任務(wù)
    GroupPlugins.Init():從plugin_dir查詢并且初始化GroupPlugins,此數(shù)據(jù)結(jié)構(gòu)以grp_id為key朦蕴,插件目錄列表為value
    GroupTemplates.Init():從grp_tpl查詢并且初始化GroupTemplates篮条,此數(shù)據(jù)結(jié)構(gòu)以grp_id為key,模版目錄為value
    HostGroupsMap.Init():host_id為key吩抓,grp_id列表為value
    HostMap.Init():key: hostname value: hostid
    TemplateCache.Init():key:grp_id value: 策略模板列表
    Strategies.Init(TemplateCache.GetMap()):策略初始化
    HostTemplateIds.Init():一個(gè)host對(duì)應(yīng)多個(gè)模版id
    ExpressionCache.Init():表達(dá)式列表
    MonitoredHosts.Init():初始化監(jiān)控的機(jī)器列表
4. 刪除舊的angents
    刪除24小時(shí)沒有上報(bào)狀態(tài)的agent信息
5. http服務(wù)啟動(dòng)
    涉及通用路由涉茧、產(chǎn)品相關(guān)的路由
6. rpc服務(wù)啟動(dòng)
    涉及hbs、agent兩類rpc服務(wù)
7. 監(jiān)測(cè)中斷和正常退出信號(hào)疹娶,關(guān)閉數(shù)據(jù)庫(kù)并且退出

5.5 源碼分析

1. 數(shù)據(jù)庫(kù)與緩存
******緩存*******
- 組插件:map[組id][]插件目錄
- hostname:map[hostname]hostid
- 主機(jī)到組:map[hostid][]grp_id
- 組模版:map[grp_id][]tpl_id
- 模版: map[tpl_id]模版引用
- 策略:map[策略id]策略
- 主機(jī)模版:map[主機(jī)id] []模版id
- 表達(dá)式:[]表達(dá)式
- 被監(jiān)控的主機(jī):map[主機(jī)id]主機(jī)

# 每一分鐘更新緩存

******數(shù)據(jù)表*****
- 插件目錄表:plugin_dir (grp_id, dir)
- 主機(jī)表:    host (id, hostname)
- 組模版表:  grp_tpl (grp_id, tpl_id)
- 組主機(jī)表:  grp_host(grp_id伴栓,host_id)
- 模版表:   tpl(id, tpl_name, parent_id, action_id, create_user)
- 策略表:  strategy(id,metric,tags,func,op,right_value,max_step,priority,note,tpl_id) 多個(gè)策略對(duì)應(yīng)一個(gè)模版
- 表達(dá)式:expression(id, expression, func, op, right_value, max_step, priority, note, action_id)

2. http接口
*********通用接口***************
/health 健康狀態(tài)檢查
/version 版本信息
/workdir 獲取當(dāng)前目錄
/config/reload 重新導(dǎo)入配置

*********業(yè)務(wù)接口***************
/expressions  返回緩存中的表達(dá)式
/agents       返回所有的agent
/hosts        返回所有被監(jiān)控的主機(jī)
/strategies   返回所有的策略
/templates    返回所有的模版
/plugins      獲取摸個(gè)host對(duì)應(yīng)的插件

3. grpc接口
*************agent相關(guān)************
MinePlugins         #根據(jù)hostname獲取plugins列表
ReportStatus        #狀態(tài)匯報(bào)
TrustableIps        #返回允許登錄的白名單
BuitinMetrics       #根據(jù)host那么獲取需要采集的metric

*************hbs相關(guān)************
GetExpressions      #獲取表達(dá)式列表
GetStrategies       #獲取配置列表

5.6 總結(jié)

  1. hbs是open-falcon中管理配置信息的服務(wù),為其他模塊提供獲取配置緩存的接口雨饺。
  2. hbs負(fù)責(zé)存儲(chǔ)agent相關(guān)元信息钳垮,提供agent獲取自身信息的緩存。
  3. 綜上:hbs是一個(gè)緩存配置文件的服務(wù)额港,為下游agent饺窿,以及其他需要讀取配置緩存的模塊,提供統(tǒng)一的數(shù)據(jù)庫(kù)查詢移斩,與緩存的更新肚医。
  4. 這樣設(shè)計(jì)的好處是:能夠?qū)⑺信c配置信息的同步都在hbs做掉,不用每個(gè)模版都去完成自身相關(guān)配置信息的維護(hù)向瓷,簡(jiǎn)化了系統(tǒng)的復(fù)雜性肠套。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市猖任,隨后出現(xiàn)的幾起案子你稚,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件入宦,死亡現(xiàn)場(chǎng)離奇詭異哺徊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)乾闰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門落追,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人涯肩,你說(shuō)我怎么就攤上這事轿钠。” “怎么了病苗?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵疗垛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我硫朦,道長(zhǎng)贷腕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任咬展,我火速辦了婚禮泽裳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘破婆。我一直安慰自己涮总,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布祷舀。 她就那樣靜靜地躺著瀑梗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裳扯。 梳的紋絲不亂的頭發(fā)上抛丽,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音嚎朽,去河邊找鬼铺纽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哟忍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陷寝,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼锅很,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了凤跑?” 一聲冷哼從身側(cè)響起爆安,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仔引,沒想到半個(gè)月后扔仓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褐奥,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年翘簇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撬码。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡版保,死狀恐怖呜笑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彻犁,我是刑警寧澤叫胁,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站汞幢,受9級(jí)特大地震影響驼鹅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜森篷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一输钩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疾宏,春花似錦张足、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至岩馍,卻和暖如春碉咆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛀恩。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工疫铜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人双谆。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓壳咕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親顽馋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谓厘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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