當前位置:
首頁 > 最新 > 程序日誌處理挑戰與方案

程序日誌處理挑戰與方案

本文作者:簡志,阿里雲計算高級專家,擅長領域日誌分析與處理。

程序日誌(AppLog)有什麼特點?

內容最全:程序日誌是由程序員給出,在重要的地點、變數數值以及異常都會有記錄,可以說線上90%以上Bug都是依靠程序日誌輸出定位到

格式比較隨意:代碼往往經過不同人開發,每個程序員都有自己愛好的格式,一般非常難進行統一,並且引入的一些第三方庫的日誌風格也不太一樣

有一定共性:雖然格式隨意,但一般都會有一些共性的地方,例如對Log4J日誌而言,會有如下幾個欄位是必須的:

時間

級別(Level)

所在文件或類(file or class)

行數(Line Number)

線程號(ThreadId)

處理程序日誌會有哪些挑戰?

1. 數據量大

程序日誌一般會比訪問日誌大1個數量級:假設一個網站一天有100W次獨立訪問,每個訪問大約有20邏輯模塊,在每個邏輯模塊中有10個主要邏輯點需要記錄日誌。

則日誌總數為:

每條長度為200位元組,則存儲大小為

這個數據會隨著業務系統複雜變得更大,一天100-200GB日誌對一個中型網站而言是很常見的。

2. 分布伺服器多

大部分應用都是無狀態模式,跑在不同框架中,例如:

伺服器

Docker(容器)

函數計算(容器服務)

對應實例數目會從幾個到幾千,需要有一種跨伺服器的日誌採集方案

3. 運行環境複雜

程序會落到不同的環境上,例如:

應用相關的會在容器中

API相關日誌會在FunctionCompute中

舊系統日誌在傳統IDC中

移動端相關日誌在用戶處

網頁端(M站)在瀏覽器里

為了能夠獲得全貌,我們必須把所有數據統一併存儲起來。

如何解決程序日誌需求

1.統一存儲

目標:要把各渠道數據採集到一個集中化中心,打通才可以做後續事情。

我們可以在日誌服務中創建一個項目來存儲應用日誌,日誌服務提供30+種日誌採集手段:無論是在硬體伺服器中埋點,還是網頁端JS,或是伺服器上輸出日誌,都可以在實時採集列表中找到。

在伺服器日誌上,除了使用SDK等直接寫入外,日誌服務提供便捷、穩定、高性能Agent-Logtail。logtail提供windows、

linux兩個版本,在控制台定義好機器組,日誌採集配置後,就能夠實時將服務日誌進行採集,這裡有一個5分鐘視頻。

在創建完成一個日誌採集配置後,我們就可以在項目中操作各種日誌了。

可能有人要問到,日誌採集Agent非常多,有Logstash,Flume,FluentD,以及Beats等,Logtash和這些相比有什麼特點嗎?

使用便捷:提供API、遠程管理與監控功能,融入阿里集團百萬級伺服器日誌採集管理經驗,配置一個採集點到幾十萬設備只需要幾秒鐘

適應各種環境:無論是公網、VPC、用戶自定義IDC等都可以支持,https以及斷點續傳功能使得接入公網數據也不再話下

性能強,對資源消耗非常小:經過多年磨練,在性能和資源消耗方面比開源要好,詳見對比測試

2. 快速查找定位

目標:無論數據量如何增長、伺服器如何部署,都可以保證定位問題時間是恆定的

例如有一個訂單錯誤,一個延時很長,我們如何能夠在一周幾TB數據量日誌中快速定位到問題。其中還會涉及到各種條件過濾和排查等。

例如我們對於程序中記錄延時的日誌,調查延時大於1秒,並且方法以Post開頭的請求數據:

對於日誌中查找包含error關鍵詞,不包含merge關鍵詞的日誌

一天的結果

一周的結果

更長時間結果

這些查詢都是在不到1秒時間內可以返回

3. 關聯分析

關聯有兩種類型,進程內關聯與跨進程關聯。我們先來看看兩者有什麼區別:

進程內關聯:一般比較簡單,因為同一個函數前後日誌都在一個文件中。在多線程環節中,我們只要根據線程Id進行過濾即可

跨進程關聯:跨進程的請求一般沒有明確線索,一般會通過RPC中傳入TracerId來進行關聯

3.1 上下文關聯

點擊上下文查詢後,既跳轉到前後N條上下文

顯示框可以通過「更早」、「更新」等按鈕載入更多上下文

也可以點擊「返回普通搜索模式」進一步排查通過篩選框篩選ThreadID,進行精準上下文的過濾

更多上下文查詢文檔請參見文檔索引查詢下上下文查詢

3.2 跨進程關聯

跨進程關聯也叫Tracing,最早的工作是Google在2010年的那篇著名「Dapper, a Large-Scale Distributed Systems TracingInfrastructure」,之後開源界借鑒了Google思想做成過了平民化的各種Tracer版本。目前比較有名的有:

Dapper(Google): 各 tracer基礎

StackDriver Trace (Google),現在兼容了ZipKin

Zipkin:twitter開源的Tracing系統

Appdash:golang版本

鷹眼:阿里巴巴集團中間件技術技術部研發

X-ray:AWS在2016年Re:Invent上推出技術

如果從0開始使用Tracer會相對容易一些,但在現有系統中去使用,則會有改造的代價和挑戰。

今天我們可以基於日誌服務,實現一個基本Tracing功能:在各模塊日誌中輸出Request_id, OrderId等可以關聯的標示欄位,通過在不同的日誌庫中查找,即可拿到所有相關的日誌。

例如我們可以通過SDK查詢 前端機,後端機,支付系統,訂單系統等日誌,拿到結果後做一個前端的頁面將跨進程調用關聯

起來,以下就是基於日誌服務快速搭建的Tracing系統。

4. 統計分析

查找到特點日誌後,我們有時希望能做一些分析,例如線上有多少種不同類型的錯誤日誌?

我們先通過對"__level__"這個日誌級別欄位進行查詢,得知一天內有2720個錯誤:

接下來,我們可以根據file,line這兩個欄位(確定唯一的日誌類型)來進行統計聚合

就能夠拿到所有錯誤發生的類型和位置的分布了

其他還有諸如根據錯誤碼、高延時等條件進行IP定位與分析等,更多可以參見訪問日誌分析案例。

5. 其他

1.備份日誌審計

可以將日誌備份至OSS或存儲成本更低的IA,或直接到MaxCompute,詳情參見日誌投遞

2.關鍵詞報警

目前有如下方式可以進行報警

1. 在日誌服務中將日誌查詢另存為一個定時任務,對結果進行報警,參見文檔

2. 通過雲監控日誌報警功能,參見文檔

3.日誌查詢許可權分配管理

可以通過子賬號+授權組方法隔離開發、PE等許可權,參見文檔

最後說一下價格與成本,程序日誌主要會用到日誌服務LogHub + LogSearch功能,這裡有一個和開源方案對比,在查詢成本上是開源方案25%,使用非常便捷,另你開發工作事半功倍。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲棲社區 的精彩文章:

從Facebook AI Research開源fastText談文本分類:詞向量模性、深度表徵等
應用MaxCompute實現變壓器局部放電相位分析
流程圖和細節都傳授給你:教你如何利用阿里雲產品搭建一個簡單數據分析平台
如何將機器學慣用在基於規則的驗證上
雙向同步助力企業快速複製異地多活

TAG:雲棲社區 |

您可能感興趣

ELK日誌系統之通用應用程序日誌接入方案
刪除資料庫日誌文件的方法
從日誌分析角度看濤與某的持槍案件
淺析紅藍對抗中攻擊方基礎設施的日誌聚合和監控
Linux操作系統的日誌篩選、日誌文件的位置
【備婚日誌】試紗篇
大疆無人機漏洞致飛行日誌、照片、視頻非授權訪問
智能日誌分析系統-初步思考
時針腕錶:N廠勞力士日誌復刻表
美妝日誌
勞力士手錶 日誌型系列自動機械藍盤男表
笑顏制皂日誌
安利日誌——《我不是葯神》
幕後開發故事《貪婪之秋》公布首部開發者日誌
關於Kafka日誌留存策略的討論
日自衛隊赴伊拉克維和日誌新發現:日方相關人物曾遭襲擊
藍貼官方回復:路霸的調整日誌相關補充
詳解新硬體環境下日誌模塊的設計與演進
一個整理新人的工作日誌
勞力士最經典日誌型系列高檔男表,演繹經典精髓