[root@iZj6c23b3wfb3ckcllau87Z ~] # netstat -n |awk '/^tcp/ {++jin[$NF]} END {for(a in jin) print a, jin[a]}'
TIME_WAIT 9137
CLOSE_WAIT 207
FIN_WAIT 547
ESTABLISHED 597
FIN_WAIT2 74
SYN_RECV 70
CLOSING 55
LASK_ACK 8
TIME_WAIT 250
FIN_WAIT1 2
FIN_WAIT2 3
ESTABLISHED 1032
LAST_ACK 2
TIME_WAIT 260
FIN_WAIT2 48
ESTABLISHED 912
TCP连接状态描述说明(netstat 输出)6列
[root@iZj6c23b3wfb3ckcllau87Z ~]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
第一列:socket使用的协议
第二列:接收到的但是还没处理的字节数
第三列:已经发送的但是没有被远程主机确认接收的字节数
第四列:本地的地址和端口
第五列:外部的地址和端口
第六列:socket的状态,通常仅仅有TCP的状态,状态值可能有ESTABLISHED,SYS_SENT,SYN_RECV,FIN_WAIT1,FIN_WAIT2,TIME_WAIT等
ESTABLISHED:socket已经建立连接,表示处于连接的状态,一般认为有一个establish 认为是一个服务的并发连接(*)
SYN_SENT:socket正在积极尝试建立一个连接,即处于发送后连接前的一个等待 但为了匹配进入连接的状态
SYN_RECV:已经从网络上收到一个连接请求
FIN_WAIT1:socket已经关闭连接正在或者要关闭
FIN_WAIT2:连接已经关闭 并且socket正在等待远端结束
TIME_WAIT:socket 正在等待关闭处理仍在网络上的数据包,这个连接状态在生产场景很重要,要重点关注(*)
CLOSE_WAIT:远端已经结束 等待socket关闭
LAST_ACK:远端已经结束 并且socket也已关闭等待acknow -edgement
listen:socket正在监听连接请求
closing:socket关闭 但是我们仍旧没有发生数据
UNKNOWN:未知的状态
获取连接状态数的awk命令:netstat -n|awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'
/^tcp/过滤出tcp开头的行
S[] 定义了一个名叫S的数组 在awk中 数组下标通常从1开始 而不是0
NF 当前记录里域的个数 默认以空格分隔 如上记录NF域个数等于6
$NF 表示一行的最后一个域的值 如上记录 $NF就是$6 表示第六个字段的值 也就是syn_recv或time_wait等
S[$NF] 表示数组元素的值 用最后一个字段的数值作为数组下标 就是第六列 取第六列的输出结果
++S[$NF] 表示把某个数加一 、
END
for(key in S) 遍历数组
print key,"\",S[key] 打印数组的键值对 中间用tab分隔
[root@iZj6c23b3wfb3ckcllau87Z ~]# cat >>aa.txt<<EOF
> 01 name wod 12k
> 02 name lis 9k
> 03 name wd 12k
> 04 name eew 10k
> 05 name ud 12k
> 06 name ol 9k
> 07 name ka 12k
> EOF
[root@iZj6c23b3wfb3ckcllau87Z ~]# cat aa.txt|awk '/^0/ {++J[$NF]} END {for(a in J) print a,"\t",J[a]}'
9k 2
10k 1
12k 4
统计Apache日志 单个IP访问请求数排名(*)
a. awk '{++S[$1]} END {for(jin in S) print jin,S[jin]}' access.log|sort -rn -k2
b. awk '{print $1}' access.log|sort|uniq -c |sort -rn -k1 #$1 第一个域的内容 -k1为对第一个字段排序 uniq -c去重
统计Apache日志单IP访问请求数排名的意义
通过以上命令可以找出什么IP的访问Apache比较频繁,一般单个IP访问数量过百 就值得怀疑了
如果短时间内上万PV访问 说明就不正常了 可以考虑封掉IP 也有可能误封的问题 因为国内公司都是NAT上网的多 出口一个IP
[root@iZj6c23b3wfb3ckcllau87Z tmp]# awk '{++S[$1]} END {for(jin in S) print jin,S[jin]}' access.log|sort -rn -k2|more
14.199.147.159 419
1.171.20.98 85
27.147.41.150 73
49.214.49.119 64
54.199.128.65 47
223.205.232.216 45
223.139.16.19 42
157.36.228.221 42
[root@iZj6c23b3wfb3ckcllau87Z tmp]# awk '{print $1}' access.log|sort|uniq -c |sort -rn -k1 |more
419 14.199.147.159
85 1.171.20.98
73 27.147.41.150
64 49.214.49.119
47 54.199.128.65
45 223.205.232.216
42 223.139.16.19
42 157.36.228.221
40 175.144.108.202
37 220.136.161.18
35 114.38.244.148
34 61.93.167.213
统计服务器当前单IP 连接数最大的IP地址前十
[root@Web ~]# awk -F '[ :]+' '{++S[$6]} END {for (a in S) print a S[a]}' access.log|sort -rn -k2
STREAM4
LISTEN3
I-Node1
Foreign1
established)1
and1
900061
899101
86311
86301
86131
753121
2
192.168.157.1322
113731
113071
0.0.0.06
netstat -an|grep EST|awk -F '[ :]+' '{++S[$6]} END {for (key in S) print "IP:"key"--->",S[key]}' |sort -rn -k2
过滤域名的方法\\
http://www.baidu.com/index.html
http://mail.baidu.com/index.html
http://mp3.baidu.com/index.html
cut -d "/" -f3 access.log|sort |uniq -c
awk -F "/" '{print $3}' access.log|sort|uniq -c
sed 's#^ htt.*\/\/##g' access.log |sed 's#\/.*html$##g'|sort|uniq -c
你学废了吗