靳闯博客 记录是一种习惯,分享是一种态度
  • 波浪
  • 波浪
  • 波浪
  • 波浪
nginx日志统计分析脚本
发表于: | 分类: 技术积累 | 标签: nginx logs | 评论:0 | 阅读: 211
一个nginx访问日志统计分析的的脚本
写的有点杂乱重复

脚本功能

1: 查询当天所有访问ip排行统计
2: 查询当天访问ip排行前20的统计
3: 查询当天访问最多ip所请求的页面统计
4: 查询指定时间段ip访问数量统计
5: 查询当天访问状态码统计
6: 查询访问状态码所请求的记录信息
7: 查询指定ip所访问的页面

!修改下变量P的日志路径目录即可使用,只统计access的日志!

#!/bin/bash
#name: jinchuang
#email: admin@jinchuang.org
#describe:统计包含access的日志文件,过滤error的日志文件

#你的日志目录
P="/data/log/nginx/"

function search {
while true ;
do
echo "
1: 查询当天所有访问ip排行统计
2: 查询当天访问ip排行前20的统计
3: 查询当天访问最多ip所请求的页面统计
4: 查询指定时间段ip访问数量统计
5: 查询当天访问状态码统计
6: 查询访问状态码所请求的记录信息
7: 查询指定ip所访问的页面
    0 [返回] | q [退出]
"
read -p "请输入编号:" a

case $a in

1)cat $P/$file |awk '{print $1}' |sort -n  |uniq -c|sort -n;;
2)cat $P/$file |awk '{print $1}' |sort -n  |uniq -c|sort -n|tail -n 20;;
3)
ip=`cat $P/$file |awk '{print $1}' |sort -n  |uniq -c|sort -n|tail -n 1 |awk '{print $2}'`
qd=`echo -e "\033[36m请求ip: \033[0m"`
sj=`echo -e "\033[36m请求时间: \033[0m"`
dz=`echo -e "\033[36m请求地址: \033[0m"`
zt=`echo -e "\033[36m状态码: \033[0m"`
awk -v wc="$ip" -v qiuip="$qd" -v shijian="$sj" -v dizhi="$dz" -v zhuang="$zt" '{if($1 == wc) print qiuip$1 "\t"   shijian$4 "\t  "    dizhi$7 "\t"zhuang$9}' $P/$file
;;
4)
read -p "请输入开始时间【如08:00输入0800】: " a
read -p "请输入结束时间【如12:00输入1200】: " b
cat $P/$file|awk -F "[-|:| ]+" -v k="$a" -v s="$b" '{if(s >= $3$4 && $3$4 >= k) print $0}' >/tmp/$a$b.log
cat /tmp/$a$b.log |awk '{print $1}' |sort -n  |uniq -c|sort -n
;;
5)
#赋值
zt=`echo -e "\033[36m状态码:\033[0m"`
er=`echo -e "\033[32m200\033[0m"`
sis=`echo -e "\033[33m403\033[0m"`
ss=`echo -e "\033[31m404\033[0m"`
wub=`echo -e "\033[31m500\033[0m"`
sly=`echo -e "\033[33m301\033[0m"`
sle=`echo -e "\033[33m302\033[0m"`
sals=`echo -e "\033[33m304\033[0m"`
#变量
ok=`awk '{print $9}' $P/$file |grep 200 |wc -l`
sls=`awk '{print $9}' $P/$file |grep 403 |wc -l`
slsi=`awk '{print $9}' $P/$file |grep 404 |wc -l`
wb=`awk '{print $9}' $P/$file |grep 500 |wc -l`
slyi=`awk '{print $9}' $P/$file |grep 301 |wc -l`
sler=`awk '{print $9}' $P/$file |grep 302 |wc -l`
ssi=`awk '{print $9}' $P/$file |grep 304 |wc -l`
#打印格式
printf "%-10s %-10s %-10s %-10s\n" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "%-20s %-19s %-19s %-18s %-18s %-18s %-18s %-10s\n" $zt $er $sis $ss $wub $sly $sle $sals
printf "%-10s %-10s %-10s %-10s\n" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "%-10s %-10s %-10s %-9s %-9s %-9s %-9s %-10s\n" 数量: $ok  $sls  $slsi  $wb $slyi $sler $ssi
printf "%-10s %-10s %-10s %-10s\n" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#echo -e $zt"\t"$er"\t"$sis"\t"$ss"\t"$wub"\t"$sly"\t"$sle"\t"$sals
#echo -e 数量:"\t"$ok"\t"$sls"\t"$slsi"\t"$wb"\t"$slyi"\t"$sler"\t"$ssi
;;
6)
read -p "请输入要查询访问记录的状态码:" sta
cat $P/$file |awk -v jl=$sta '{if($9 == jl)print $0}'
;;
7)
read -p "请输入ip地址:" ip
cat $P/$file |awk -v sip="$ip" '{if($1 == sip) print $0}'
;;
0)break;;
q)exit;;
*)color=`echo -e "\033[36m!!请输入正确的编号!! \033[0m"`;echo $color;;
esac
done
}

while true
do
ls $P |grep -v error |tr "\t" "\n" >/tmp/listlog && cat -n /tmp/listlog
echo "---------------------------
     q  退出脚本执行
---------------------------"
read -p "请输入文件编号:" list
for li in $list
do
case $list in
$li)
file=`sed -n "$li"p /tmp/listlog`
search
;;
q)
exit
;;
*)
echo "请输入正确的编号"
;;
esac
done
done

之前写的一个比较详细的:一个简单查看nginx网站访问日志统计脚本



如果这篇文章帮助到了你,我感到十分荣幸!

或许你不想写点什么......

icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif

站点地图 网站地图
豫ICP备17003270号 | Copyright © 2017-2018 💖 靳闯博客
Typecho🍹Sgreen
TOP