【问题标题】:grep multiple regex of a linegrep 一行的多个正则表达式
【发布时间】:2016-11-29 18:03:13
【问题描述】:

我想将来自路由器的传入系统日志记录到文件中。我收到了系统日志

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

然后我想要一个与第一行对应的输出看起来与此类似: 时间,SRC,PROTO,SPT,DPT

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

还有一个问题。有时我会收到不包含“DS”字段的行,例如示例的第二行。因此,使用 awk 分隔符计算字段似乎不起作用,因为它们不一致。

有人知道我该怎么做吗?

【问题讨论】:

  • 我建议从grep切换到sed
  • 您为什么还要使用nc 来实现远程系统日志功能?安装 rsyslogsyslog-ng 或其他选项之一。其中一些甚至具有过滤器/挂钩,您可以放置​​它们来处理您想做的事情......
  • 我只是快速浏览了一下 syslog-ng,但我找不到任何选项来重新格式化行输出字段。当然,我可以将不同内容的行过滤到不同的目标日志文件,但我看不到如何对行本身的字段重新排序。我是否错过了 syslog-ng 中的某些内容?
  • @PaulG。官方文档here有一整章(11)关于修改消息。此外,消息可以记录到命名管道或作为自定义程序的输入,因此您可以完成几乎任何您需要做的事情。

标签: regex filter grep field syslog


【解决方案1】:

正如@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); };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    相关资源
    最近更新 更多