用shell做nginx日志分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用shell做nginx日志分析相关的知识,希望对你有一定的参考价值。

#!/bin/bash

if [[ $# == 0 ]];then
echo "Error:请输入要查询的天数???"
else
echo "暂时不支持centos的7的版本!!!"
NOW_TIME_CUO=date +%s
((END_TIME_CUO=${NOW_TIME_CUO}-echo $1*3600*24 | bc))
NOW_TIME=date | awk ‘{print $3"\\\/"$2"\\\/"$NF}‘
END_TIME=date -d @${END_TIME_CUO}| awk ‘{print $3"\\\/"$2"\\\/"$NF}‘

##根据ip统计一段时间的UV
echo -e "\033[31mOutput $1 day‘s UV: \033[0m"
cat access.log|grep -v curl|sed -n "/${END_TIME}/,/${NOW_TIME}/p"| awk ‘{print $1}‘| sort| uniq -c| wc -l

##根据访问URL访问PV
echo -e "\033[31mOutput $1 day‘s PV: \033[0m"
cat access.log|grep -v curl|sed -n "/${END_TIME}/,/${NOW_TIME}/p"| awk ‘{print $7}‘| wc -l

##查询访问最频繁的URL
echo -e "\033[31mOutput $1 day‘s 10 HOT URL: \033[0m"
cat access.log|grep -v curl|sed -n "/${END_TIME}/,/${NOW_TIME}/p"| awk ‘{print $7}‘| sort|uniq -c|sort -n -k 1 -r|head

##查询访问最频繁的IP
echo -e "\033[31mOutput $1 day‘s 10 HOT IP: \033[0m"
cat access.log| grep -v curl|sed -n "/${END_TIME}/,/${NOW_TIME}/p"|awk ‘{print $1}‘|sort|uniq -c|sort -n -k 1 -r|head

fi
:<<DOWN
1、根据访问IP统计UV
awk ‘{print $1}‘ access.log | sort | uniq -c | wc -l
2、统计访问URL统计PV
awk ‘{print $7}‘ access.log | wc -l
3、查询访问最频繁的URL
awk ‘{print $7}‘ access.log | sort | uniq -c |sort -n -k 1 -r | more
4、查询访问最频繁的IP
awk ‘{print $1}‘ access.log | sort | uniq -c |sort -n -k 1 -r | more
5、根据时间段统计查看日志
cat access.log |sed -n ‘/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p‘| more
DOWN

以上是关于用shell做nginx日志分析的主要内容,如果未能解决你的问题,请参考以下文章

python分析apache和nginx日志文件输出访客ip列表的代码

Shell脚本切割日志

shell分析nginx日志

shell 脚本分析nginx 访问日志状态码

持续更新—Nginx日志分析方法

shell分析nginx access log日志