溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

日志結(jié)構(gòu)化,SQL來(lái)查詢

發(fā)布時(shí)間:2020-07-15 21:57:52 來(lái)源:網(wǎng)絡(luò) 閱讀:538 作者:raqsoft 欄目:大數(shù)據(jù)

通常,日志文件都是文本格式,其中的內(nèi)容是非結(jié)構(gòu)化的文本串。這就使得我們查詢?nèi)罩拘畔r(shí),一般只能使用文本編輯軟件的搜索功能,輸入關(guān)鍵字后,靠眼力去偵查每處匹配結(jié)果。在日志量不大,或者只是偶爾查一下時(shí),這么操作倒也無(wú)妨。不過(guò),再簡(jiǎn)單的事情也怕多次重復(fù)。如果需要頻繁查詢,量變就可能引起質(zhì)變。如果每次還都要靠人工搜索,那么就算有再好的視力,也會(huì)有頭暈?zāi)垦5臅r(shí)候。因此,想要輕松查詢?nèi)罩?,就必須找到一款合適的工具,有了合適的工具,就可以一邊喝著咖啡,一邊輕彈條件回車就行了。

工具里面,首先想到的,就是利用各種計(jì)算機(jī)開發(fā)語(yǔ)言,外加關(guān)系數(shù)據(jù)庫(kù)。但這類工具開發(fā)過(guò)程繁瑣,還需要準(zhǔn)備好多工作環(huán)境,包括配置語(yǔ)言開發(fā)環(huán)境,安裝數(shù)據(jù)庫(kù)服務(wù),安裝數(shù)據(jù)庫(kù)查詢應(yīng)用等。

對(duì)于這么“重”的方案,我們果斷撇開。因?yàn)榻裉炀鸵榻B一個(gè)輕巧方便的工具——集算器,利用集算器,可以將文本日志變成結(jié)構(gòu)化數(shù)據(jù),然后就可以使用我們熟悉的 SQL 式查詢了。

這里,我們利用到了集算語(yǔ)言 (Structured Process Language,簡(jiǎn)稱 SPL) 的兩大優(yōu)點(diǎn):

  • 將日志內(nèi)容結(jié)構(gòu)化為數(shù)據(jù)表結(jié)構(gòu),SPL 遠(yuǎn)比常用開發(fā)語(yǔ)言簡(jiǎn)單、易用、直觀。

  • SPL 支持直接對(duì)結(jié)構(gòu)化的文件進(jìn)行 SQL 查詢,不再需要安裝配置第三方數(shù)據(jù)庫(kù)軟件。

下面就是具體的實(shí)施過(guò)程。

1、日志結(jié)構(gòu)分析

不同的日志文件,其內(nèi)容格式五花八門,每一個(gè)看上去都雜亂無(wú)章。但對(duì)于某個(gè)特定的具體的日志來(lái)說(shuō),它一定會(huì)有它自己的結(jié)構(gòu)。拿到日志文件后,首先要做的就是分析日志內(nèi)容,提煉數(shù)據(jù)結(jié)構(gòu),總結(jié)出可以結(jié)構(gòu)化的字段。

作為示例,我們用騰訊視頻軟件下的一個(gè)啟動(dòng)日志來(lái)做案例。如果你也用過(guò)騰訊視頻,就可以利用下面的代碼來(lái)體驗(yàn)和學(xué)習(xí),分析一下自己的使用行為了。這個(gè)日志文件,位于當(dāng)前用戶的 AppData 路徑下,并且以 QQLive.exe[Main] 開頭。在我的機(jī)器上,這個(gè)文件就是:

C:\Users\[Joancy]\AppData\Roaming\Tencent\QQLive\Log\QQLive.exe[Main][2018-8-3 21-5-35-557][12164].log

上述路徑中 [Joancy] 是我的 Windows 登錄用戶名,在你的機(jī)器中,將會(huì)是你的用戶名。QQLive.exe[Main]開頭的日志文件有很多,隨便取一個(gè)就可以。

下面就是這個(gè)日志文件中的兩行:

[18-07-19 14:35:06][9416]-[31ms][QQLiveMainModule.dll][CQQLiveModule::ParsCommandLine] cmd=”C:\Program Files (x86)\Tencent\QQLive\QQLive.exe” -system_startup
[18-07-19 14:35:08][9416]-[2266ms][HttpModule.dll][CDownloadMgr::AddTask]keyid = 1,url = http://182.254.116.117/d?dn=vv.video.qq.com.&ttl=1

可以看到,這個(gè)日志的內(nèi)容比較規(guī)整,一行一條記錄。每行中一對(duì)中括號(hào)中的內(nèi)容為一節(jié),對(duì)應(yīng)一個(gè)字段。只是最后的兩節(jié)有點(diǎn)特殊,其中倒數(shù)第二節(jié)可以省略,而最后一節(jié)沒用中括號(hào)括起來(lái)。這樣,我們就可以整理出日志表的數(shù)據(jù)結(jié)構(gòu)如下,并且把第一行內(nèi)容作為對(duì)應(yīng)的示例:


字段名類型分節(jié)內(nèi)容
1記錄時(shí)間DateTime[18-07-19 14:35:06]
2線程編號(hào)Integer[9416]
3加載時(shí)刻Integer[31ms]
4加載模塊String[QQLiveMainModule.dll]
5加載函數(shù)String[CQQLiveModule::ParsCommandLine]
6日志內(nèi)容Stringcmd=”C:\Program Files (x86)\Tencent\QQLive\QQLive.exe” -system_startup

表(1)
解析各個(gè)字段時(shí),需要注意:

1) 記錄時(shí)間: 由于年份只有兩位,所以在轉(zhuǎn)成日期時(shí)間類型時(shí),需要指定相匹配的日期格式,否則 18 就會(huì)被當(dāng)成公元 18 年,而不是 2018 年了。具體的操作方法是打開集算器菜單中的選項(xiàng),在彈出的窗口中點(diǎn)擊環(huán)境頁(yè)面,設(shè)置屬性‘日期時(shí)間格式’為‘yy-MM-dd HH

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI