新聞資訊  快訊  焦點  財經  政策  社會
互 聯 網   電商  金融  數據  計算  技巧
生活百科  科技  職場  健康  法律  汽車
手機百科  知識  軟件  修理  測評  微信
軟件技術  應用  系統  圖像  視頻  經驗
硬件技術  知識  技術  測評  選購  維修
網絡技術  硬件  軟件  設置  安全  技術
程序開發  語言  移動  數據  開源  百科
安全防護  資訊  黑客  木馬  病毒  移動
站長技術  搜索  SEO  推廣  媒體  移動
財經百科  股票  知識  理財  財務  金融
教育考試  育兒  小學  高考  考研  留學
您當前的位置:首頁 > IT百科 > 站長技術 > 網站

一個百億級日志系統是怎么設計出來的?

時間:2019-06-18 10:35:12  來源:  作者:

日志是記錄系統中各種問題信息的關鍵,也是一種常見的海量數據。

 

一個百億級日志系統是怎么設計出來的?

 

 

日志平臺為集團所有業務系統提供日志采集、消費、分析、存儲、索引和查詢的一站式日志服務。

主要為了解決日志分散不方便查看、日志搜索操作復雜且效率低、業務異常無法及時發現等等問題。

隨著有贊業務的發展與增長,每天都會產生百億級別的日志量(據統計,平均每秒產生 50 萬條日志,峰值每秒可達 80 萬條)。日志平臺也隨著業務的不斷發展經歷了多次改變和升級。

本文跟大家分享有贊在當前日志系統的建設、演進以及優化的經歷,這里先拋磚引玉,歡迎大家一起交流討論。

原有日志系統

有贊從 2016 年就開始構建適用于業務系統的統一日志平臺,負責收集所有系統日志和業務日志,轉化為流式數據。

通過 Flume 或者 Logstash 上傳到日志中心(Kafka 集群),然后供 Track、Storm、Spark 及其他系統實時分析處理日志。

并將日志持久化存儲到 HDFS 供離線數據分析處理,或寫入 ElasticSearch 提供數據查詢。

整體架構如圖 2-1 所示:

 

一個百億級日志系統是怎么設計出來的?

 

 

圖 2-1:原有日志系統架構

隨著接入的應用越來越多,接入的日志量越來越大,逐漸出現一些問題和新的需求,主要在以下幾個方面:

  • 業務日志沒有統一的規范,業務日志格式各式各樣,新應用接入無疑大大的增加了日志的分析、檢索成本。
  • 多種數據日志數據采集方式,運維成本較高。
  • 日志平臺收集了大量用戶日志信息,當時無法直接的看到某個時間段,哪些錯誤信息較多,增加定位問題的難度。
  • 存儲方面。

關于存儲方面:

  • 采用了 ES 默認的管理策略,所有的 Index 對應 3*2 Shard(3 個 Primary,3 個 Replica)。

有部分 Index 數量較大,對應單個 Shard 對應的數據量就會很大,導致有 Hot Node,出現很多 bulk request rejected,同時磁盤 IO 集中在少數機器上。

  • 對于 bulk request rejected 的日志沒有處理,導致業務日志丟失。
  • 日志默認保留 7 天,對于 SSD 作為存儲介質,隨著業務增長,存儲成本過于高昂。
  • 另外 Elasticsearch 集群也沒有做物理隔離,ES 集群 OOM 的情況下,使得集群內全部索引都無法正常工作,不能為核心業務運行保駕護航。

現有系統演進

日志從產生到檢索,主要經歷以下幾個階段:

  • 采集
  • 傳輸
  • 緩沖
  • 處理
  • 存儲
  • 檢索

詳細架構如圖 3-1 所示:

 

一個百億級日志系統是怎么設計出來的?

 

 

圖 3-1:現有系統架構

日志接入

日志接入目前分為兩種方式:

  • SDK 接入:日志系統提供了不同語言的 SDK,SDK 會自動將日志的內容按照統一的協議格式封裝成最終的消息體,并最后最終通過 TCP 的方式發送到日志轉發層(Rsyslog-Hub)。
  • HTTP Web 服務接入:有些無法使用 SDK 接入日志的業務,可以通過 HTTP 請求直接發送到日志系統部署的 Web 服務,統一由 Web Protal 轉發到日志緩沖層的 Kafka 集群。

日志采集

 

一個百億級日志系統是怎么設計出來的?

 

 

現在有 Rsyslog-Hub 和 Web Portal 做為日志傳輸系統,Rsyslog 是一個快速處理收集系統日志的程序,提供了高性能、安全功能和模塊化設計。

之前系統演進過程中使用過直接在宿主機上部署 Flume 的方式,由于 Flume 本身是 JAVA 開發的,會比較占用機器資源而統一升級為使用 Rsyslog 服務。

為了防止本地部署與 Kafka 客戶端連接數過多,本機上的 Rsyslog 接收到數據后,不做過多的處理就直接將數據轉發到 Rsyslog-Hub 集群。

通過 LVS 做負載均衡,后端的 Rsyslog-Hub 會通過解析日志的內容,提取出需要發往后端的 Kafka Topic。

日志緩沖

Kafka 是一個高性能、高可用、易擴展的分布式日志系統,可以將整個數據處理流程解耦。

將 Kafka 集群作為日志平臺的緩沖層,可以為后面的分布式日志消費服務提供異步解耦、削峰填谷的能力,也同時具備了海量數據堆積、高吞吐讀寫的特性。

日志切分

日志分析是重中之重,為了能夠更加快速、簡單、精確地處理數據。日志平臺使用 Spark Streaming 流計算框架消費寫入 Kafka 的業務日志。

Yarn 作為計算資源分配管理的容器,會跟不同業務的日志量級,分配不同的資源處理不同日志模型。

整個 Spark 任務正式運行起來后,單個批次的任務會將拉取到的所有的日志分別異步的寫入到 ES 集群。

業務接入之前可以在管理臺對不同的日志模型設置任意的過濾匹配的告警規則,Spark 任務每個 Excutor 會在本地內存里保存一份這樣的規則。

在規則設定的時間內,計數達到告警規則所配置的閾值后,通過指定的渠道給指定用戶發送告警,以便及時發現問題。

當流量突然增加,ES 會有 bulk request rejected 的日志重新寫入 Kakfa,等待補償。

日志存儲

原先所有的日志都會寫到 SSD 盤的 ES 集群,LogIndex 直接對應 ES 里面的索引結構。

隨著業務增長,為了解決 ES 磁盤使用率單機最高達到 70%~80% 的問題,現有系統采用 Hbase 存儲原始日志數據和 ElasticSearch 索引內容相結合的方式,完成存儲和索引。

Index 按天的維度創建,提前創建 Index 會根據歷史數據量,決定創建明日 Index 對應的 Shard 數量,也防止集中創建導致數據無法寫入。

現在日志系統只存近 7 天的業務日志,如果配置更久的保存時間的,會存到歸檔日志中。

對于存儲來說,Hbase、ES 都是分布式系統,可以做到線性擴展。

多租戶

隨著日志系統不斷發展,全網日志的 Qps 越來越大,并且部分用戶對日志的實時性、準確性、分詞、查詢等需求越來越多樣。

 

一個百億級日志系統是怎么設計出來的?

 

 

為了滿足這部分用戶的需求,日志系統支持多租戶的的功能,根據用戶的需求,分配到不同的租戶中,以避免相互影響。

 

一個百億級日志系統是怎么設計出來的?

 

 

針對單個租戶的架構如下:

  • SDK:可以根據需求定制,或者采用天網的 TrackAppender 或 SkynetClient。
  • Kafka 集群:可以共用,也可以使用指定 Kafka 集群。
  • Spark 集群:目前的 Spark 集群是在 Yarn 集群上,資源是隔離的,一般情況下不需要特地做隔離。
  • 存儲:包含 ES 和 Hbase,可以根據需要共用或單獨部署 ES 和 Hbase。

現有問題和未來規劃

目前,有贊日志系統作為集成在天網里的功能模塊,提供簡單易用的搜索方式,包括時間范圍查詢、字段過濾、NOT/AND/OR、模糊匹配等方式。

并能對查詢字段高亮顯示,定位日志上下文,基本能滿足大部分現有日志檢索的場景。

但是日志系統還存在很多不足的地方,主要有:

  • 缺乏部分鏈路監控:日志從產生到可以檢索,經過多級模塊,現在采集,日志緩沖層還未串聯,無法對丟失情況進行精準監控,并及時推送告警。
  • 現在一個日志模型對應一個 Kafka Topic,Topic 默認分配三個 Partition。

由于日志模型寫入日志量上存在差異,導致有的 Topic 負載很高,有的 Topic 造成一定的資源浪費,且不便于資源動態伸縮。

Topic 數量過多,導致 Partition 數量過多,對 Kafka 也造成了一定資源浪費,也會增加延遲和 Broker 宕機恢復時間。

  • 目前 Elasticsearch 中文分詞我們采用 ikmaxword,分詞目標是中文,會將文本做最細粒度的拆分,但是日志大部分都是英文,分詞效果并不是很好。

上述的不足之處也是我們以后努力改進的地方,除此之外,對于日志更深層次的價值挖掘也是我們探索的方向,從而為業務的正常運行保駕護航。
 



Tags:日志   點擊:()  評論:()
聲明:本站部分內容來自互聯網,內容觀點僅代表作者本人,如有任何版權侵犯請與我們聯系,我們將立即刪除。
▌相關評論
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
▌相關推薦
一:作用Ngx_http_log_module:定義日志格式,并且以指定的格式保存。二:示例配置log_format compression '$remote_addr - $remote_user [$time_local] ' '"$request...【詳細內容】
2019-10-09   日志  點擊:(4)  評論:(0)  加入收藏
日志的三種類型# 內核及系統日志:這種日志數據由系統服務rsyslog統一管理,根據其主配置文件/etc/rsyslog.conf中的設置決定將內核消息及各種系統程序消息記錄到什么位置。系統...【詳細內容】
2019-10-08   日志  點擊:(4)  評論:(0)  加入收藏
背景程序開發調試中,不可缺少的便是日志管理,常用的日志管理框架有如下幾種: Log4j:Apache Log4j是一個基于Java的日志記錄工具。它是由Ceki Gülcü首創的,現在則是Apac...【詳細內容】
2019-09-29   日志  點擊:(4)  評論:(0)  加入收藏
什么是蜘蛛日志?所謂的蜘蛛日志就是當搜索引擎向服務器發送請求時產生的訪問記錄文件。每個網站都會有日志文件,但是很多時候,日志文件只有在網站出現問題的時候才會被查閱。...【詳細內容】
2019-09-26   日志  點擊:(8)  評論:(0)  加入收藏
抽空總結一下Oracle 物化視圖和物化視圖日志的一些概念和相關命令,僅供參考。 一、相關概念物化視圖是將查詢預先定義在結構中,并手動或者定期刷新將結果存儲在物化視圖段中,也...【詳細內容】
2019-09-26   日志  點擊:(13)  評論:(0)  加入收藏
隨著 Web 技術不斷發展,Web 被應用得越來越廣泛,現在很多企業對外就一個網站來提供服務,所以網站的業務行為,安全性顯得非常重要。正如安全行業的一句話:“世界上只有兩種人,一種是知道自己被黑了的,另外一種是被黑了還不知...【詳細內容】
2019-09-20   日志  點擊:(14)  評論:(0)  加入收藏
最近想把之前做過的日志項目及個人的思考梳理一下,于是有了本文。背景我們這邊應用部署的環境比較復雜,主要有以下幾種: 機器直接部署 通過原生docker部署 通過kubernates集群...【詳細內容】
2019-09-19   日志  點擊:(15)  評論:(0)  加入收藏
日志管理工具有Splunk、Sumo Logic、LogStash、GrayLog、Loggly和PaperTrails等等,數不勝數。日志就像石油,二十多年了我們一直想擺脫它,卻一直沒有做到。為了處理日益增長的數...【詳細內容】
2019-09-16   日志  點擊:(15)  評論:(0)  加入收藏
sql server在運行過程中,尤其是使用一些數據交互操作過程中,會產生大量的日志;日志的好處在于,會我們可以在數據庫崩潰的時候,數據還原幫助。但在實際工作中,數據的備份和增量做好...【詳細內容】
2019-09-16   日志  點擊:(27)  評論:(0)  加入收藏
提到日志分析,很多人首先想到的是Splunk。Splunk的成功促使其他廠商開始他們的日志分析研究歷程,不論是開源還是商業。本文將會提供Splunk以外的其他日志分析服務。 Elasticse...【詳細內容】
2019-08-28   日志  點擊:(25)  評論:(0)  加入收藏
一、Java打日志的基礎以前自己自學的時候,排查問題只會寫下面的代碼:try { // doSomething} catch (Exception e) { e.printStackTrace();}----------// 查看某個數據的值時:Sy...【詳細內容】
2019-08-28   日志  點擊:(18)  評論:(0)  加入收藏
又是一個吃著火鍋唱著歌的日子,同事A過來吐槽說,某某交換機的風扇壞了,要不是今天過去例行巡檢設備,發現設備聲音不對勁還發現不了這個問題。作為一名資深網工其實你深深的知道...【詳細內容】
2019-08-28   日志  點擊:(37)  評論:(0)  加入收藏
概述最近某臺oracle數據庫中的歸檔日志太多了,一天都有幾十G的歸檔日志產生,總是提示歸檔空間滿,導致orcle總是與服務器斷開,所以就寫了個定期清理Oracle歸檔日志的腳本,先看下...【詳細內容】
2019-08-15   日志  點擊:(54)  評論:(0)  加入收藏
一、主機系統日志收集:創建主機日志收集目錄:--Unix/Linux創建存放系統日志的文件夾:# mkdir -p /var/collect/OS1、LinuxLinux系統日志文件: /var/log/messages將最近1000條日...【詳細內容】
2019-08-01   日志  點擊:(20)  評論:(0)  加入收藏
1.MySQL中常用工具1.1 mysql該mysql不是值mysql服務,而是指mysql的客戶端工具。語法 :mysql [options] [database]1.1.1連接選項 1.1.2 執行選項-e, --execute=name : 執行sql...【詳細內容】
2019-07-26   日志  點擊:(35)  評論:(0)  加入收藏
在我們日常使用電腦的時候,有時會想知道計算機的開機和關機歷史,用來檢查是否有人未經授權登陸或者是否有被入侵。大多數情況下,系統管理員需要了解經常查看系統日志,以便進行故...【詳細內容】
2019-07-17   日志  點擊:(192)  評論:(0)  加入收藏
概述今天主要介紹一下mysql數據庫一般修改InnoDB redo log事務日志文件大小的步驟,然后用一個實驗來演示一下,下面一起來看看吧~基本步驟在MySQL 5.5版本里,如果想修改ib_logfi...【詳細內容】
2019-07-16   日志  點擊:(69)  評論:(0)  加入收藏
概述今天主要分享一款MySQL日志分析神器--mysqlsla,對于我們分析mysql數據庫的三大日志還不錯,這里介紹一下。什么是mysqlsla?Mysqlsla 是daniel-nichter 用perl 寫的一個腳本,...【詳細內容】
2019-07-11   日志  點擊:(61)  評論:(0)  加入收藏
實際工程中NWR是寬松模式,中心節點(第三方zookeeper)讀取R個副本,選擇R個副本中 版本號最高 的為新的primary。還可以利用paxos等協議選出新的primary,每個節點以自己的版本號...【詳細內容】
2019-07-09   日志  點擊:(24)  評論:(0)  加入收藏
日志是記錄系統中各種問題信息的關鍵,也是一種常見的海量數據。 日志平臺為集團所有業務系統提供日志采集、消費、分析、存儲、索引和查詢的一站式日志服務。主要為了解決...【詳細內容】
2019-06-18   日志  點擊:(84)  評論:(0)  加入收藏
推薦資訊
相關文章
欄目更新
欄目熱門
31选7开奖11185