系统运维
运维工作是一个比较复杂的工作,有时候面对上万条的日志,如何作分析?难道一条条的分析?
聪明的人会选择脚本,这就是为什么现在提倡自动化运维的原因吧,废话不多说,直接上脚本。
vim /data/scripts/log_analysis.sh
#!/bin/bash
###############################################
# Desc :nginx日志分析脚本 #
# Author : Bertram #
# Date : 2019-12-21 #
# Copyright : Personal belongs #
###############################################
public(){
echo
read -p 请输入要分析的访问日志: log_file
echo
if [ ! -f $log_file ];then
echo 未找到: ${log_file}
exit 1
fi
if [ ! -s $log_file ];then
echo ${log_file}是空文件
exit 1
fi
#输出日志访问量排名前top_num条数据,可自定义
top_num=5
input_file=`echo $log_file | awk -F \'/\' \'{print $(NF)}\'`
analyze_dir=/home/Bertram/`date %F`
top_ip_file=$analyze_dir/ngx_log_top_ip_${input_file}.txt
top_src_url_file=$analyze_dir/ngx_log_top_src_url_${input_file}.txt
top_dest_url_file=$analyze_dir/ngx_log_top_dest_url_${input_file}.txt
top_code_file=$analyze_dir/ngx_log_top_code_${input_file}.txt
top_terminal_file=$analyze_dir/ngx_log_top_terminal_${input_file}.txt
mkdir -p $analyze_dir
start_time=`head -1 $log_file | awk \'{print $4}\'|cut -d [ -f2`
end_time=`tail -1 $log_file | awk \'{print $4}\'|cut -d [ -f2`
total_nums=`wc -l $log_file | awk \'{print $1}\'`
size=`du -sh $log_file | awk \'{print $1}\'`
#获取起始与截止时间
echo 访问起始时间: $start_time ; 截止时间: $end_time
#获取总行数与大小
echo 共访问 $total_nums 次 ; 日志大小: $size
#获取最活跃IP
##cat $log_file | awk \'{print $1}\' | sort | uniq -c | sort -rn | head -${top_num} > $top_ip_file
awk \'{ips[$1] } END{for (i in ips){print ips[i],i}}\' $log_file | sort | uniq -c | sort -k1 -nr| head -${top_num} > $top_ip_file
#获取访问来源最多的url
cat $log_file | awk \'{print $13}\' | sort | uniq -c | sort -rn | head -${top_num} > $top_src_url_file
#获取请求最多的url
cat $log_file | awk \'{print $8}\' | sort | uniq -c | sort -rn | head -${top_num} > $top_dest_url_file
#获取返回最多的状态码
cat $log_file | awk \'{print $11}\'| sort | uniq -c | sort -rn | head -${top_num} > $top_code_file
#获取返回最多的终端类型
cat $log_file | awk \'{print $14}\'| sort | uniq -c | sort -rn | head -${top_num} > $top_terminal_file
}
simple(){
echo - - - - - - 下面是分析内容 - - - - - -
#获取最活跃IP
printf 最活跃的前${top_num}个访问IP: \\n
cat $top_ip_file
echo
#获取访问来源最多的url
printf 访问来源最多的前${top_num}个url: \\n
cat $top_src_url_file
echo
#获取请求最多的url
printf 请求最多的前${top_num}个url: \\n
cat $top_dest_url_file
echo
#获取返回最多的状态码
printf 返回最多的前${top_num}个状态码: \\n
cat $top_code_file
echo
printf
#获取返回最多的终端号
printf 返回最多的前${top_num}个终端号: \\n
cat $top_terminal_file
echo
printf
printf 返回最多的前${top_num}个IP所属城市(查询时间有点慢,耐心等待!): \\n
echo \'\'
printf %-15s %-15s %-30s\\n 访问次数 IP地址 归属地
echo \'-----------------------------------------------\'
a=0
cat $analyze_dir/ngx_log_top_ip_${input_file}.txt | while read line
do
ip=$(echo $line | cut -d \'\' -f2)
count=$(echo $line | cut -d \'\' -f1)
printf %-10s %-15s %-30s\\n $count $ip $(curl -s https://www.56dr.com/host/ $line | cut -d \'\' -f2) | awk -F \'\\\' {\'print $2--$4--$6\'})
echo \'-----------------------------------------------\'
let a=a 1
done
echo
printf
}
case $1 in
help)
echo
echo -e $Usage: $0 enter a log file \\n
;;
*)
public
simple
;;
esac
exit 0
实现功能:
1、分析访问排名前N的ip地址;
2、分析访问排名前N的url;
3、分析访问排名前N的目标url;
4、分析访问排名前N的终端类型;
5、自动匹配排名前N的ip的归属地。
注意:日志文件和分析脚本放在一个目录即可;日志文件输入绝对路径。用法:
更多关于云服务器,域名注册,虚拟主机的问题,请访问特网科技官网:www.56dr.com
免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。
Copyright © 2009-2022 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 特网科技 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 百度云 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站