shell场景脚本实战四(日志分析控制脚本)
一、概述
1.脚本:check_http_log.sh
常见的系统日志文件
log_format详情:
cat /etc/nginx/nginx.conf | grep -A 2 log_format
详情
log_format:日志输出的自己设置的内容
remote_addr:自己设置输出的变量,这里代表的IP
time_local:当前本地的访问时间及请求的时间
request:访问的url是Get请求,后面加上访问地址
status:访问状态
body_bytes_sent:发给用户端的大小字节数
http_referer:请求上一级的页面的地址
http_user_agent:http浏览器的头,ios、安卓等,不同浏览器有不同的头
http_x_forwarded_for:http的头,记录用户端地址的。
2.http状态码详情
Http状态码的详情
二、日志分析
1.应用日志分析脚本实现准备
实现功能详情:
1.分析HTTP状态码在100-200、200-300、300-400、400-500、500以上,5个区间的请求条数。
2.分析日志HTTP状态码为404、500的请求数
对日志进行分析:
我的日志中的内容:(内容是随意编写的)
查看日志中的内容 :
cat /var/log/nginx/access.log
查看日志中的内容
查看日志第一列的内容
cat /var/log/nginx/access.log | awk ‘{print $1}’
查看日志第一列的内容
将查看的ip进行排序:
cat /var/log/nginx/access.log | awk ‘{print $1}’ | sort??|uniq -c??|sort -rn??|more
详细解释:
sort:排序
-c:把相同的ip取出来
-rn:反序排序
将查看的ip进行排序
输出http状态码:(数一下你的http状态码在第几列输出就可,)
cat /var/log/nginx/access.log | awk ‘{print $11}’?
输出状态码
注意:有的时候,自己设置的状态码,每一条是参差不齐的,有可能有的在一列,有可能不在一列,所以需要进行解决。
为了演示这种情况将使用?access.log-20200211日志继续。
查看
输出Http的协议及状态码:
cat /var/log/nginx/access.log-20200211 | grep -ioE “HTTP\/1\.[1|0]\”[[:blank:]] [0-9]{3}”
详细解释:
i:不区分大小写
o:准确的输出
E:正则,支持元字符
[[:blank:] :空格
[0-9]{3} :输出三位数的数字
图示
2.HTTP状态码不同区间的请求条数
函数?Check_http_status脚本内容:
?resettem=$(tput sgr0)
? Logfile_path=’/var/log/nginx/access.log-20200211′
?Check_http_status()
?{
Http_statu_codes=(`cat $Logfile_path | grep -ioE “HTTP\/1\.[1|0]\”[[:blank:]] [0-9]{3}”|awk -F”[ ]+” ‘{? ?//awk状态划分,awk后面匹配一个空格
? ? ? ? ?if($2>=100&&$2<200)
? ? ? ? ?{i++}
? ? ? ? ?else if($2 >= 200 && $2 < 300)
? ? ? ? ? ? ? ? ?{j++}
? ? ? ? ?else if($2>=300&&$2<400)
? ? ? ? ? ? ? ? ?{k++}
? ? ? ? ?else if($2>=400&&$2<500)
? ? ? ? ? ? ? ? ?{n++}
? ? ? ? ?else if($2>=500)
? ? ? ? ? ? ? ? {p++}
? ? ? ? ?}END{
?print i?i:0,j?j:0,k?k:0,n?n:0,p?p:0,i+j+k+n+p
?}’
?`)
?echo -e ‘\E[35m'”The number of http status[100+] :” ${resettem} ${Http_statu_codes[0]}
?echo -e ‘\E[35m'”The number of http status[200+] :” ${resettem} ${Http_statu_codes[1]}
?echo -e ‘\E[35m'”The number of http status[300+] :” ${resettem} ${Http_statu_codes[2]}
?echo -e ‘\E[35m'”The number of http status[400+] :” ${resettem} ${Http_statu_codes[3]}
?echo -e ‘\E[35m'”The number of http status[500+] :” ${resettem} ${Http_statu_codes[4]}
?echo -e ‘\E[35m'”All request numbers :” ${resettem} ${Http_statu_codes[5]}
}
Check_http_status
注意:数组是从0开始的。
执行结果
3.HTTP状态码在404和500区间的请求条数
函数?Check_http_code脚本内容:
Check_http_code()
? {
? Http_code=(`cat $Logfile_path | grep -ioE “HTTP\/1\.[1|0]\”[[:blank:]] [0-9]{3}”|awk -v total=0 -F”[ ]+” ‘{? //-v变量设置total设为0;
? ? ? ? if($2!=””)? //假如它的第二列不等于空
? ? ? ? ? {code[$2]++;total++}? //就进行数量的添加,总量的加加
? ? ? ? else
? ? ? ? ? {exit}
? ? ? ? ? }END{
?print code[404]?code[404]:0,code[403]?code[403]:0,total? //输出关联数组的内容,查询404/403数量的输出,假如有输出404/403的数量,假如没有则输出0。输出总的值
? ?}’
? ?`)
?echo -e ‘\E[35m'”The number of http status[404] :” ${resettem} ${Http_code[0]}
?echo -e ‘\E[35m'”The number of http status[403] :” ${resettem} ${Http_code[1]}
?echo -e ‘\E[35m'”All request number :” ${resettem} ${Http_code[2]}
? ? ? ? }
Check_http_code
图示
三、增加注释
在主控shell脚本里面增加下列就可。
grep – E “^\#Program function” ${script_file} //找出开头是#Program function的一行输出
而后在需要加上注释的脚本加上就可。
例子:此脚本(check_http_log.sh)加上
#Program function :Nginx’s log analysis
增加到脚本中
输出时候结果为:
结果展现
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » shell场景脚本实战四(日志分析控制脚本)