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是有日志文件的,它的每个请求的状态 ...
随机推荐
- Django 小实例S1 简易学生选课管理系统 总目录
python Django实现的一个简易的教务选课系统. 介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty. 项目已上传到我 ...
- jsonpath语法的基本使用
jsonpath的安装及使用方式: pip安装: Python3.7\Scripts> pip install jsonpath jsonpath的使用: obj = json.load(ope ...
- js 正则表达式 验证与限制
.... //验证身份证格式 function onIDCardsValidation(e) { if (e.isValid) { var pattern = /\d*/; if (!(e.value ...
- 菜鸡的Java笔记 第十三 String 类的两种实例化方法
String 类的两种实例化方法 String 类的两种实例化方式的区别 String 类对象的比较 Stirng 类对象的使用分析 /* 1.String 类的两种实例化方式的区别 ...
- [cf1491H]Yuezheng Ling and Dynamic Tree
将其按照区间分块(即$[(i-1)K+1,iK]$作为一个块),并定义$f_{x}$表示$x$的祖先中编号最小且与$x$在同一个块内的节点,$f_{x}$可以通过$f_{a_{x}}$转移,即$f_{ ...
- [loj3247]Non-Decreasing Subsequences
分治,考虑分治到[l,r]的区间(设$mid=(l+r)/2$),将询问分为两类:1.在左/右区间,直接递归下去:2.跨越中间,那么处理出两个数组:L[i][j]表示左区间在开头第i个位置,以数字j为 ...
- 深度揭秘Netty中的FastThreadLocal为什么比ThreadLocal效率更高?
阅读这篇文章之前,建议先阅读和这篇文章关联的内容. 1. 详细剖析分布式微服务架构下网络通信的底层实现原理(图解) 2. (年薪60W的技巧)工作了5年,你真的理解Netty以及为什么要用吗?(深度干 ...
- 一文明白CDN加速是个啥
作者:IT王小二 博客:https://itwxe.com 不知不觉三个月没更新了,这三个月诸事繁忙啊!最近没那么忙了,开始恢复更新. 一.CDN简介 CDN(Content Delivery Net ...
- Plugin [id: 'org.jetbrains.kotlin.jvm'] was not found in any of the following sources: gradle配置:kotlin("jvm")后报错
本来打算兼容java和kotlin,可配置后,项目报错.查看之前项目 再打开当前报错项目: 很明显,报错的原因是jvm的运行文件没有加载进来,多次尝试无果... 只能重新搭建初始化项目了.
- 一次奇怪的的bug排查过程
公司对底层基础库进行了重构,线上稳定跑了几天,在查看订单系统的log时,有几条error信息非常的奇怪, orderID:80320180 statemachine error: no event [ ...