Nginx日志分析

sort 

-u 清除重复的行 --unique

-r 降序  sort默认排序是升序

-n 按数值来排序


uniq 

-c 在输出行前面加上每行在输入文件中出现的次数。

-d 仅显示重复行。

-u 仅显示不重复的行。

- n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。

+ n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。


a 统计访问不重复的IP数量

cat access.log |awk '{print $1}'| sort -u | wc -l

cat access.log |awk '{print $1}'| sort     | uniq -c | wc -l

b 查看访问量最高的前10个IP

awk '{print $1}' access.log | sort |uniq -c | sort -n -k1 -r |head -n 10


c 统计接口访问数量

awk '{print $7}' access.log.2015-08-22 | grep -e "\/v1\/" | sed 's/?.*$//g' |sort | uniq -c |sort -rn

例1

字符串(url):http://abc13.EFG.com:4160/graph?node=26125 &offset=0&nbins=1&irversion=601&format=xml

要求: 从以上字符串中抽取:26125

实现:echo $url | sed 's/^.*node= //g' | sed 's/&.*$ //g'

例2

字符串 13:48:52.042 [http-nio-80-exec-32] INFO  web.Filter - ip=112.97.50.129,uri=/v1/rest/app/live/Subscribe,param=token[f3d32dec-4e26-41ad-be9f-08ae9a43f949]

要求   过滤出token,去掉重复

实现   grep -o ........-....-....-....-............ catalina.out | sort | uniq -c | awk '{print $2}'


1) ^ : 代表当前行首:^.*node= 表示行首到node=以及他们二者之间包括的所有字符 

2) $ : 代表当前行尾 : &.*$ 表示&到末尾,以及它们之间的所有字符 

3) & : 代表其前 pattern 字串


例3

sed -e 's/test/& my car/' 替换后变为:test my car

4) /t.*t/d :"." 表示任意字元; "*" 表示当前字元可重任意次 , 它们结合 ".*" 表示两 "t" 字母间的任意


d 把问号后的字符替换为空

sed 's/?.*$//g' a


e 查看http请求数及其连接状态

netstat -an | awk '/^tcp/{ A[$NF]++} END{ for (a in A) print a, A[a]}'

netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'


 解析:

CLOSED //无连接是活动的或正在进行

LISTEN //服务器在等待进入呼叫

SYN_RECV //一个连接请求已经到达,等待确认

SYN_SENT //应用已经开始,打开一个连接

ESTABLISHED //正常数据传输状态/当前并发连接数

FIN_WAIT1 //应用说它已经完成

FIN_WAIT2 //另一边已同意释放

ITMED_WAIT //等待所有分组死掉

CLOSING //两边同时尝试关闭

TIME_WAIT //另一边已初始化一个释放

LAST_ACK //等待所有分组死掉


f 统计状态码

日志格式 "GET /test HTTP/1.1" 200 41581

grep -oP 'HTTP/1.1" \d+ ' access_log | cut -d' ' -f2 | sort | uniq -c

如上命令首先提取状态码,为了避免日志中存在的其它数字对统计的影响,先提取HTTP/1.1" 数字的字符串,然后利用cut命令取得状态码,然后再去统计。


g 统计接口访问次数

                                $4         $5     $6               $7               $8     $9                                                

119.39.188.158 - - [22/Aug/2015:22:40:02 +0800] "POST /v1/rest/app/live/home/two HTTP/1.1" 200 11336 "-" "-" - "127.0.0.1:8080" "200" "0.078" "0.078"


cat access.log.2015-08-22 | grep -e "\/v1\/" | awk '{if($9~/200|30|404/)COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}' | sort -k 2 -nr | head -n 3


你可能感兴趣的:(Nginx日志分析)