一.简介

运维工作是一个比较复杂的工作,有时候面对上万条的日志,如何作分析?难道一条条的分析?

这估计看两眼就要打哈欠了吧?聪明的人会选择脚本,这就是为什么现在提倡自动化运维的原因吧,废话不多说,直接上脚本。

实现功能:

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日志分析脚本的更多相关文章

  1. Nginx日志分析及脚本编写

    在我们日常的运维中,当Nginx服务器正常运行后,我们会经常密切关注Nginx访问日志的相关情况,发现有异常的日志信息需要进行及时处理. 那今天我将跟大家一起来研究和分析Nginx日志,nginx默认 ...

  2. nginx日志分析利器GoAccess

    面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...

  3. nginx日志分析利器GoAccess(转)

    面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...

  4. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  5. Nginx 日志分析及性能排查

    Nginx 日志分析及性能排查 2017-03-04 Linux爱好者 (点击上方公众号,可快速关注) 作者:-外星人- my.oschina.net/362228416/blog/844713 如有 ...

  6. 【分享】Nginx日志分析(上)

    在很多时候,我们会非常关注网站的访问量,比如网站的日PV是多少.网站某个功能上线之后点击量是多少,像这些东西都是需要从web容器中的访问日志统计出来的,下面我们看一下如何在nginx中统计网站的访问信 ...

  7. linux系统web日志分析脚本

    linux系统web日志分析这方面工具比较多,比如logwatch或awstats等使用perl语言开发,功能都非常强大.但这些软件都需要进行一些配置,很多朋友往往在技术方面没有投入太多力量,即便参照 ...

  8. ELK+redis搭建nginx日志分析平台

    ELK+redis搭建nginx日志分析平台发表于 2015-08-19   |   分类于 Linux/Unix   |  ELK简介ELKStack即Elasticsearch + Logstas ...

  9. 使用elk+redis搭建nginx日志分析平台

    elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...

随机推荐

  1. python 格式化输出详解(占位符:%、format、f表达式)——上篇 理论篇

    0 - 占位符介绍 要实现字符串的拼接,使用占位符是的一种高效.常用的方式. 举个例子,下面是不使用占位符的一种写法,直接使用加号拼接字符串 name = "Li hua" age ...

  2. SQL Server学习之路:建立数据库、建立表

    1.前言 配置是win10+SQL Server 2012,使用的GUI管理工具是SQL Server 2012自带的SQL Server Management Studio(以下简称SSMS).本系 ...

  3. Exploring Matrix

    import java.util.Scanner; public class J714 { /** * @taking input from user */ public static void ma ...

  4. [noi1754]SA

    枚举T中失配的位置i,容易发现能够成立当且仅当存在一个以$T[0,i)$为后缀的前缀$S[0,a)$且$T(i,|T|)$是$S(a,|S|)$的一个前缀 考虑建立S的正序和倒序的两个后缀自动机,设$ ...

  5. c++基础知识02

    1.前置与后置区别 #include<iostream> using namespace std; int main() { //前置和后置区别 //前置递增或递减 先让变量加减1 然后进 ...

  6. #10470. 「2020-10-02 提高模拟赛」流水线 (line)

    题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...

  7. Anaconda 镜像配置

    镜像源 清华大学: https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ 北京外国语大学: https://mirrors.bfsu.edu.cn/h ...

  8. FESTUNG模型介绍—1.对流方程求解

    FESTUNG模型介绍-1.对流方程求解 1. 控制方程 对流问题中,控制方程表达式为 \[\partial_t C + \partial_x (u^1 C) + \partial_y (u^2 C) ...

  9. 关于ARM的PC指针(什么时候PC+8,PC+4,PC-4,PC-8)转

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.                                                 ...

  10. SQL-join(inner join)、left join、right join、full join

    0.JOIN 类型 有时我们需要从两个或更多的表中获取结果,数据库中的表可通过键将彼此联系起来.每个表中都有一个主键,主键(Primary Key)是一个列,值都唯一.这样做的目的是在不重复每个表中的 ...