四川中電啟明星信息技術有限公司 隆 振 張 捷
日志平臺系統在這樣的背景下孕育而生,它是一個集日志采集、結構化、索引、分析、展現于一體的平臺系統,極大簡化運維人員的日常工作,提高工作效率,使得相關人員能夠很快的定位故障點并進行問題處理。同時,通過日志平臺定制日志分析規則、利用定時任務對系統定時分析統計,生成報表和告警信息。實現對應用系統及相關設備的自動化監控與預警。
日志平臺系統由采集層、處理層、存儲層、服務層及展示層5部分構成構成。
采集層支持多種Agent采集,支持Filebeat、JDBC、 RPC、Syslog等方式的數據采集。
(1)Filebeat
Filebeat 是一個日志文件托運工具,其十分輕量,并且十分穩定。Filebeat會監控日志目錄或者制定的日志文件,追蹤讀取這些文件(追蹤文件的變化,持續讀取),并轉發到指定的output。
(2)JDBC
基于Apache Flume框架實現,主要通過周期性的執行查詢語句,從數據庫中獲取數據,并加以包裝處理后,發送到指定的位置。
(3)RPC
RPC(Remote Procedure Call),即遠程過程調用,實現包括服務消費者(即服務調用者)和服務提供者。一次RPC 的調用過程為:服務調用方調用RPC 請求到服務方,服務提供方根據調用方提供的參數執行請求方法,將執行結果返回給調用方。
(4)syslog
Unix/Linux系統中的大部分日志都是通過一種叫做syslog的機制產生和維護的。syslog是一種標準的協議,分為客戶端和服務器端,客戶端是產生日志消息的一方,而服務器端負責接收客戶端發送來的日志消息,并做出保存到特定的日志文件中或者其他方式的處理。
處理層利用Nginx反向代理實現不信任數據過濾,并將多個收集器組合在一起,統一收集采集端發送來的數據,收集的數據被送至Kafka,Kafka是一種高吞吐量的分布式發布訂閱消息系統,收集端生產的數據可以配置多個消費者,完整的消費。同時,當數據處理量不斷擴大時也可以非常方便的進行橫向擴展。
在日志平臺系統中日志信息通過處理,可消費保存到HDFS、ElasticSearch及實時計算框架spark streaming/stome等。
日志平臺系統使用HDFS和ElasticSearch來進行日志信息進行存儲。HDFS上存儲日志原文,用于歸檔。ElasticSearch則存儲日志信息的索引,用于提供準實時的索引服務。隨著ElasticSearch上存儲的數據越來越多,也會將時間相對久遠的索引信息遷移到HDFS上進行歸檔保存。
服務層提供日志信息的準實時檢索服務、實時計算服務及離線計算服務三大服務
(1)準實時檢索服務
準實時檢索主要服務于技術人員對日志的分析,也適用于一些對實時性要求不太高的統計計算。檢索基于ElasticSearch的全文檢索及統計功能,其中全文檢索提供基礎語法、SQL語法、DSL語法三種方式的數據檢索,方便用戶定位數據,統計功能提供基于時間分段、字段統計、數值分段、時間直立方等聚合查詢服務。
(2)實時計算服務
對實時性要求非常高的數據查詢統計需求,采用spark streaming/stome框架,對數據進行處理,實現日志數據查詢分析的秒級響應。
(3)離線計算服務
對于日志數據量特別大歷史數據,采用MapReduces進行離線計算,并將計算結果存入ElasticSearch、HDFS,方便查看。
展示層包含系統配置、日志接入配置等管理用戶界面和日志檢索統計、告警、任務、報表功能普通用戶界面。
(1)管理用戶界面
實現對系統權限培訓、日志接入配置、采集Agent監控、ealasticsearch索引管理、消息中間件管理等。實現日志接入配置、日志采集處理組件監控、節點擴展優化的管理功能。
在本系統中,Agent的連續通信時間間隔以曲線圖的形式持續更新。計算公式為 timestamp(本次)-timestamp(臨近的上一次)。理論上時間間隔應該保持為一條直線,如果出現劇烈波動,如變大,可能存在網絡異常,間隔大,變小,則可能出現日志量陡增,需要考慮是否添加處理節點,平衡分擔數據處理。
系統允許在沒有定義解析規則的情況下,就開始介入日志。日志以原文的形式,索引到ElasticSearch中。而后針對具體的日志內容,制定具體的解析規則。日志解析的粒度跟日志的格式,及定義的解析規則密切相關。在定義解析規則后,即可將規則應用到處理端,經過一定的緩存時間后,解析規則就會生效,接下來接入的日志便可按照解析的規則提取生成字段。
(2)普通用戶界面
提供日志全文檢索及日志分析統計功能:其中全文檢索提供三種查詢語法,包括基礎語法、SQL語法、DSL語法。基礎語法支持模糊匹配、正則表達式、通配符、短語等查詢方式;SQL語法支持基本的列表查詢、聚合查詢以及兩個查詢對象的join、union、minus三種關聯查詢,DSL時json格式的查詢語言,基礎語法與SQL語法最終在進行數據檢索時也會由相關程序轉換為DSL語法進行查詢,所以用戶可以直接編寫json格式的dsl查詢語言檢索ealasticsearch中的日志數據。日志分析統計提供日志數據聚合分析,包含事件計數、時間分段、數值分段、字段值分類、字段數值、時間值立方等統計方式,用戶可以根據實際需要靈活選擇統計方式、統計字段、展示方式等,并可以將統計信息保存為定時任務或者圖表。
為實現日志信息的自動化查詢統計與監控高級,實現定時任務、告警、報表、dashboard等功能,其中定時任務根據用戶設置的檢索條件、統計規則、執行計劃等信息,通過啟動定時任務,日志平臺將定時執行任務,并將統計結果存儲在ealasticsearch中,方便查閱與二次分析;告警根據用戶設置的檢索條件、統計規則、執行計劃、觸發條件、告警信息等,通過啟動告警,日志平臺將定時執行告警,并將統計結果存儲在ealasticsearch中,如果查詢統計觸發了告警規則,系統自動將告警信息以郵件或消息的形式發送給指定用戶,方便用戶及時發現并解決問題;報表將系統中已保存的通過組合起來,通過定時任務生成pdf格式的報表文件,并將文件存儲在系統中提供下載,同時將報表文件直接發送到指定的用戶郵箱中;dashboard用于將中的已存圖表、告警信息、已存搜索、字段TOP值、日志事件計數等組合到一個頁面中,方便實時數據查閱。
不同格式的日志文件分布在成百上千的服務器上,服務器可能是Linux,也可能是Windows。因此,在選擇的日志采集工具應該具備以下特點:
跨平臺:服務器大部分是Linux,但Windows服務器又有很多。在不同平臺間切換最好能做到無縫。
可擴展:能夠根據需求方便的增加功能,類似插件式,工具提供框架和基礎功能,其他的功能可以通過編寫插件的形式提供。
可監控:提供接口能實時監控到工具的運行狀態,因為工具的錯戳、掛起,就意味著日志的丟失。
容錯性:程序內部出現異常時,要能做到日志的回滾。
文檔齊全:開發人員持續更新,使得我們能夠快速的入手,持續更新說明開發人員關注用戶的反饋,并且積極修正Bug。
開源:有問題能夠從代碼級別分析問題,并且有社區支持。
部署簡單:最好能做到“粘貼-運行”,便于運維自動化工具部署。
在比較了Filebeat、Flume和Scribe。它們三者大體功能一致,都扮演了一個數據傳輸者的角色,可以自定定義數據從哪里來(例如日志,文中稱Source),日志到哪里去(例如存到Elastic-Search,文中稱Target),同時可以對通過他的日志做一次預處理。除此之外,Flume和Scribe中間還有一層換成,可以簡單的理解為一個消息隊列。
多種多樣的數據來源的日志數據,按照用戶設置的解析規則進行數據解析,如果解析規則有變化,需要暫停數據處理端agent,待更新規則后再次啟動處理端agent。為保障日志處理的高效穩定,可以啟動多個處理實例,并且可以動態添加處理實例,各處理實例間是對等關系,共同參與日志數據處理。

日志進入索引文件后,用戶可以像使用搜索引擎一樣使用本系統進行日志搜索,查找滿足特定條件的日志。
如果用戶對sqlSQL語言和DSLdsl語言有使用經驗,可以使用類SQL查詢語法、DSLdsl查詢語法進行更為靈活的查詢統計搜索框編程,達到更為靈活,高效的復雜邏輯處理更為快速的定位問題、解決問題,即搜即得。直達問題本質。
對特定事件、固定閾值等多種方式的定時監控告警。
使用電子郵件、遠端接口等多種方式發送自定義告警內容。
以PDF、PNG等形式發送時日報、周報、月報。
通過Agent、API實時收集系統產生的事件,例如訪問、點擊等。
通過Spark Stream接口進行流計算,例如分析用戶使用使用app的習慣,什么時候是高峰期,主要使用的功能等,便于引導產品的方向和精準運營。
對日志進行數據倉庫離線歸檔。
使用領域:流媒體、電子商務、移動分析、游戲運營等。
通過Agent實時手機日志到日志服務,從此不再擔心誤刪、或被黑客刪除。
通過日志查詢功能,快速分析訪問行為,例如查詢某個賬戶、某個對象、某個操作的操作記錄。
通過大數據計算服務隊日志進行長時間存儲,滿足符合規定的審計需求。
適用領域:電子商務、政府平臺、網站等。
開發過程中,對客戶端、移動設備、服務端、模塊等加入日志,并通過ID進行關聯。
收集各個模塊日志,通過云監控、流計算等實時獲取訪問情況。
當請求或訂單發生錯誤是,開發無需登錄服務器,直接通過日志查詢功能對錯誤關鍵字、次數、關聯影響等進行查詢,快速定位問題,減少影響覆蓋面。
適用領域:交易系統、訂單系統、移動網絡等。
采用基于分布式搜索引擎的實時日志采集與處理技術,實現自動化的系統監控,減少故障排查時間和業務中斷時間,提高系統的服務響應能力和服務水平,將系統運維人員充枯燥繁瑣的例行工作中解放出來,將精力投入到系統的優化與提升當中去。
同時采用多任務分布式技術對海量日志進行分析挖掘,可以建立科學的分析模型,使得對日志的分析深度與事件的識別準確度得到進一步的提升。通過日志分析預警,能提前對潛在的風險定性或定量的評估,從而采取應對措施來降低風險。這對提高應用系統的安全性、穩定性及其服務能力,保障企業生產正常開展具有重大的意義。
[1](美)拉斐爾.酷奇(Rafal Kue)等著,張世武等譯.深入理解ElasticSearch(原書第2版)[M].北京:機械工業出版社,2017,5.
[2]分布式多用戶能力的全文搜索引擎ElasticSearach https://www.elastic.co/.
[3]分布式式日志收集系統Apache Flume http://flume.apache.org/.
[4]高吞吐量的分布式發布訂閱消息系統Apache Kafka http://kafka.apache.org/.