業(yè)務(wù)日志服務(wù)架構(gòu)簡介

背景介紹

隨著業(yè)務(wù)服務(wù)(Server App)逐漸增加,使得問題排查非常困難埠对,很多時候需要關(guān)聯(lián)查詢多個服務(wù)的日志衬以,而且統(tǒng)計分析十分不便译隘。因此,急需設(shè)計一個集中式海量日志實時處理系統(tǒng)。需要滿足功能需求(實時看日志、統(tǒng)計歷史日志、實時行為分析经伙、用戶軌跡跟蹤等)、性能需求(具有高吞吐能力勿锅、高擴(kuò)展性帕膜、高容錯性)等枣氧。

組件介紹

Kafka 是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它適合處理海量日志發(fā)布訂閱垮刹,提供消息磁盤持久化作瞄、支持物理分片存儲、多組消費(fèi)等特性危纫。

Elasticsearch 是一個開源實時分布式搜索引擎宗挥,具備如下特征:零配置,索引自動分片种蝶,索引副本機(jī)制契耿,restful風(fēng)格接口,多數(shù)據(jù)源螃征,自動搜索負(fù)載等搪桂。

Flume 是Apache基金會的一個高可用的,高可靠的盯滚,分布式的海量日志采集踢械、聚合和傳輸?shù)南到y(tǒng),它支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方魄藕,用于收集數(shù)據(jù)内列;同時提供對數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接受方(可定制)背率。


實現(xiàn)思路
  1. 開發(fā)業(yè)務(wù)日志SDK(下文為描述方便话瞧,稱之為 BizLogSDK),嵌于各業(yè)務(wù)App寝姿;
  2. 從業(yè)務(wù)服務(wù)端收集日志并集中輸出到Kafka交排;
  3. 根據(jù)不同需求(查詢、統(tǒng)計)饵筑,由Flume對數(shù)據(jù)預(yù)處理并分發(fā)埃篓;
  4. Flume 的下游組件對日志內(nèi)容進(jìn)行消費(fèi);
架構(gòu)設(shè)計
業(yè)務(wù)日志服務(wù)架構(gòu).png

目前日志消費(fèi)方式有兩種:

  • Elasticsearch 做索引根资,用于查詢架专、統(tǒng)計;
  • 基于Storm流式計算實現(xiàn)(待完成)嫂冻。

引入Kafka的目的:

  • 線上業(yè)務(wù)集群規(guī)模較大胶征,日志產(chǎn)生量巨大塞椎,如果直接同步日志對下游服務(wù)負(fù)荷較重桨仿,容易因為故障導(dǎo)致日志阻塞延遲和丟失,所以引入了kafka 案狠;
  • 消息可以持久化服傍,并且可以進(jìn)行日志回溯钱雷。有了消息隊列,上游服務(wù)和下游服務(wù)完全解藕吹零,網(wǎng)絡(luò)傳輸會更穩(wěn)定罩抗、更高效、更均衡灿椅,避免級聯(lián)效應(yīng)套蒂。
架構(gòu)說明
  1. 由于業(yè)務(wù)日志量極大,為減輕業(yè)務(wù)服務(wù)的壓力茫蛹,故將業(yè)務(wù)日志首先輸出到 Kafka 集群操刀;
  2. Flume 做分發(fā)和預(yù)處理。從Kafka中拉取待處理的業(yè)務(wù)日志婴洼,先在本地保留一份骨坑,然后做預(yù)處理和分發(fā);
  3. Elasticsearch 做日志索引柬采。對業(yè)務(wù)日志按 Prefix-bizType-YYYY.MM.dd 的格式創(chuàng)建索引欢唾;
  4. Kibana 做查詢界面與簡單的統(tǒng)計報表。供開發(fā)粉捻、運(yùn)維礁遣、運(yùn)營人員使用;
  5. Zookeeper 用于維護(hù)Kafka集群配置肩刃。Flume作為Kafka的消費(fèi)者亡脸,需要配置Zookeeper的相關(guān)信息;
  6. Kibana 的報表展示能力有限树酪,可以在Elasticsearch 下游對接 Grafana或其他工具(架構(gòu)圖中未做描述)浅碾,實現(xiàn)更炫酷的報表;
  7. 可以根據(jù)業(yè)務(wù)擴(kuò)展需求续语,增加對應(yīng)的 Flume 及處理服務(wù)垂谢,以實現(xiàn)業(yè)務(wù)橫向擴(kuò)展;
  8. 目前還沒有對業(yè)務(wù)日志做大數(shù)據(jù)分析疮茄,因此架構(gòu)中只做了節(jié)點描述滥朱。
技術(shù)方案
  1. Flume 1.6增加了 KafkaSource,之前版本需要自己實現(xiàn)(自定義 Source 實現(xiàn)示例)力试;
  2. Flume 做預(yù)處理和分發(fā)徙邻,需要自定義Sink(自定義Sink實現(xiàn)示例);
  3. BizLogSDK 的配置中可以添加對Kafka Producer 的配置(Producer Configs)畸裳,以優(yōu)化性能缰犁;
  4. Elasticsearch 官網(wǎng)的 Java Client 比較重,連接數(shù)太多,建議按照Elasticsearch Reference 自己開發(fā)一個基于HTTP 協(xié)議 的 Client(實現(xiàn)CRUD)帅容,方便業(yè)務(wù)日志按照 biztype-date 格式進(jìn)行索引颇象。注意:HTTP 連接應(yīng)該復(fù)用,(可以采用HttpClient 的連接池管理方式)并徘,避免連接數(shù)過多遣钳;
  5. Flume Sink 中拿到業(yè)務(wù)日志后,應(yīng)該放到線程池里處理麦乞,避免 Flume卡死蕴茴;
  6. Elasticsearch 默認(rèn)會將 string 類型字段設(shè)為 _ analyzed _,會造成CPU過高姐直〖隹可以通過 Elasticsearch 提供的 Index Templates 方式,在index 創(chuàng)建后简肴,應(yīng)用 template 到匹配的index晃听,將相關(guān) _ string _ 型字段設(shè)為 _ not_analyzed _。
BizLogSDK :

業(yè)務(wù)App通過調(diào)用 BizLogSDK砰识,將業(yè)務(wù)日志輸出到Kafka集群能扒。BizLogSDK 需要實現(xiàn)設(shè)置公用屬性、擴(kuò)展屬性辫狼,日志發(fā)送等功能初斑。可參考 Log4j 的源碼來實現(xiàn)膨处。

  1. 業(yè)務(wù)日志公用屬性:
  • _ bizType _ :業(yè)務(wù)類型
  • _ bizAction _:業(yè)務(wù)操作
  • _ serverIp _ :服務(wù)器IP
  • _ requestTime _ :請求時間
  1. 基本配置:
# 隊列名稱
topicName = bizlog-server
# 是否同步發(fā)送消息(異步速度更快)
send.sync = false
# kafka 消息隊列服務(wù)器
bootstrap.servers = 127.0.0.1:9091
實時查詢
查詢界面
實時統(tǒng)計
統(tǒng)計界面 1
統(tǒng)計界面 2
相關(guān)監(jiān)控
  • KafkaOffsetMonitor
Kafka隊列監(jiān)控
  • Elasticsearch Monitor


    Elasticsearch 監(jiān)控
后續(xù)改進(jìn)
  • BizLogSDK 中需要加入 Log Level见秤;
  • 業(yè)務(wù)日志需要一個統(tǒng)一的界面來管理(設(shè)置level、關(guān)閉真椿、刪除鹃答、定期清理等);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末突硝,一起剝皮案震驚了整個濱河市测摔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌解恰,老刑警劉巖锋八,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異护盈,居然都是意外死亡挟纱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門腐宋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來紊服,“玉大人檀轨,你說我怎么就攤上這事∥唬” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵撤师,是天一觀的道長剂府。 經(jīng)常有香客問我,道長剃盾,這世上最難降的妖魔是什么腺占? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮痒谴,結(jié)果婚禮上衰伯,老公的妹妹穿的比我還像新娘。我一直安慰自己积蔚,他們只是感情好意鲸,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尽爆,像睡著了一般怎顾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漱贱,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天槐雾,我揣著相機(jī)與錄音,去河邊找鬼幅狮。 笑死募强,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崇摄。 我是一名探鬼主播擎值,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逐抑!你這毒婦竟也來了幅恋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤泵肄,失蹤者是張志新(化名)和其女友劉穎捆交,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腐巢,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡品追,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冯丙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肉瓦。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡遭京,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泞莉,到底是詐尸還是另有隱情哪雕,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布鲫趁,位于F島的核電站斯嚎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挨厚。R本人自食惡果不足惜堡僻,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疫剃。 院中可真熱鬧钉疫,春花似錦、人聲如沸巢价。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壤躲。三九已至咨油,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柒爵,已是汗流浹背役电。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留棉胀,地道東北人法瑟。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像唁奢,于是被迫代替她去往敵國和親霎挟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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