業務日志服務架構簡介

背景介紹

隨著業務服務(Server App)逐漸增加,使得問題排查非常困難,很多時候需要關聯查詢多個服務的日志,而且統計分析十分不便。因此,急需設計一個集中式海量日志實時處理系統。需要滿足功能需求(實時看日志、統計歷史日志、實時行為分析、用戶軌跡跟蹤等)、性能需求(具有高吞吐能力、高擴展性、高容錯性)等。

組件介紹

Kafka 是一種高吞吐量的分布式發布訂閱消息系統,它適合處理海量日志發布訂閱,提供消息磁盤持久化、支持物理分片存儲、多組消費等特性。

Elasticsearch 是一個開源實時分布式搜索引擎,具備如下特征:零配置,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。

Flume 是Apache基金會的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統,它支持在日志系統中定制各類數據發送方,用于收集數據;同時提供對數據進行簡單處理,并寫到各種數據接受方(可定制)。


實現思路
  1. 開發業務日志SDK(下文為描述方便,稱之為 BizLogSDK),嵌于各業務App;
  2. 從業務服務端收集日志并集中輸出到Kafka;
  3. 根據不同需求(查詢、統計),由Flume對數據預處理并分發;
  4. Flume 的下游組件對日志內容進行消費;
架構設計
業務日志服務架構.png

目前日志消費方式有兩種:

  • Elasticsearch 做索引,用于查詢、統計;
  • 基于Storm流式計算實現(待完成)。

引入Kafka的目的:

  • 線上業務集群規模較大,日志產生量巨大,如果直接同步日志對下游服務負荷較重,容易因為故障導致日志阻塞延遲和丟失,所以引入了kafka ;
  • 消息可以持久化,并且可以進行日志回溯。有了消息隊列,上游服務和下游服務完全解藕,網絡傳輸會更穩定、更高效、更均衡,避免級聯效應。
架構說明
  1. 由于業務日志量極大,為減輕業務服務的壓力,故將業務日志首先輸出到 Kafka 集群;
  2. Flume 做分發和預處理。從Kafka中拉取待處理的業務日志,先在本地保留一份,然后做預處理和分發;
  3. Elasticsearch 做日志索引。對業務日志按 Prefix-bizType-YYYY.MM.dd 的格式創建索引;
  4. Kibana 做查詢界面與簡單的統計報表。供開發、運維、運營人員使用;
  5. Zookeeper 用于維護Kafka集群配置。Flume作為Kafka的消費者,需要配置Zookeeper的相關信息;
  6. Kibana 的報表展示能力有限,可以在Elasticsearch 下游對接 Grafana或其他工具(架構圖中未做描述),實現更炫酷的報表;
  7. 可以根據業務擴展需求,增加對應的 Flume 及處理服務,以實現業務橫向擴展;
  8. 目前還沒有對業務日志做大數據分析,因此架構中只做了節點描述。
技術方案
  1. Flume 1.6增加了 KafkaSource,之前版本需要自己實現(自定義 Source 實現示例);
  2. Flume 做預處理和分發,需要自定義Sink(自定義Sink實現示例);
  3. BizLogSDK 的配置中可以添加對Kafka Producer 的配置(Producer Configs),以優化性能;
  4. Elasticsearch 官網的 Java Client 比較重,連接數太多,建議按照Elasticsearch Reference 自己開發一個基于HTTP 協議 的 Client(實現CRUD),方便業務日志按照 biztype-date 格式進行索引。注意:HTTP 連接應該復用,(可以采用HttpClient 的連接池管理方式),避免連接數過多;
  5. Flume Sink 中拿到業務日志后,應該放到線程池里處理,避免 Flume卡死;
  6. Elasticsearch 默認會將 string 類型字段設為 _ analyzed _,會造成CPU過高。可以通過 Elasticsearch 提供的 Index Templates 方式,在index 創建后,應用 template 到匹配的index,將相關 _ string _ 型字段設為 _ not_analyzed _。
BizLogSDK :

業務App通過調用 BizLogSDK,將業務日志輸出到Kafka集群。BizLogSDK 需要實現設置公用屬性、擴展屬性,日志發送等功能。可參考 Log4j 的源碼來實現。

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


    Elasticsearch 監控
后續改進
  • BizLogSDK 中需要加入 Log Level;
  • 業務日志需要一個統一的界面來管理(設置level、關閉、刪除、定期清理等);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容