聊聊日志聚類算法及其在工作中的應用場景
隨著AI模型的普及應用與高速發展,主要的云廠商與AI大廠提供了對應的服務支持,使得業務的應用可以輕松對接AI算法,使其在實際項目中落地。
我個人也是極度推崇在項目中應用AI算法更輕松更數智化的兌現功能。
雖然AI門檻很高,但隨著時間的推移與AI模型的發展,我相信對于普通的程序猿來說,還是可以入手且實際開發應用AI算法模型。
閱讀《基于 Flink ML 搭建的智能運維算法服務及應用》一文后,對其中日志聚類算法有了些思考。
概述
日志聚類,簡而言之是對海量日志的分析;其分析處理鏈路可以分為如下流程:日志采集 -> 預處理 -> 分詞和特征表示 -> 聚類和標注;也可以概述為數據收集及預處理、文本向量化、文本相似度計算、文本分類四部分。
算法模型分析
針對如上的鏈路流程做一個拆分敘述。
日志采集
常用的日志采集方案是寫完數據庫多寫一遍ElasticSearch;目前我個人推薦的方案是基于Flink CDC組件來采集。
預處理
一般來說,預處理階段是在業務中常用的一個階段,根據業務的不同做不同的處理,比如精簡文本刪除不必要的語氣詞、標點符號、替換占位符等等。日志一般都是非結構化的文本類型數據,由于開發人員的開發習慣與團隊開發規范的約束,每個人記錄的日志模板可能是不一樣的,因此,需要對日志文本做一次常見的預處理—————刪除不必要的語氣詞等。
分詞和特征表述
分詞
其實對于分詞,我一開始想到的就是ElasticSearch中很重要的一個組件模塊——————分析器。分析器由字符過濾器、分詞器、詞語(token)過濾器組成。在我看來,預處理流程與分詞流程其實可以歸納為分析器的處理。
對于分詞,當前主要有兩種算法,一種是基于已有的詞典庫,一種是基于統計的機器學習。
基于詞典的分詞算法分為以下幾種:正向最大匹配法、逆向最大匹配法和雙向匹配分詞法等?;谠~典的分詞算法是應用最廣泛、分詞速度最快的?;诮y計的機器學習算法法是HMM、CRF、SVM、深度學習等算法,比如stanford、Hanlp分詞工具是基于CRF算法。
常見的分詞器都是使用機器學習算法和詞典相結合,一方面能夠提高分詞準確率,另一方面能夠改善領域適應性。
特征表述
將分詞后的詞作為特征列表,基于此列表,對日志做向量化的構建。通過TF-IDF算法對關鍵詞做統計分析,得到詞向量后,再做一次相似度比較,最終就可以得到向量。
其實我理解這里就是在做文本相似度匹配的處理。一般都是處理文本向量化。
聚類
最后通過聚類算法:層次聚類算法、K-means算法等來得到我們的聚類結果,也就是各個日志模板所對應的日志類別。
總結
在上份工作中,其實就遇到了類似的問題,當時我們有大量的日志數據,且需要基于這些日志數據做分析推送對應的解決策略以及解答給客戶或是一線。但由于當時所有的開發人員都做的是業務開發,對機器學習及應用壓根就不清楚(嚴格來說,都沒有考慮過從這方面入手),所以導致當時的運維量和客戶的反饋不太好;當時我花了不少時間分析過如何解決,受限于當時的認知與能力,畫過一個簡單的流程圖,但很難落地,而且沒有足夠的理論與算法的支持,相比較現在的解決方案,那真是沒眼看。目前來看,日志聚類的應用完全是可以落地到當時的業務上的。
參考

浙公網安備 33010602011771號