2016-03-05 57 views
2

我的應用程序生成日誌並將它們發送到syslog-ng。 我想寫一個自定義模板/解析器/過濾器用於在syslog-ng中正確存儲SQLite數據庫(MyDatabase)的表中的字段。編寫自定義模板/解析器/過濾器以用於sy​​slog-ng

這是我的日誌的傳說:

unique-record-id usename date Quantity BOQ possible,item,profiles Count Vendor applicable,vendor,categories known,request,types vendor_code credit

所有這些12個字段都以空格隔開,解析器必須將它們存儲到MyDatabase的表MYTABLE1的12列。 其中一些字段:第6,9和10個字段也包含「子字段」,即逗號分隔值。 每個這些子字段中的值的數量是可變的,並且可以在日誌的每一行中改變。

我需要這些字段被存儲在相應的分開的表 MyItem_type,MyVendor_groups,MyReqs

這些「輔助」表具有3列,記錄的唯一-記錄-ID,和針對每個產品數量他們在日誌中occurence的 所以在MyItem_type表的模式是這樣的:

Unique-Record-ID | item_profile | Quantity 

同樣MyVendor_groups的模式是這樣的:

Unique-Record-ID | vendor_category | Quantity 

和MyReqs的模式是這樣的:

Unique-Record-ID | req_type | Quantity 

考慮從日誌這些樣本行:

獨特的記錄-ID USENAME日期數量BOQ可能,項目,型材伯爵供應商適用供應商,類別已知,請求,類型vendor_code信用

234.44.tfhj Sam 22-03-2016 22 prod1 cat1,cat22,cat36,cat44 66 ven1 t1,t33,t43,t49 req1,req2,req3,req4 blue 64.22 

234.45.tfhj Alex 23-03-2016 100 prod2 cat10,cat36,cat42 104 ven1 t22,t45 req1,req2,req33,req5 red 66 

234.44.tfhj Vikas 24-03-2016 88 prod1 cat101,cat316,cat43 22 ven2 t22,t43 req1,req23,req3,req6 red 77.12 

234.47.tfhj Jane 25-03-2016 22 prod7 cat10,cat36,cat44 43 ven3 t77 req1,req24,req3,req7 green 45.89 

234.48.tfhj John 26-03-2016 97 serv3 cat101,cat36,cat45 69 ven5 t1 req11,req2,req3,req8 orange 33.04 

234.49.tfhj Ruby 27-03-2016 85 prod58 cat10,cat38,cat46 88 ven9 t33,t55,t99 req1,req24,req3,req9 white 46.04 

234.50.tfhj Ahmed 28-03-2016 44 serv7 cat110,cat36,cat47 34 ven11 t22,t43,t77 req1,req20,req3,req10 red 43 

我的解析器應該將上面的日誌存儲到MyDatab ase.Mytable1爲:

unique-record-id | usename | date | Quantity | BOQ | item_profile | Count | Vendor | vendor_category | req_type | vendor_code | credit 
234.44.tfhj | Sam | 22-03-2016 | 22 | prod1 | cat1,cat22,cat36,cat44 | 66 | ven1 | t1,t33,t43,t49 | req1,req2,req3,req4 | blue | 64.22 
234.45.tfhj | Alex | 23-03-2016 | 100 | prod2 | cat10,cat36,cat42 | 104 | ven1 | t22,t45 | req1,req2,req33,req5 | red | 66 
234.44.tfhj | Vikas | 24-03-2016 | 88 | prod1 | cat101,cat316,cat43 | 22 | ven2 | t22,t43 | req1,req23,req3,req6 | red | 77.12 
234.47.tfhj | Jane | 25-03-2016 | 22 | prod7 | cat10,cat36,cat44 | 43 | ven3 | t77 | req1,req24,req3,req7 | green | 45.89 
234.48.tfhj | John | 26-03-2016 | 97 | serv3 | cat101,cat36,cat45 | 69 | ven5 | t1 | req11,req2,req3,req8 | orange | 33.04 
234.49.tfhj | Ruby | 27-03-2016 | 85 | prod58 | cat10,cat38,cat46 | 88 | ven9 | t33,t55,t99 | req1,req24,req3,req9 | white | 46.04 
234.50.tfhj | Ahmed | 28-03-2016 | 44 | serv7 | cat110,cat36,cat47 | 34 | ven11 | t22,t43,t77 | req1,req20,req3,req10 | red | 43 

而且還解析 「的可能,項目概況」 錄製到MyDatabase.MyItem_type爲:

Unique-Record-ID | item_profile | Quantity 
234.44.tfhj | cat1 | 22 
234.44.tfhj | cat22 | 22 
234.44.tfhj | cat36 | 22 
234.44.tfhj | cat44 | 22 
234.45.tfhj | cat10 | 100 
234.45.tfhj | cat36 | 100 
234.45.tfhj | cat42 | 100 
234.44.tfhj | cat101 | 88 
234.44.tfhj | cat316 | 88 
234.44.tfhj | cat43 | 88 
234.47.tfhj | cat10 | 22 
234.47.tfhj | cat36 | 22 
234.47.tfhj | cat44 | 22 
234.48.tfhj | cat101 | 97 
234.48.tfhj | cat36 | 97 
234.48.tfhj | cat45 | 97 
234.48.tfhj | cat101 | 97 
234.48.tfhj | cat36 | 97 
234.48.tfhj | cat45 | 97 
234.49.tfhj | cat10 | 85 
234.49.tfhj | cat38 | 85 
234.49.tfhj | cat46 | 85 
234.50.tfhj | cat110 | 44 
234.50.tfhj | cat36 | 44 
234.50.tfhj | cat47 | 44 

我們也需要類似的解析「適用,供應商,類別「和 將它們存儲到MyDatabase.MyVendor_groups中。並解析 存儲「着稱,請求類型」爲MyDatabase.MyReqs第一 列MyDatabase.MyItem_type,MyDatabase.MyVendor_groups和 MyDatabase.MyReqs永遠是獨一無二的 - 記錄-ID,這是 在日誌中看到。

因此是的,這個列不包含這三個表中的唯一數據,就像其他列一樣。 第三列將始終是日誌中見到的數量。

我知道一些PCRE,但它是在syslog-ng中使用嵌套解析器,這完全令我困惑。

Syslog-ng的文檔表明這是可能的,但沒有得到一個很好的例子。如果這裏有任何類似的攻擊有一些參考或樣本可供分享,它將會非常有用。

在此先感謝。

回答

0

我認爲所有這些都可以使用csv解析器幾次完成。 首先,使用帶有製表符分隔符(「\ t」)的csv解析器將初始字段拆分爲命名列。在整個消息上使用此解析器。 然後,您必須使用需要進一步解析的列上的csv解析器的其他實例解析具有子字段的字段。 你可以在https://www.balabit.com/sites/default/files/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/csv-parser.html找到一些例子,https://www.balabit.com/sites/default/files/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/reference-parsers-csv.html

(這是可能的,你可以把它與一個分析器做的,如果你同時指定選項卡和逗號作爲分隔符,但可能無法與下地幹活可變數量的字段)。

相關問題