Nginx日志分析脚本
一.简介
运维工作是一个比较复杂的工作,有时候面对上万条的日志,如何作分析?难道一条条的分析?
这估计看两眼就要打哈欠了吧?聪明的人会选择脚本,这就是为什么现在提倡自动化运维的原因吧,废话不多说,直接上脚本。
实现功能:
1、分析访问排名前N的ip地址
2、分析访问排名前N的url
3、分析访问排名前N的目标url
4、分析访问排名前N的终端类型
5、自动匹配排名前N的ip的归属地
注意:日志文件和分析脚本放在一个目录即可;日志文件输入绝对路径。
二.脚本
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"
//以下需根据自己的nginx日志格式来进行截取:
#获取最活跃IP
cat $log_file | awk '{print $1}' | sort | uniq -c | sort -rn | head -${top_num} > $top_ip_file
#获取访问来源最多的url
cat $log_file | awk '{print $11}' | sort | uniq -c | sort -rn | head -${top_num} > $top_src_url_file
#获取请求最多的url
cat $log_file | awk '{print $7}' | sort | uniq -c | sort -rn | head -${top_num} > $top_dest_url_file
#获取返回最多的状态码
cat $log_file | awk '{print $9}'| sort | uniq -c | sort -rn | head -${top_num} > $top_code_file
#获取返回最多的终端类型
cat $log_file | awk '{print $13}'| 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 "http://freeapi.ipip.net/$(echo $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
Nginx日志分析脚本的更多相关文章
- Nginx日志分析及脚本编写
在我们日常的运维中,当Nginx服务器正常运行后,我们会经常密切关注Nginx访问日志的相关情况,发现有异常的日志信息需要进行及时处理. 那今天我将跟大家一起来研究和分析Nginx日志,nginx默认 ...
- nginx日志分析利器GoAccess
面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...
- nginx日志分析利器GoAccess(转)
面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...
- nginx高性能WEB服务器系列之八--nginx日志分析与切割
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- Nginx 日志分析及性能排查
Nginx 日志分析及性能排查 2017-03-04 Linux爱好者 (点击上方公众号,可快速关注) 作者:-外星人- my.oschina.net/362228416/blog/844713 如有 ...
- 【分享】Nginx日志分析(上)
在很多时候,我们会非常关注网站的访问量,比如网站的日PV是多少.网站某个功能上线之后点击量是多少,像这些东西都是需要从web容器中的访问日志统计出来的,下面我们看一下如何在nginx中统计网站的访问信 ...
- linux系统web日志分析脚本
linux系统web日志分析这方面工具比较多,比如logwatch或awstats等使用perl语言开发,功能都非常强大.但这些软件都需要进行一些配置,很多朋友往往在技术方面没有投入太多力量,即便参照 ...
- ELK+redis搭建nginx日志分析平台
ELK+redis搭建nginx日志分析平台发表于 2015-08-19 | 分类于 Linux/Unix | ELK简介ELKStack即Elasticsearch + Logstas ...
- 使用elk+redis搭建nginx日志分析平台
elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...
随机推荐
- Python 爬取 妹子图(技术是无罪的)
... #!/usr/bin/env python import urllib.request from bs4 import BeautifulSoup def crawl(url): header ...
- 菜鸡的Java笔记 第五 - java 程序逻辑控制
程序主要分为三种逻辑:顺序,分支,循环. if 分支语句 if分支语句是最为基础的分支操作,但是其有三种使用形式: if语句 if.....else 语句 if....else...if...el ...
- [cf1491H]Yuezheng Ling and Dynamic Tree
将其按照区间分块(即$[(i-1)K+1,iK]$作为一个块),并定义$f_{x}$表示$x$的祖先中编号最小且与$x$在同一个块内的节点,$f_{x}$可以通过$f_{a_{x}}$转移,即$f_{ ...
- 监听器watch
<label > 姓名: <input type="text" placeholder="请输入姓名" v-model="firt ...
- Qt5加载SVG格式的图片并更颜色
QIcon MainWindow::qiconFromSvg(QString svg_path, QString color) { QPixmap img(svg_path); QPainter qp ...
- 洛谷 P4621 - [COCI2012-2013#6] BAKTERIJE(exCRT)
洛谷题面传送门 发篇正常点的题解. 首先对于这样的题暴力枚举肯定是不行的,因为最小时间显然可能达到 \((4nm)^5\approx 10^{20}\),就算数据很难卡到这个上界,构造出一些使你暴力超 ...
- CF#581 (div2)题解
CF#581 题解 A BowWow and the Timetable 如果不是4幂次方直接看位数除以二向上取整,否则再减一 #include<iostream> #include< ...
- PostgreSQL 数据库备份与还原
PostgreSQL 数据库备份与还原 目录 备份 还原 栗子 备份 PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以 ...
- python18协程
协程是我们自己调度的 进程是系统调度的协程切换很少开销 python3.5之前的实现方法 def yield_test(): """实现协程函数""& ...
- eggNOG 5.0数据库介绍
目录 1. eggNOG简介 2. eggNOG-Mapper注释原理 3. eggNOG 5.0数据资源 4. eggNOG-Mapper使用 5. NOG.KOG.COG.KEGG.GO区别? 1 ...