如何采集多種格式的日志
采集日志時(shí)要求日志采用統(tǒng)一的格式,但有時(shí)日志中可能會(huì)包含多種格式,您可以采用Schema-On-Write
和Schema-On-Read
兩種模式處理。
背景信息
以Java日志為例,作為一個(gè)程序日志,它一般既包含正常信息,也會(huì)包含異常棧等錯(cuò)誤信息。
WARNING類型的多行日志
INFO類型的簡(jiǎn)單文本日志
DEBUG類型的鍵值日志
[2018-10-01T10:30:31,000] [WARNING] java.lang.Exception: another exception happened
at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
[2018-10-01T10:30:32,000] [INFO] info something
[2018-10-01T10:30:33,000] [DEBUG] key:value key2:value2
解決方案
Schema-On-Write
使用場(chǎng)景:預(yù)先知道日志格式,在采集日志時(shí)完成格式化。
說(shuō)明:為同一份日志應(yīng)用多個(gè)Logtail配置,每個(gè)Logtail配置具有不同的正則配置,從而能夠正確地實(shí)現(xiàn)字段提取。默認(rèn)情況下,一個(gè)文件只能匹配一個(gè)Logtail配置,如果需要為同一份日志應(yīng)用多個(gè)Logtail配置,請(qǐng)參見(jiàn)如何實(shí)現(xiàn)文件中的日志被采集多份。
Schema-On-Read
使用場(chǎng)景:同時(shí)分析的日志數(shù)量較小(例如千萬(wàn)級(jí)),日志格式多變,在查詢和分析日志時(shí)完成格式化。
說(shuō)明:使用它們共同的正則表達(dá)式來(lái)采集。
例如采用多行日志采集,將時(shí)間和日志等級(jí)作為行首正則,剩余部分為message。例如提取
[2018-10-01T10:30:32,000] [INFO]
作為行首正則,message為info something
。如果希望進(jìn)一步分析message,可以為該字段創(chuàng)建索引,然后利用日志服務(wù)的正則提取函數(shù)從message字段提取需要的內(nèi)容。