iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 27
0

今天來說明分析 Audit Log 的過程與實做。

首先從官方文件可以看到結構。

[timestamp],[serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]

有這些資料就能分析了(以下可能有更好的解法,這個解法只是其中一種)。

[timestamp], 分段

因為檔案不是用 \r\n\n 來分隔一行,而是用空白,在[timestamp][object] 也會有空白,所以需要先分段。透過 [timestamp], 來分段。

$matches = ([regex] '(\d{4})(\d{2})(\d{2}) (\d{2}):(\d{2}):(\d{2}),').Matches($auditfilecontent)

每一段以 , 分欄位

接下來就是每一個 , 欄位,到 [object] 前都是這樣分的。

$submatches = ([regex] ',').Matches($line)  
$timestamp    = $line.SubString(0, $submatches[0].Index)
$serverhost   = $line.SubString($submatches[0].Index+1, $submatches[1].Index - $submatches[0].Index-1)
$username     = $line.SubString($submatches[1].Index+1, $submatches[2].Index - $submatches[1].Index-1)
$hosts        = $line.SubString($submatches[2].Index+1, $submatches[3].Index - $submatches[2].Index-1)
$connectionid = $line.SubString($submatches[3].Index+1, $submatches[4].Index - $submatches[3].Index-1)
$queryid      = $line.SubString($submatches[4].Index+1, $submatches[5].Index - $submatches[4].Index-1)
$operation    = $line.SubString($submatches[5].Index+1, $submatches[6].Index - $submatches[5].Index-1)
$database     = $line.SubString($submatches[6].Index+1, $submatches[7].Index - $submatches[6].Index-1)
$retcode      = $line.SubString($submatches[$submatches.Count-1].Index+1,$line.length - $submatches[$submatches.Count-1].Index-1).Trim()

到了 [object],因為有可能裡頭也有 , 所以不能直接拿 split 的值來用,取最後一個 , 之前的當作是 [object]

if ($submatches[$submatches.Count-1].Index - $submatches[7].Index- 3 -lt 0) 
 {
   $object = ""
 }else
 {
   $object = $line.SubString($submatches[7].Index+2, $submatches[$submatches.Count-1].Index - $submatches[7].Index-3)  
 }

有了資料就能作其他用途了,明天再繼續介紹。


上一篇
Audit Log Parser 的實做 [1]
下一篇
Audit Log Parser 的實做 [3]
系列文
MariaDB 的使用與管理30

尚未有邦友留言

立即登入留言