簡體   English   中英

grep一行的多個正則表達式

[英]grep multiple regex of a line

我想將進入的系統日志從路由器記錄到文件中。 我收到系統日志

nc -l -u -p 514 > syslog.log

輸入行由幾個由空格分隔的字段組成。

這是syslog中的兩個完整示例行:

<4>Nov 29 16:15:29 kernel: [ 3571.330000] DROP IN=vlan2 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=1.235.114.117 DST=1.52.79.209 LEN=337 TOS=0x00 PREC=0x00 TTL=115 ID=30831 PROTO=UDP SPT=161 DPT=220 LEN=317
<4>Nov 29 16:15:30 kernel: [ 3572.200000] DROP IN=vlan2 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=7.27.203.227 DST=122.2.79.209 LEN=64 TOS=0x00 PREC=0x00 TTL=52 ID=44018 DF PROTO=TCP SPT=5108 DPT=220 SEQ=3468909622 ACK=0 WIND

我只需要logifile中的Time,SRC,PROTO,SPT,DPT字段,因此我認為我可以將類似這樣的內容用作DST和SRC的測試:

nc -l -u -p 514 | egrep -o 'SRC=[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}|DST=[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' > syslog.log

不幸的是,這會在新行中打印每個字段,如下所示:

SRC=1.235.114.117
DST=1.52.79.209
SRC=7.27.203.227
DST=122.2.79.209

然后,我想要一個類似於第一行的輸出:Time,SRC,PROTO,SPT,DPT

Nov 29 16:15:29,7.27.203.227,TCP,5108,220

還有另一個問題。 有時,我收到的行中不包含“ DS”字段,如示例的第二行中所示。 因此,使用awk分隔符計數字段似乎不起作用,因為它們不一致。

有人知道我該怎么做嗎?

如@twalberg所建議,我現在使用syslog-ng。

這是我的syslog-ng.conf:

@version: 3.7
@include "scl.conf"
options {
    threaded(yes);
    chain_hostnames(no);
    stats_freq(43200);
    mark_freq(3600);
};
source s_udp { udp(port(514)); };
parser p_kv {kv-parser(prefix(".kv.")); };
destination d_router_file { file("/var/log/firewall_drops.csv" template("${DATE},${.kv.SRC}${.kv.PROTO},${.kv.SPT},${.kv.DPT}\n")); };
log { source(s_udp);parser(p_kv);destination(d_router_file); };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM