shell场景脚本实战四(日志分析控制脚本)

作者 : 开心源码 本文共2882个字,预计阅读时间需要8分钟 发布时间: 2022-05-13 共205人阅读

一、概述

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场景脚本实战四(日志分析控制脚本)

发表回复