2014-10-03 3 views
0

syslog-ng를 실행 중이며 mysql에 로그 항목을 저장하고 있습니다. 모든 것이 괜찮습니다. 문제는 추가 분석을 위해 "msg"필드를 열로 구분해야한다는 것입니다. 나는이 문자열로 변환 할 수 있습니다 방법 :syslog 메시지를 mysql insert 문으로 변환하십시오.

'[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 내부에서이 작업을 수행하려고합니다. 당신이

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 

결과 같은 것을 할 수

답변

2

감사 :

 
|          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

+0

수락 ... 죄송합니다, 전 단지 upvoted 전에 :) – jangeador

관련 문제