一眼看盡上億日誌-日誌服務(SLS)智慧聚類(LogReduce)
業務的高速發展,對系統穩定性提出了更高的要求,各個系統每天產生大量的日誌,你是否曾擔心過:
- 系統有潛在異常,但被淹沒在海量日誌中
- 機器被入侵,有異常登入,卻後知後覺
- 新版本上線,系統行為有變化,卻無法感知
這些問題,歸根到底,是資訊太多、太雜,不能良好歸類,同時記錄資訊的日誌,往往還都是無Schema,格式多樣,歸類難道更大。
現在日誌服務,提供實時日誌智慧聚類(LogReduce)功能,根據日誌的相似性進行歸類,快速掌握日誌全貌,主要功能和特性:
- 支援任意格式日誌:Log4J、Json、單行(syslog)
- 億級資料,秒級出結果
- 日誌經任意條件過濾後再Reduce
- 對Reduce後Pattern,根據signature反查原始資料
- 不同時間段Pattern比較
- 動態調整Reduce精度
主要應用場景:
- DevOps(問題定位、異常檢測、版本回歸等)
- 安全、入侵檢測
- 審計
功能演示
接下來,我們以Devops場景為例,看看LogReduce如何快速定位應用故障。
排障實戰
線上發生異常的時候,往往會列印大量的錯誤日誌,在下圖中,是系統請求堵塞情況下,系統記錄的日誌,短短5分鐘記錄了3千多萬行錯誤日誌,而圖中的兩個尖峰到底是哪些日誌突漲引起的?發生異常的根源又是什麼?

通常的處理方式,總是不停過濾,排除無關錯誤日誌,如:
ERROR not WARNING not quota not InternalServerError not sync not RPCChannelBase.cpp not tcpcomponent.cppnot easy_connection.c
排查了N個條件後,發現出現了"queue full"的錯誤,而這只是一個表象,到底什麼原因導致佇列堵塞呢?看來,還需要再過濾排查。

然後,有了”日誌聚類“功能後,只要一次點選,通過LogReduce快速聚類,結果一目瞭然:
- 最多的錯誤,是3000W+多條queue full,是堵塞的表象
- 其次,是寫入quota超過限制的錯誤,和堵塞無關
- 接著,底層網路請求出現timeout,對於佇列模型,大量的timeout很容易引起堵塞
- 最後,第四類日誌pattern中,顯示訪問某個服務,獲取worker訪問地址出現timeout,從pattern中,可定位問題機器的ip和端,直接確定異常根源。
通過以上簡單例子,可以看到,海量日誌經LogReduce處理後,異常歸類非常清楚,大大提高故障排查效率。
其他功能介紹
通過Pattern反查原始資料
在進行LogReduce時,相同pattern中變化部分(變數)會被"*" 號代替,SLS在進行reduce的時候,內部會為每條日誌標記一個signature,通過signature可以反查原始日誌, 如:

點選子Pattern count連線,檢視原始日誌。

Reduce精度動態調整
不同日誌特徵不盡相同,預設相似度計算,不一定能完全滿足,可能導致聚類結果過於粗略或細節太多,在這種情況下,可以通過動態聚類精度,獲取/隱藏更多細節。

Pattern對比
在新版本上線,往往希望知道,有哪些新出現的日誌類別,哪類日誌在數量上有明顯的抖動,這樣的版本回歸對比需求,可以使用LogReduce + cmp來滿足(控制檯後續會提供LogCompare的專門頁面)。
ERROR | select v.signature, v.pattern, coalesce(v.cmp[1],0) as count_now, coalesce(v.cmp[2],0) as count_before, coalesce(v.cmp[1],0) - coalesce(v.cmp[2],0) as count_diff from ( select p.signature as signature , arbitrary(p.pattern) as pattern , compare(p.count,300) as cmp from (select log_reduce() as p from log) group by p.signature )vorder by count_diff desc
更多型別日誌場景
Syslog
/var/log/messages作為系統核心日誌檔案,記錄了系統執行時重要資訊,如磁碟、網路、記憶體等各類硬體錯誤資訊,也包括root許可權執行的各命令,系統登入等重要事件,對於故障診斷、入侵檢測都是首要關注的檔案。
同時,也由於日誌內容複雜多樣,格式不統一,未過濾定義的事件,往往容易淹沒在海量日誌中。通過LogReduce,可快速合併相似pattern,發現異常事件。
如下圖中,將幾百萬事件快速聚合成幾十個Pattern後,一眼就能看到網絡卡異常資訊。


Log4J日誌
Sql日誌
通過以上樣例可以發現,日誌服務(SLS)提供的日誌聚類功能,對於日誌的樣式無任何限制,只會根據日誌相似性,提取出通用Pattern,快速獲取日誌的整體概覽。
後記
圍繞日誌,挖掘其中更大價值,一直是我們團隊所關注。在原有日誌實時查詢基礎上,今年SLS在DevOps領域完善了上下文查詢、實時Tail和智慧聚類,以提高問題調查效率;同時在日誌分析上,提供多種時序資料的異常檢測和預測函式,來做更智慧的檢查和預測;最後,資料分析的結果,可以觸發報警,並呼叫webhook進行關聯行動。

在日誌智慧聚類上,後續我們計劃:
- 根據Pattern的頻率變化,結合機器學習演算法,自動檢測出異常Pattern
- 提供LogReduce cmp函式並整合在控制檯,簡化複雜sql的編寫
- 加入反饋機制,如對reduce結果打分,以提高reduce的準確度