簡介: 日誌上下文瀏覽是排查業務故障時常用的方式,但受限於Logtail插件系統的設計,在Logtail 1.2.1版本前,如果用戶使用Logtail插件來處理日誌或採集容器的標準輸出,那麼用戶將無法使用上下文瀏覽及Livetail功能。爲了解決這一問題,本文將重點介紹如何使用日誌上下文聚合插件來使能上下文查詢和Livetail功能。
背景
在排查業務故障時,用戶往往需要查看業務日誌文件來定位問題。然而,當用戶在使用SLS收集業務日誌時,同一個Logstore中往往存放着不同的日誌(例如同一臺主機上不同目錄下的文件,抑或是同一個K8S集羣節點上不同容器內的文件或標準輸出),直接在控制檯上點擊“查詢/分析”按鈕並不能直觀地得到某一份日誌文件的完整上下文內容。
爲了解決這個問題,SLS提供了上下文查詢和LiveTail功能,使得用戶能夠快速直觀地瀏覽同一日誌文件中的內容:
- 上下文查詢:用戶可在指定Logstore中的某條日誌後,直接查詢某條該條日誌的上下文(即該條日誌在所在文件中的前後若干條日誌);
- Livetail:實時展示指定日誌所在文件的最新日誌,類似於對該文件執行tail -f。
然而,在Logtail 1.2.1版本之前,上述兩個功能僅針對使用固定解析模式解析日誌的場景(如極簡模式、完整正則模式等),當額外使用Logtail插件來提升日誌解析能力或採集容器的標準輸出時,上述兩個功能就不再起效。從Logtail 1.2.1版本起,當用戶使用Logtail插件來處理日誌或採集容器的標準輸出時,可以通過配置日誌上下文聚合插件來使用上述兩個功能。
原理概覽
Logtail採用批量發送日誌數據的模式,即多條日誌會被打包在同一個日誌組中進行傳送。在這種模式下,爲了高效地獲取某條日誌的上下文或進行Livetail,Logtail在打包日誌數據時採用以下策略:
- 同一個日誌組中只存放同一來源的日誌,並在日誌組的Meta信息中記錄代表日誌來源的唯一標識符及序號,組內日誌按時間順序排列;
- 對於存放同一來源日誌的日誌組,日誌組的序號按時間先後順序依次遞增。
在這種模式下,每一條日誌都可用(日誌組標識符+序號,組內序號)的二元組合進行唯一標識,SLS服務端據此對該二元組合建立索引,從而實現日誌上下文的快速查找。
然而,受限於Logtail插件系統的設計,在1.2.1版本前,當用戶使用插件系統處理數據或採集容器的標準輸出時,Logtail無法執行上述策略。具體來說,由於插件系統的輸入模塊是以一條條日誌的形式向後續模塊傳遞信息,因此日誌的來源信息從離開輸入模塊後便出現缺失,從而導致無法在日誌打包階段(即聚合模塊)將同一來源的日誌放入同一個日誌組中,最終導致日誌上下文查詢及Livetail功能的失效。
爲了解決上述問題,Logtail在現有各模塊之間的數據交互上額外增加日誌來源信息,同時新增了一個日誌上下文聚合插件。由於日誌的來源信息得以保留,該插件因此可以依照上文提到的日誌打包策略對日誌進行打包,從而實現日誌的上下文查詢及LiveTail。
採集配置設置
下面將介紹當用戶使用Logtail插件來處理日誌或採集容器的標準輸出時,如何設置採集配置以使用上下文查詢和Livetail功能。
採集文本日誌且使用Logtail插件處理日誌
在採集文本日誌時,如果使用Logtail插件來解析日誌,則需要在插件配置的中額外增加日誌上下文插件aggregator_context:
{
"global": {...},
"processors": [...],
"aggregators": [
{
"type": "aggregator_context",
"detail": {}
}
]
}
- 示例:使用Logtail插件解析單行正則日誌,則在控制檯的插件配置框內填入以下內容:
{
"global": {
"DefaultLogQueueSize": 10
},
"processors": [
{
"type": "processor_split_log_string",
"detail": {
"SplitKey": "content",
"PreserveOthers": true
}
},
{
"type": "processor_regex",
"detail": {
"SourceKey": "content",
"Regex": "(\\S+)\\s-\\s(\\S+)",
"Keys": [
"remote_addr",
"remote_user"
]
}
}
],
"aggregators": [
{
"type": "aggregator_context",
"detail": {}
}
]
}
採集容器標準輸出
當用戶在採集容器標準輸出時,也需要在插件配置的中額外增加日誌上下文插件aggregator_context:
{
"inputs": [
{
"detail": {
"Stdout": true,
"Stderr": true
},
"type": "service_docker_stdout"
}
],
"aggregators": [
{
"type": "aggregator_context",
"detail": {}
}
]
}
功能使用
上下文查詢
對於選定的日誌,在該日誌的左上角單擊圖標進入上下文查詢頁面:
此時可以使用鼠標在當前頁面上下滾動查看指定日誌的上下文信息。界面中的按鈕功能如下:
- 單擊更早,進行向上翻頁瀏覽。
- 單擊更新,進行向下翻頁瀏覽。
- 在高亮顯示文本框中設置需要高亮顯示的字符串,可實現字符串標紅顯示。
- 在過濾條件文本框中設置過濾字符串,可實現日誌列表中只顯示包含過濾字符串的日誌。
- 字段過濾下拉菜單中可選擇需要展示的字段。
Livetail
對於選定的日誌,在該日誌的左上角單擊圖標進入Livetail頁面:
此時該條日誌所在文件的最新的日誌數據將實時顯示在頁面底部。界面中的按鈕功能如下:
- 在高亮顯示文本框中設置需要高亮顯示的字符串,可實現字符串標紅顯示。
- 在過濾條件文本框中設置過濾字符串,可實現日誌列表中只顯示包含過濾字符串的日誌。
- 字段過濾下拉菜單中可選擇需要展示的字段。
關於iLogtail
iLogtail作爲阿里雲SLS提供的可觀測數據採集器,可以運行在服務器、容器、K8s、嵌入式等多種環境,支持採集數百種可觀測數據(日誌、監控、Trace、事件等),已經有千萬級的安裝量。目前,iLogtail已正式開源,歡迎使用及參與共建。
GitHub:https://github.com/alibaba/ilogtail
社區版文檔:https://ilogtail.gitbook.io/ilogtail-docs/about/readme
企業版官網:https://help.aliyun.com/document_detail/65018.html