open-falcon整體架構(gòu)
下圖是open-falcon的整體架構(gòu),模塊比較多,可以看完整篇文章介紹再回頭看這個(gè)架構(gòu)圖。

簡化版架構(gòu)圖
簡化的falcon基本工作流程可描述如下圖所示:

下面就根據(jù)這個(gè)簡化版流程圖,介紹下open-falcon到底是怎么工作的。
agent
功能:數(shù)據(jù)采集上報(bào),部署在每臺物理機(jī)上。
數(shù)據(jù)到底是什么樣的?
{
'endpoint': hostname-of-machine,
"metric": cpu.busy,
"timestamp": 1540286013,
"value": 1.234
}
注:為了簡化,進(jìn)行了字段精簡
怎么采集?
基本上都是通過解析linux系統(tǒng)目錄/proc下的文件,舉例:
cpu: /proc/stat
load: /proc/loadavg
net: /proc/net/dev
怎么上報(bào)?
定時(shí)采集(默認(rèn)每分鐘一次),采集完通過rpc調(diào)用,發(fā)送給transfer模塊
transfer
主要功能:數(shù)據(jù)轉(zhuǎn)發(fā)
啥叫數(shù)據(jù)轉(zhuǎn)發(fā)?到底干啥的?
接收數(shù)據(jù)->非法數(shù)據(jù)過濾->緩存在內(nèi)存中->發(fā)送給不同模塊(graph、judge、opentsdb)
graph
功能:基于環(huán)形數(shù)據(jù)庫rrdtool,存儲監(jiān)控?cái)?shù)據(jù),并提供查詢接口
rrdtool是啥玩意?
1\. 存儲數(shù)據(jù)之時(shí),設(shè)置了數(shù)據(jù)保存的時(shí)間,比如一個(gè)月,超過一個(gè)月的數(shù)據(jù)會被刪除。
2\. 數(shù)據(jù)以文件的形式存儲在磁盤上
rrdtool數(shù)據(jù)的底層結(jié)構(gòu)是啥?
數(shù)據(jù)保存在以rrd結(jié)尾的文件中,內(nèi)容格式為 時(shí)間戳:值,舉例如下:
1540286013 1.12
1540286073 2.34
1540286133 1.35
是不是很簡單
怎么查詢數(shù)據(jù)?
假設(shè)要查詢hostname1,最近30分鐘,load情況
1\. 根據(jù)查詢參數(shù)生成文件名:hostname1_load.rrd
2\. 讀取這個(gè)文件內(nèi)容并返回時(shí)間戳為30分鐘之內(nèi)的數(shù)據(jù)
注:這里對文件名規(guī)則進(jìn)行了簡化
judge
功能:根據(jù)配置的報(bào)警策略,判斷是否需要報(bào)警
策略是什么樣的?
以hostname為維度,保存每個(gè)機(jī)器配置的所有策略
hostname:[策略1,策略2,...,策略n]
策略舉例:
all(#3) load > 20
意思是:連續(xù)三次負(fù)載超過20就報(bào)警
報(bào)警怎么發(fā)出去?
根據(jù)策略,將需要報(bào)警的事件寫入redis。由alarm模塊定期讀取并發(fā)送出去
寫入redis的數(shù)據(jù)可簡化如下:
{
'hostname': 'hostname-of-machine',
'時(shí)間':1540286013,
'值':1.234
'策略':'all(#3) load > 20 報(bào)警接收人:張三',
'報(bào)警次數(shù)':'第三次報(bào)警'
}
注:為方便理解,對真實(shí)的結(jié)構(gòu)進(jìn)行了改造
alarm
功能:報(bào)警發(fā)送
這個(gè)模塊比較簡單,主要實(shí)現(xiàn)以下功能:
1.格式化報(bào)警內(nèi)容
2.簡單的報(bào)警合并
3.報(bào)警發(fā)送:短信、郵件、IM
最后附上一個(gè)官網(wǎng)的完整架構(gòu)
