0

我正在运行 syslog-ng 并将日志条目存储在 mysql 中。那里一切正常。问题是我需要将“msg”字段分解为列以进行进一步分析。如何转换此字符串:

'[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 中执行此操作,以便可以在表上使用触发器来插入。

谢谢,

4

1 回答 1

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

结果:

| 麦克 | SRC | 夏令时 | 原型 | 百白破 |
|------------------------------------------------------|------ ---------|----|--------|-----|
| 00:24:aa:ab:f0:d2:80:e6:51:10:e3:86:08:00 | 192.168.1.40 | 74.120.224.137 | 技术支持 | 第443章

这是SQLFiddle演示

于 2014-10-03T14:20:31.140 回答