2014-10-03 62 views
0

我正在運行syslog-ng,並將日誌條目存儲在mysql中。在那裏一切正常。問題是我需要將字段「msg」分解爲列以供進一步分析。我怎麼能轉換這個字符串:將系統日誌消息轉換爲mysql插入語句

'[997799.060000] ACCEPT IN=br0 OUT=eth1 
MAC=00:24:aa:ab:f0:d2:80:e6:51:10:e3:86:08:00 
SRC=192.168.1.40 DST=74.120.224.137 LEN=64 
TOS=0x00 PREC=0x00 TTL=63 ID=48537 DF PROTO=TCP 
SPT=51504 DPT=443 SEQ=2289341783 ACK=0 WINDOW=65535' 

一切都在同一行(存儲在「文本」字段在MySQL表),我只是增加了知名度休息...我需要將其轉換成類似:

INSERT INTO web_traffic(MAC, SRC, DST, PROTO, DPT) 
    VALUES('00:24:aa:ab:f0:d2:80:e6:51:10:e3:86:08:00', 
     '192.168.1.40', '74.120.224.137', 'TCP', '443'); 

任何其他插入格式可能會更容易也值得讚賞。我正在尋找在MySQL內部這樣做,以便我可以在表上插入一個觸發器。

感謝,

回答

2

你可以做這樣的事情

INSERT INTO web_traffic (mac, src, dst, proto, dpt) 
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(msg, 'MAC=', -1), ' ', 1) mac, 
     SUBSTRING_INDEX(SUBSTRING_INDEX(msg, 'SRC=', -1), ' ', 1) src, 
     SUBSTRING_INDEX(SUBSTRING_INDEX(msg, 'DST=', -1), ' ', 1) dst, 
     SUBSTRING_INDEX(SUBSTRING_INDEX(msg, 'PROTO=', -1), ' ', 1) proto, 
     SUBSTRING_INDEX(SUBSTRING_INDEX(msg, 'DPT=', -1), ' ', 1) dpt 
FROM syslog 

結果:

 
|          MAC |   SRC |   DST | PROTO | DPT | 
|-------------------------------------------|--------------|----------------|-------|-----| 
| 00:24:aa:ab:f0:d2:80:e6:51:10:e3:86:08:00 | 192.168.1.40 | 74.120.224.137 | TCP | 443 | 

這裏是SQLFiddle演示

+0

這是真的很酷我的朋友。正是我需要的,加上一個獎金,因爲我不知道SQLFiddle! – jangeador 2014-10-03 15:45:19

+0

接受...對不起,我只有upvoted之前:) – jangeador 2014-10-03 22:42:37