Nginx日志分析

sort        http://blog.chinaunix.net/uid-10540984-id-313479.html  sort命令的k选项大讨论 

-u 清除重复的行 --unique                          -c 检查文件是否已经按照顺序排序

-r 降序  sort默认排序是升序                        -o 输出文件 sort -r num.txt -o num.txt   把结果写入原文件

-b 忽略每行前面开始的空格字符                   -u  删除重复行

-t '' 指定排序时分隔字符                               sort   -n   -t  ':'  -k 2  以冒号分隔  并以第二列数字排序

-k 选择以哪个区间进行排序                            -f 会将小写字母都转换为大写字母来进行比较,即忽略大小写

uniq         http://blog.chinaunix.net/uid-26495963-id-3282526.html

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

-d 仅显示重复行。

-u 仅显示不重复的行。

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

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

去双引号    sed  's/"//g'  或  sed '/"/s/"//g'

 分隔符

sort  -t ':'  -k 2               以冒号分隔  并以第二列排序
cut   -d ':'  -f 2               以冒号分隔  显示第二列      delimiter 分隔符   fields 域
awk   -F ':'  '{print $2}'       以冒号分隔  显示第二列

awk

awk '$1>60   &&   $1<90 {print $2}' log    显示大于60并小于90的

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  owl nginx日志分析

  统计接口访问数量

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

   取接口与响应时间, 并以响应时间排序                                                                                      引号中有空格

sed  -e 's/"//g' -e 's/?.*$//g' log | awk '{print $7,$NF}'| grep "^/v2/"|grep -v "http" | grep -v " /v2/" | sort -n -k2

响应时间大于500ms接口访问排序

sed  -e 's/"//g' -e 's/?.*$//g' access.log | awk '$NF>0.5{print $7}' | grep '^/v2/' | sort | uniq -c | sort -rn

日志中出现的所有接口

sed  -e 's/"//g' -e 's/?.*$//g' access.log |awk '{print $7}'| grep "^/v2/" | grep -v http | sort -u

单个接口访问时间求和

grep -w /v2/rest/app/sys/init 1 | awk '{sum+=$2} END {print sum}'


例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"

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


转载于:https://my.oschina.net/direnjie/blog/542201

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值