shell脚本分析nginx日志
shell脚本分析nginx日志:
name=`awk -F ',' '{print $13":"$32}' $file | awk -F ':' '{print $4}'`
echo "name=$name"
awk -F
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
抽取nginx日志access.log中的状态码,然后统计状态码中大于等于200小于300的数量
grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" /data/nginx/logs/access.log | awk -F "[ ]+" 'BEGIN{i=0;print "[start]i=0;"}{if($2>=200&&$2<300){i++}}END{print i?i:0}'
grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" /data/nginx/logs/access.log| awk -F "[ ]+" 'BEGIN{i=0;print "[start]i=0;"}{if($2>=200&&$2<300){i++}else if($2>=300&&$2<400){j++}}END{print i?i:0,j?j:0}'
采用慕课网上的案例:

得不出结果,经过调试发现在CentOS6.5下,if语句和上一个括号之间在同一行就好了:
脚本上用到了数组,grep,awk
#!/bin/sh
# Nginx's log analysis #控制终端的输出格式
resettem=$(tput sgr0)
#定义日志的路径
Logfile_path='/data/nginx/logs/access.log'
#i=
#j=
#grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" /data/nginx/logs/access.log| awk -F "[ ]+" 'BEGIN{i=0;print "[start]i=0;"}{if($2>=200&&$2<300){i++}else if($2>=300&&$2<400){j++}}END{print i?i:0,j?j:0}' echo "$Logfile_path" #拿到日志中所有的包含HTTP状态码的部分,拿出第二段来判断,并将结果分配到数组中
grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" $Logfile_path | awk -F "[ ]+" 'BEGIN{i=0;j=0;k=0;n=0;p=0;}{ if($2>=100&&$2<200)
{i++}
else if($>=&&$<)
{j++}
else if($>=&&$<)
{k++}
else if($>=&&$<)
{n++}
else if($>=)
{p++}
}END{
print i?i:,j?j:,k?k:,n?n:,p?p:,i+j+k+n+p
}' Check_http_status()
{
#grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" access.log
#拿到日志中所有的包含HTTP状态码的部分,拿出第二段来判断,并将结果分配到数组中
Http_status_codes=(`grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" $Logfile_path | awk -F"[ ]+" 'BEGIN{i=0;j=0;k=0;n=0;p=0;}{ if($2>=100&&$2<200) {i++} else if($>=&&$<) {j++} else if($>=&&$<) {k++} else if($>=&&$<) {n++} else if($>=) {p++} }END{ print i?i:,j?j:,k?k:,n?n:,p?p:,i+j+k+n+p }'`) echo "---------" echo -e '\E[33m'"The number of http status[100+]:" ${resettem} ${Http_status_codes[]} echo -e '\E[33m'"The number of http status[200+]:" ${resettem} ${Http_status_codes[]} echo -e '\E[33m'"The number of http status[300+]:" ${resettem} ${Http_status_codes[]} echo -e '\E[33m'"The number of http status[400+]:" ${resettem} ${Http_status_codes[]} echo -e '\E[33m'"The number of http status[500+]:" ${resettem} ${Http_status_codes[]} echo -e '\E[33m'"The number of http all status:" ${resettem} ${Http_status_codes[]} } Check_http_status
查看具体的状态码,比如403的状态码
grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" /data/nginx/logs/access.log | awk -F "[ ]+"
'BEGIN{total=0;}{if($2!=""){code[$2]++;total++}else{exit}}END{print code[404]?code[404]:0,code[403]?code[403]:0,total?total:0}'
具体脚本:
Check_http_code()
{
#grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" access.log
Http_Code=(`grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" $Logfile_path | awk -F "[ ]+" 'BEGIN{total=0;}{ if($2!="")
{code[$]++;total++}
else
{exit}
}END{
print code[]?code[]:,code[]?code[]:,total}'`)
echo "---------"
echo -e '\E[33m'"The number of http code[404]:" ${resettem} ${Http_Code[]}
echo -e '\E[33m'"The number of http code[403]:" ${resettem} ${Http_Code[]}
echo -e '\E[33m'"The number of http all status:" ${resettem} ${Http_Code[]}
}
Check_http_code
查看IP来源记录:
nginx默认配置:
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time'; access_log /var/log/nginx/access.log main buffer=32k;
shell脚本分析nginx日志的更多相关文章
- shell脚本分析 nginx日志访问次数最多及最耗时的页面
当服务器压力比较大,跑起来很费力时候.我们经常做站点页面优化,会去查找那些页面访问次数比较多,而且比较费时. 找到那些访问次数高,并且比较耗时的地址,就行相关优化,会取得立竿见影的效果的. 下面是我在 ...
- Linux下添加shell脚本使得nginx日志每天定时切割压缩
Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...
- shell脚本备份nginx日志
vim /data/runlog.sh #编辑一个 shell 脚本 #!/bin/bash LOGP ...
- 如何用shell脚本分析网站日志统计PV、404、500等数据
以下shell脚本能统计出网站的总访问量,以及404,500出现的次数.统计出来后,可以结合监控宝来进行记录,进而可以看出网站访问量是否异常,是否存在攻击.还可以根据查看500出现的次数,进而判断网站 ...
- shell脚本实例-nginx日志分析
统计2018/8/6 PV量 grep "06/Aug/2018" access.log|wc -l 统计当天8:00 到9:00的PV awk '$4>="[06 ...
- shell脚本分析apache日志状态码
一.首先将apache日志按天切割 vi /etc/httpd/conf/httpd.conf ErrorLog "|rotatelogs /var/log/httpd/%Y% ...
- shell 指令分析nginx 日志qps
实时分析 tail -f points.api.speiyou.cn.access.log|awk 'BEGIN{key="";cnt=0}{if(key==$5){cnt++}e ...
- 利用python分析nginx日志
最近在学习python,写了个脚本分析nginx日志,练练手.写得比较粗糙,但基本功能可以实现. 脚本功能:查找出当天访问次数前十位的IP,并获取该IP来源,并将分析结果发送邮件到指定邮箱. 实现前两 ...
- shell脚本实现网站日志分析统计
如何用shell脚本分析与统计每天的访问日志,并发送到电子邮箱,以方便每天了解网站情况.今天脚本小编为大家介绍一款不错的shell脚本,可以实现如上功能. 本脚本统计了:1.总访问量2.总带宽3.独立 ...
随机推荐
- web工程jar包问题
JRE System Library主要存放J2SE的标准jar,一般不需要调整. Referenced Libraries是存放第三方的jar包,也就是自己导入的jar包.在项目属性的Java Bu ...
- UML---UML中的几种关系(依赖,关联,泛化,实现)
关于设计模式的总结没有落实到代码上,而且设计模式自己确实动手实现的非常少.所以在这一周里,除了看网站开发的视频,着手开始对设计模式进行实现以下.设计模式非常经典,每次看都有不同的收获,写一下自己的收获 ...
- Convolution Network及其变种(反卷积、扩展卷积、因果卷积、图卷积)
今天,主要和大家分享一下最近研究的卷积网络和它的一些变种. 首先,介绍一下基础的卷积网络. 通过PPT上的这个经典的动态图片可以很好的理解卷积的过程.图中蓝色的大矩阵是我们的输入,黄色的小矩阵是卷积核 ...
- PHP与ASP.NET的优劣比较
PHP与ASP.NET的比较 表 1 PHP 4 PHP5 ASP.NET 软件价格 免费 免费 免费 平台价格 免费 免费 $$ 速度 强 强 弱 效率 强 强 弱 安全性 强 强 强 平台 强 强 ...
- sdut2852 小鑫去爬山9dp入门)
#include<stdio.h> int a[100][100]; int main() { int n; while(scanf("%d",&n)!=EOF ...
- HDU 1020:Encoding
pid=1020">Encoding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery)
SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery) 1.启用Ad Hoc Distributed Queries 在使用openrowset ...
- 数字转人民币大写(SQL SERVER)
--数字转人民币大写NumToRMB ---新建方法create FUNCTION dbo.NumToRMB (@num numeric(14,5)) RETURNS varchar(100) ...
- HTML之DocType的几种类型
一.什么是DOCTYPE DOCTYPE是Document Type(文档类型)的简写,在页面中,用来指定页面所使用的XHTML(或者HTML)的版本.要想制作符合标准的页面,一个必不可少的关键组成部 ...
- go-study
package (包) 一个目录下面所有的.go文件的包名必须相同. 包名一般和目录名相同(是约定, 不是强制), 包名都小写 main包是一个特殊的包名, 在main包中, 必须包含func mai ...