巧用字典樹算法,輕鬆實現日誌實時聚類分析

by 田富龍
在這裏插入圖片描述
日誌分析對於企業運維來說尤爲重要,運維人員如不能實時瞭解服務器的安全狀況,會給企業造成難以估計的損失。對日誌進行分析,不僅可以瞭解到軟、硬件設備的運行狀況,還可以瞭解到報錯日誌的源頭、服務器上正在發生的安全事件,判斷錯誤是由應用引發的還是系統本身引起的,從而及時進行補救,以提高企業軟、硬件設備的高可用性。

然而,隨着服務器數量逐漸增加,日誌數據也與日俱增,面對這種境況,利用傳統的方式對日誌進行分析,顯然已經不能滿足企業的要求。此時,基於AI技術的日誌分析方式就顯得尤爲重要。

本文提出的實時日誌聚類算法,通過提取日誌模板方式,能夠有效幫助運維人員進行診斷以及定位問題,提高解決問題的效率,從而起到事半功倍的效果。

在這裏插入圖片描述

在這裏,我們將介紹實時日誌聚類算法中用到的子算法–字典樹,它能極大提升日誌聚類算法的效率,使實時日誌聚類算法能夠在極短的時間內,從海量的日誌信息中提取出日誌模板。

字典樹(Trie),又稱前綴樹,是哈希樹(Hash Tree)的一種變種。它的核心思想是以空間換時間,常常用於統計、排序和保存大量的字符串(但不僅限於字符串)。在Trie的每個 Node中保存一個字符以及該節點的所有子節點,並且每個Node中帶有一個標誌位,用來標識由根節點出發到該節點爲止是否能組成一個完整的字符串。

通常規定根節點對應空字符串,由於Trie是一種有序樹結構,所以同一個節點的所有子孫節點都有相同的前綴。一般情況下,不是所有的節點都能組成一個完整的字符串,只有葉子節點和部分內部節點所對應的節點才能組成一個完整的字符串。

字典樹的一個典型應用是,用於搜索引擎系統中的文本詞頻統計,它的最大優點是:利用字符串的公共前綴來減少查詢時間,最大限度地減少無謂的字符串以達到提高效率的目的,查詢效率高。

字典樹的使用,主要包含插入、查找、刪除三方面:

插入

例如,向字典樹中插入useless、hope、inter三個字符串,字符串中的每個字符作爲一個單獨的Node插入到字典樹中,每個Node包含兩部分:

①根節點開始到該節點爲止是否爲一個完整的單詞

②節點的所有子節點,用map來保存

當字符串插入完成之後,字典樹的結構如下圖所示,其中紅色節點表示該節點是否爲一個完整字符串的結尾。
在這裏插入圖片描述

插入useless過程

在此基礎上,繼續插入單詞interact,如下圖所示:
在這裏插入圖片描述

插入單詞interact過程

查找

字典樹的查找比較簡單,遍歷查找字符串的字符,如果每個節點都存在,並且待查找字符串的最後一個字符對應的Node的isWord屬性爲True,則表示該單詞存在。如字符串apple存在,app則不存在,因爲p的isWord屬性爲False,不對應一個完整字符串的結束。

刪除

字典樹的刪除操作主要有以下2種情況:

1)待刪除字符串是另一個字符串的前綴

如果待刪除的單詞是另一個單詞的前綴,只需要把該單詞的最後一個節點的 isWord 屬性值改成False即可。比如Trie中存在
inter 和interact 這兩個字符串,若要刪除
inter 字符串,只需要把字符 r 對應的Node的 isWord 屬性改成 False,如下圖所示:
在這裏插入圖片描述
字典樹刪除inter過程

2)待刪除字符串中對應的Node包含多個分支

如果待刪除的字符串中字符對應的Node可能有多個分支,需要從該字符串最後一個字符對應的Node開始遞歸向上進行刪除,若節點沒有子節點,則將該節點刪除,直到遇到節點有多個子節點,遞歸停止。例如在Trie中刪除hope、interest字符串過程,如下圖所示:
在這裏插入圖片描述
字典樹刪除hope過程
在這裏插入圖片描述
字典樹刪除interest過程

字典樹算法是典型的空間換時間的算法,雖然對空間的消耗很大,但是利用字符串的公共前綴來降低查詢時間,查詢效率非常高;而且也可以使用壓縮字典樹(Compressed Trie)來降低對內存的消耗,增加硬件資源的有效利用率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章