迅速汇总 listener.log
里面信息的脚本
统计连接拒绝IP
1 2 3
| tail -10000 listener.log | awk -F "Incoming connection from|rejected " '{print $2}'| sort | uniq -c | sort -nr
tail -10000 listener.log |grep Incoming|awk '{print $4}'| sort | uniq -c | sort -nr
|
HOST/Program/OSUser简版
按HOST/Program/OSUser汇总lister log最近 10000行的记录
1 2 3
| echo "CNT # PROGRAM@HOST[OSUSER]";tail -10000 listener.log | awk -F"[()=]" '/establish/{ for(i=1;i<=NF;i++){if($i=="PROGRAM")pro=$(i+1);if($i=="HOST")host=$(i+1);if($i=="USER")usr=$(i+1);}cnt[pro"@"host"["usr"]"]++} END{for(x in cnt)print cnt[x]"\t# "x}'|sort -nr
|
HOST简版:按HOST汇总lister log最近 10000行的记录
1 2 3
| echo "CNT # HOST";tail -10000 listener.log | awk -F"[()=]" '/establish/{ for(i=1;i<=NF;i++){if($i=="HOST")host=$(i+1)}cnt[host]++} END{for(x in cnt)print cnt[x]"\t# "x}'|sort -nr
|
PROGRAM简版:按HOST汇总lister log最近 10000行的记录
1 2 3
| echo "CNT # PROGRAM";tail -10000 listener.log | awk -F"[()=]" '/establish/{ for(i=1;i<=NF;i++){if($i=="PROGRAM")pro=$(i+1)}cnt[pro]++} END{for(x in cnt)print cnt[x]"\t# "x}'|sort -nr
|
PROGRAM@HOST简版: 按HOST汇总lister log最近 10000行的记录
1 2 3
| echo "CNT # PROGRAM@HOST";tail -10000 listener.log | awk -F"[()=]" '/establish/{ for(i=1;i<=NF;i++){if($i=="PROGRAM")pro=$(i+1);if($i=="HOST")host=$(i+1)}cnt[pro"@"host]++} END{for(x in cnt)print cnt[x]"\t# "x}'|sort -nr
|
HOST/Program/OSUser完整版(无排序):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| tail -10000 listener.log | awk -F"[()=]" '/CONNECT_DATA/{ for(i=1;i<=NF;i++){ if($i=="PROGRAM")pro=$(i+1); if($i=="HOST")host=$(i+1); if($i=="USER")usr=$(i+1); } cnt[pro"@"host"["usr"]"]++; cnt_usr[usr]++; cnt_host[host]++; cnt_pro[pro]++; } END{ print "\n+++++++++++By OSUser+++++++++++++"; print "CNT\t# OSUSER"; for(x in cnt_usr)print cnt_usr[x]"\t# "x print "\n+++++++++++By Host+++++++++++++"; print "CNT\t# HOST"; for(x in cnt_host)print cnt_host[x]"\t# "x print "\n+++++++++++By Program+++++++++++++"; print "CNT\t# PROGRAM"; for(x in cnt_pro)print cnt_pro[x]"\t# "x print "\n+++++++++++By OSUSER/Host/Program+++++++++++++"; print "CNT\t# PROGRAM@HOST[OSUSER]"; for(x in cnt)print cnt[x]"\t# "x }'
|
按照时间趋势汇总
时间趋势/Day: 按天汇总,按天排序
1
| tail -10000 listener.log | awk '/establish/{c=substr($0,1,11);if(c!=f){n++;f=c};d[n"\t"c]++}END{for(x in d)print x"--- "d[x]}'|sort -n
|
按天汇总,按次数排序
1
| tail -10000 listener.log | awk '/establish/{c=substr($0,1,11);d[c]++}END{for(x in d)print d[x]"\t"x}'|sort -nr
|
时间趋势/Hour:按小时汇总,按小时排序
1
| tail -10000 listener.log | awk '/establish/{c=substr($0,1,14);if(c!=f){n++;f=c};d[n"\t"c]++}END{for(x in d)print x"--- "d[x]}'|sort -n
|
按小时汇总,按次数排序
1
| tail -10000 listener.log | awk '/establish/{c=substr($0,1,14);d[c]++}END{for(x in d)print d[x]"\t"x":00"}'|sort -nr
|
时间趋势/10min:按10分钟汇总,按10分钟排序
1
| tail -10000 listener.log | awk '/establish/{c=substr($0,1,16);if(c!=f){n++;f=c};d[n"\t"c"0"]++}END{for(x in d)print x"--- "d[x]}'|sort -n
|
按10分钟汇总,按次数排序
1
| tail -10000 listener.log | awk '/establish/{c=substr($0,1,16);d[c]++}END{for(x in d)print d[x]"\t"x"0"}'|sort -nr
|
时间趋势/1min:按分钟汇总,按分钟排序
1
| tail -10000 listener.log | awk '/establish/{c=substr($0,1,17);if(c!=f){n++;f=c};d[n"\t"c]++}END{for(x in d)print x"--- "d[x]}'|sort -n
|
按分钟汇总,按次数排序
1
| tail -10000 listener.log | awk '/establish/{c=substr($0,1,17);d[c]++}END{for(x in d)print d[x]"\t"x}'|sort -nr
|
由于awk各发行版本特性不一,未必能完美支持。如果是UNIX系统程序不正确,考虑把awk换成nawk再看看。还是不行的话,反馈一下操作系统及awk版本。
显示连接的服务名或SID
显示连接的服务名或SID,以及连接过来的IP地址的次数统计脚本(由于监听日志中显示的service_name, sid等信息有位置上的差别,因而用正则表达式做了相关处理):
1 2 3 4 5 6 7 8 9 10
| --AIX cat listener.log | grep "01-JAN-2017 14:" |grep 'establish'| sed 's/service_name=/SERVICE_NAME=/g;s/sid=/SID=/g' | sed -n 's/^\([0-9]\{2\}-\{1\}[A-Z]\{3\}-\{1\}[0-9]\{4\}.\{1\}[0-9]\{2\}:\{1\}[0-9]\{2\}:\{1\}[0-9]\{2\}\)\(.\{1\}\*\{1\}.\{1\}\)\(.*(CONNECT_DATA=.*\)\((SERVICE_NAME=[A-Z0-9a-z.-_+]*)\{1\}\).*\(.\{1\}\*\{1\}.\{1\}\).*\((HOST=[0-9]\{1,3\}[.]\{1\}[0-9]\{1,3\}[.]\{1\}[0-9]\{1,3\}[.]\{1\}[0-9]\{1,3\})\{1\}\).*/ , \4 , \6 /p;s/^\([0-9]\{2\}-\{1\}[A-Z]\{3\}-\{1\}[0-9]\{4\}.\{1\}[0-9]\{2\}:\{1\}[0-9]\{2\}:\{1\}[0-9]\{2\}\)\(.\{1\}\*\{1\}.\{1\}\)\(.*(CONNECT_DATA=.*\)\((SID=[A-Z0-9a-z.-_]*)\{1\}\).*\(.\{1\}\*\{1\}.\{1\}\).*\((HOST=[0-9]\{1,3\}[.]\{1\}[0-9]\{1,3\}[.]\{1\}[0-9]\{1,3\}[.]\{1\}[0-9]\{1,3\})\{1\}\).*/ , \4 , \6 , /p' | sort | uniq -c | sort -k3 -k2 -t ',' | awk -F ',' '{printf "%-10d ,%-50s ,%-30s\n", $1, $2, $3}' --LINUX echo "CNT # SID/SERVICE_NAME # HOST";tail -10000 listener.log | awk -F"[()=]" '/establish/{ for(i=1;i<=NF;i++){ if($i=="SID" || $i=="sid" )sid="SID="$(i+1)"\t"; if($i=="SERVICE_NAME" || $i=="service_name" )sid="SERVICE_NAME="$(i+1); if($i=="HOST")host=$(i+1); }cnt[sid"\t# "host]++ }END{for(x in cnt)print cnt[x]"\t# "x}'|sort -nr
|
假如其中在某一行 SID/SERVICE_NAME不存在,值会自动按上一行的来显示。所以,在每行处理前,需要把相关值给清空才行。
另外service_name也可能存在小写的情况。
1
| awk -F"[()=]" 'BEGIN{IGNORECASE=1} /establish/ {for(i=1;i<=NF;i++){if($i=="PROGRAM")pro=$(i+1);if($i=="HOST")host=$(i+1);if($i=="USER")usr=$(i+1);if($i=="SID")sev=$(i+1);if($i=="SERVICE_NAME")sev=$(i+1)}cnt[host"|"usr"|"sev"|"pro]++;host=null;usr=null;sev=null;pro=null}END{for(x in cnt)print x"|"cnt[x]}' listener.log|sort
|
原文作者:
liups.com
原文链接:
http://liups.com/posts/6247928e/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议