文章大綱一、日志系統概念介紹 ![]() 一、日志系統概念介紹1. 簡介日志主要包括系統日志、應用程序日志和安全日志。系統運維和開發人員可以通過日志了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解服務器的負荷,性能安全性,從而及時采取措施糾正錯誤。 2. 日志分類日志是帶時間戳的基于時間序列的機器數據,包括IT系統信息(服務器、網絡設備、操作系統、應用軟件)、物聯網各種傳感器信息。日志可以反映用戶行為,是真實數據。 ![]() 日志處理v1.0 日志處理v2.0 日志處理v3.0 3. 日志實時性分析![]() 實時 準實時 平臺在幾分鐘后完成重啟,我們可以再登錄填寫,該情況并不造成原則性的影響。因此,我們可以將其列為準實時的級別。 除了直接采集錯誤與異常,我們還需要進行分析。例如:僅知道某人的體重是沒什么意義的,但是如果增加了性別和身高兩個指標,那么我們就可以判斷出此人的體重是否為標準體重。 也就是說:如果能給出多個指標,就可以對龐大的數據進行去噪,然后通過回歸分析,讓采集到的數據更有意義。 此外,我們還要不斷地去還原數字的真實性。特別是對于實時的一級應用,我們要能快速地讓用戶明白他們所碰到現象的真實含義。 例如:商家在上架時錯把商品的價格標簽 100 元標成了 10 元。這會導致商品馬上被搶購一空。 但是這種現象并非是業務的問題,很難被發現,因此我們只能通過日志數據進行邏輯分析,及時反饋以保證在幾十秒之后將庫存修改為零,從而有效地解決此問題。可見,在此應用場景中,實時分析就顯得非常有用。 最后是追溯,我們需要在獲取歷史信息的同時,實現跨時間維度的對比與總結,那么追溯就能夠在各種應用中發揮其關聯性作用了。 4. 完整的日志系統包含內容(1)收集-能夠采集多種來源的日志數據 ELK提供了一整套解決方案,并且都是開源軟件,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用。目前主流的一種日志系統。 5. 完整的日志系統作用(1)信息查找。通過檢索日志信息,定位相應的bug,找出解決方案。 二、ELK日志系統介紹1. ELK組成成分ELK Stack是開源日志處理平臺解決方案,背后的商業公司是elastic(https://www./)。它由日志采集解析工具Logstash、基于Lucene的全文搜索引擎Elasticsearch、分析可視化平臺Kibana組成。目前ELK的用戶有Adobe、Microsoft、Mozilla、Facebook、Stackoverflow、Cisco、ebay、Uber等諸多廠商。 2. ELK工作原理展示圖![]() 3. Elasticsearch介紹Elasticsearch是基于Lucene的近實時搜索平臺,它能在一秒內返回你要查找的且已經在Elasticsearch做了索引的文檔。它默認基于Gossip路由算法的自動發現機制構建配置有相同cluster name的集群,但是有的時候這種機制并不可靠,會發生腦裂現象。鑒于主動發現機制的不穩定性,用戶可以選擇在每一個節點上配置集群其他節點的主機名,在啟動集群時進行被動發現。 4. Logstash介紹Logstash事件處理有三個階段:inputs → filters → outputs。是一個接收,處理,轉發日志的工具。支持系統日志,webserver日志,錯誤日志,應用日志,總之包括所有可以拋出來的日志類型。 ![]() 5. Kibana介紹Kibana是專門設計用來與Elasticsearch協作的,可以自定義多種表格、柱狀圖、餅狀圖、折線圖對存儲在Elasticsearch中的數據進行深入挖掘分析與可視化。下圖定制的儀表盤可以動態監測數據庫集群中每個數據庫實例產生的各種級別的日志。 ![]() 6. ELK整體方案ELK中的三個系統分別扮演不同的角色,組成了一個整體的解決方案。Logstash是一個ETL工具,負責從每臺機器抓取日志數據,對數據進行格式轉換和處理后,輸出到Elasticsearch中存儲。Elasticsearch是一個分布式搜索引擎和分析引擎,用于數據存儲,可提供實時的數據查詢。Kibana是一個數據可視化服務,根據用戶的操作從Elasticsearch中查詢數據,形成相應的分析結果,以圖表的形式展現給用戶。 ![]() 在前期部署階段,主要工作是Logstash節點和Elasticsearch集群的部署,而在后期使用階段,主要工作就是Elasticsearch集群的監控和使用Kibana來檢索、分析日志數據了,當然也可以直接編寫程序來消費Elasticsearch中的數據。 在上面的部署方案中,我們將Logstash分為Shipper和Indexer兩種角色來完成不同的工作,中間通過Redis做數據管道,為什么要這樣做?為什么不是直接在每臺機器上使用Logstash提取數據、處理、存入Elasticsearch? 首先,采用這樣的架構部署,有三點優勢:第一,降低對日志所在機器的影響,這些機器上一般都部署著反向代理或應用服務,本身負載就很重了,所以盡可能的在這些機器上少做事;第二,如果有很多臺機器需要做日志收集,那么讓每臺機器都向Elasticsearch持續寫入數據,必然會對Elasticsearch造成壓力,因此需要對數據進行緩沖,同時,這樣的緩沖也可以一定程度的保護數據不丟失;第三,將日志數據的格式化與處理放到Indexer中統一做,可以在一處修改代碼、部署,避免需要到多臺機器上去修改配置。 其次,我們需要做的是將數據放入一個消息隊列中進行緩沖,所以Redis只是其中一個選擇,也可以是RabbitMQ、Kafka等等,在實際生產中,Redis與Kafka用的比較多。由于Redis集群一般都是通過key來做分片,無法對list類型做集群,在數據量大的時候必然不合適了,而Kafka天生就是分布式的消息隊列系統。 ![]() 三、互聯網行業日志處理方案介紹1. 新浪新浪采用的技術架構是常見的Kafka整合ELK Stack方案。Kafka作為消息隊列用來緩存用戶日志;使用Logstash做日志解析,統一成JSON格式輸出給Elasticsearch;使用Elasticsearch提供實時日志分析與強大的搜索和統計服務;Kibana用作數據可視化組件。該技術架構目前服務的用戶包括微博、微盤、云存儲、彈性計算平臺等十多個部門的多個產品的日志搜索分析業務,每天處理約32億條(2TB)日志。 2. 騰訊騰訊藍鯨數據平臺告警系統的技術架構同樣基于分布式消息隊列和全文搜索引擎。但騰訊的告警平臺不僅限于此,它的復雜的指標數據統計任務通過使用Storm自定義流式計算任務的方法實現,異常檢測的實現利用了曲線的時間周期性和相關曲線之間的相關性去定義動態的閾值,并且基于機器學習算法實現了復雜的日志自動分類(比如summo logic)。 3. 七牛七牛采用的技術架構為Flume+Kafka+Spark,混部在8臺高配機器。根據七牛技術博客提供的數據,該日志處理平臺每天處理500億條數據,峰值80萬TPS。 四、參考文章 |
|