nginx系列:常用利用shell统计日志
时间:2022-07-24
本文章向大家介绍nginx系列:常用利用shell统计日志,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
0x01:根据访问IP统计UV
- UV(Unique Visitor)独立访客,统计访问某站点的用户数;
- IP(Internet Protocol)独立IP数,是指独立的浏览了页面的不同IP,即统计不同的IP浏览用户数量。同一IP不管访问了几个页面,独立IP数均为1;不同的IP浏览页面,计数会加1。IP是基于用户广域网IP地址来区分不同的访问者的,所以多个用户(多个局域网IP)在同一个路由器(同一个广域网IP)内上网,可能被记录为一个独立IP访问者。另外如果用户不断更换IP,则有可能被多次统计。
awk '{print $1}' access.log | sort | uniq -c | wc -l
0x02: 根据访问URL统计PV
- PV(Page View)访问量, 即页面浏览量或点击量,衡量网站用户访问的网页数量;在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计。
awk '{print $7}' access.log | wc -l
0x03: 统计访问最多的URL
根据访问最多的URL来判断哪些业务比较繁忙;也跟根据情况判断是否该业务是否有黑客攻击。
awk '{print $7}' access.log | sort | uniq -c | sort -n -k 1 -r | more
加一个more命令主要防止URL一屏幕显示不下的情况。
0x04:统计访问最频繁的IP
根据访问IP来判断哪些IP操作最多;也可以根据情况判断该IP是不是疑似攻击IP。
awk '{print $1}' access.log | sort | uniq -c | sort -n -k 1 -r | more
加一个more命令主要防止IP一屏幕显示不下的情况。
0x05:根据时间段统计查看日志
具体使用sed或者grep都可以,主要是编写正则表达式
sed:
cat access.log | sed -n '/29/Aug/2020:[01-23]/p' | more
grep:
grep '29/Aug/2020:[01-23]' access.log | more
0x06:统计当日的的pv和uv
因为是统计当日的pv和uv,所以在编写命令时之前了解一下nginx的日志格式。日志的默认格式如下:
默认输出的月份使用英文简写。
pv:
cat access.log | sed -n /`date "+%d/%b/%Y"`/p | awk '{print $7}' | sort | wc -l
uv:
cat access.log | sed -n /`date "+%d/%b/%Y"`/p |awk '{print $1}' | sort|uniq -c | wc -l
如果使用以上这两个命令发现统计不出来任何数据时,就要检查一下,系统的语言变量LANG是否配置成中文,如果是需要配置成英文
使用以下命令配置成英文
export LANG="en_US.UTF-8"
这时在执行pv和uv命令应该就可以统计出来了,如下图
0x07:获取最耗时的请求时间、url、耗时
下面是获取最耗时的前十个请求,如果想获取全部去掉:head -10
cat access.log | awk '{print $4,$7,$NF}'
| awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10
0x08:获取每分钟的请求数量
cat access.log | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}'
可以输出到csv格式文件中
cat access.log | awk '{print substr($4,14,5)}'
| uniq -c | awk '{print $2","$1}' > access.csv
0x09: 查看某个时间段之间的ip访问个数
例如查看10点到19点的访问ip
grep "2020:1[0-9]" access.log | awk '{ips[$1]+=1} END{for(ip in ips) print ips[ip],ip}' | sort -nr | wc -l
如下图
查看10点到19点之间的ip访问数,并且访问数>=200的ip
grep '2020:1[0-19]' access.log |
awk '{ips[$1]+=1}END{for(ip in ips) if(ips[ip]>=200) print ips[ip],ip}' | sort -nr
- 《笨办法学Python》 第7课手记
- python利用pysvn发布lib的小程序
- 《笨办法学Python》 第6课手记
- React Native之ViewPagerAndroid 组件
- 《笨办法学Python》 第5课手记
- psRobot:植物小RNA分析系统
- 《笨办法学Python》 第3课手记
- NGS基础 - 参考基因组和基因注释文件
- 关于Android PullTorefreshScrollview回到顶部实例
- 《笨办法学Python》 第2课手记
- 《笨办法学Python》 第1课手记
- 《笨办法学Python》 第40课手记
- 很经典的GDB调试命令,包括查看变量,查看内存
- 《笨办法学Python》 第39课手记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux下安装maven3.6.2遇到的问题
- Unity3D网络通讯(五)--Socket通讯之Udp通讯
- IP不能作为rocketmq 的topic
- Unity3D网络通讯(六)-- UnityWebRequest实现WebService通讯
- Java Maven编译时没问题,运行时报java.lang.NoSuchMethodError
- 树莓派基础实验34:L298N模块驱动直流电机实验
- The consumer group[PushConsumer] has been created before, specify another name please
- 虚拟机系列 | JVM特点,基础结构与执行周期
- 报错 解决-bash: fork: retry: Resource temporarily unavailable
- 结构与算法(04):排序规则与查找算法
- 手把手教你在 TKE 集群中实现简单的蓝绿发布和灰度发布
- 虚拟机系列 | JVM类加载机制
- 树莓派综合项目2:智能小车(一)四轮驱动
- java 字节流入门(内存数组流->文件流)
- 视频高速上云网关/网络穿透EasyNTS智能组网服务平台ini配置文件丢失如何处理?