Syslog ファイアウォール ログの Grep

Syslog ファイアウォール ログの Grep

次のようなファイアウォール ログを含むファイルがあります。

Feb             3       0:18:51 17.1.1.1                      id=firewall     sn=qasasdasd "time=""2018-02-03"     22:47:55        "UTC""" fw=111.111.111.111       pri=6    c=2644        m=88    "msg=""Connection"      "Opened"""      app=2   n=2437       src=12.1.1.11:49894:X0       dst=4.2.2.2:53:X1       dstMac=42:16:1b:af:8e:e1        proto=udp/dns   sent=83 "rule=""5"      "(LAN->WAN)"""

次のような出力を取得する必要があります。

src=ipaddress:port , dst=ipaddress:port , proto=udp/dns

具体的には、上記の入力に対して、

src=12.1.1.11:49894,dst=4.2.2.2:53,proto=udp/dns

私は試した

cat logfile.txt | awk '{ print $18" "$19" "$21 }'

しかし、結果は私の期待したものとは異なるようです。

答え1

使用方法grep:

$ grep -o '\(src\|dst\)=[^:]\+:[^:]\+\|proto=[^ ]\+' logfile.txt
src=12.1.1.11:49894
dst=4.2.2.2:53
proto=udp/dns

説明:

  • '\(src\|dst\)=一致するsrcか、dstそれに続く=
  • [^:]\+:[^:]\+1つ以上のコロン以外の文字、その後に:、その後に1つ以上のコロン以外の文字が続く
  • \|または
  • proto=[^ ]\+'proto=1つ以上のスペース以外の文字が続く

改行を次のように結合できますpaste:

$ grep -o '\(src\|dst\)=[^:]\+:[^:]\+\|proto=[^ ]\+' logfile.txt | paste -s -d,
src=12.1.1.11:49894,dst=4.2.2.2:53,proto=udp/dns

答え2

あなたが持っているものに基づいて:

awk '{print $18,$19,$21}' OFS=" , " logfile.txt | sed 's|:X[0-1]||g'

catすでに stdout に書き込まれているので、必要ありませんawk。上記のコマンドは、コンマが行うスペースで区切られたフィールドを出力し、フィールド区切り文字をスペースで囲まれたコンマに設定し、およびを削除sedするために使用します。:X0:X1

出力:

src=12.1.1.11:49894 , dst=4.2.2.2:53 , proto=udp/dns

関連情報