Nginx日志分析脚本
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,运维工作是一个比较复杂的工作,有时候面对上万条的日志,如何作分析?难道一条条的分析?聪明的人会选择脚本,这就是为什么现在提倡自动化运维的原因吧,废话不多说,直接上脚本。vim /data/script
千家信息网最后更新 2026年11月03日Nginx日志分析脚本
运维工作是一个比较复杂的工作,有时候面对上万条的日志,如何作分析?难道一条条的分析?
聪明的人会选择脚本,这就是为什么现在提倡自动化运维的原因吧,废话不多说,直接上脚本。
vim /data/scripts/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" #获取最活跃IP ##cat $log_file | awk '{print $1}' | sort | uniq -c | sort -rn | head -${top_num} > $top_ip_file awk '{ips[$1]++} END{for (i in ips){print ips[i],i}}' $log_file | sort | uniq -c | sort -k1 -nr| head -${top_num} > $top_ip_file #获取访问来源最多的url cat $log_file | awk '{print $13}' | sort | uniq -c | sort -rn | head -${top_num} > $top_src_url_file #获取请求最多的url cat $log_file | awk '{print $8}' | sort | uniq -c | sort -rn | head -${top_num} > $top_dest_url_file #获取返回最多的状态码 cat $log_file | awk '{print $11}'| sort | uniq -c | sort -rn | head -${top_num} > $top_code_file #获取返回最多的终端类型 cat $log_file | awk '{print $14}'| 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 ;;esacexit 0实现功能:
1、分析访问排名前N的ip地址;
2、分析访问排名前N的url;
3、分析访问排名前N的目标url;
4、分析访问排名前N的终端类型;
5、自动匹配排名前N的ip的归属地。
注意:日志文件和分析脚本放在一个目录即可;日志文件输入绝对路径。用法:
分析
日志
脚本
时间
终端
文件
来源
状态
地址
大小
类型
工作
归属
截止
起始
输入
复杂
聪明
耐心
万条
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
博彦科技互联网金融
盈实互联网科技
互联网最新的科技有限公司
互联网科技战争
中国 科技 互联网
互联网科技公司电话
亿策互联网科技
壕鑫互联网络科技
互联网科技有限公司 翻译
四个字互联网科技公司取名
苏州五指互联网络科技有限
西安小鹰速贷互联网科技有限公司
互联网科技和法律行业
怎样加入科技互联网
富国互联网金融科技混合基金
互联网风格科技公司名称
广州梦谷互联网科技有限公司领导
互联网科技平台产品运营
青岛易易互联网科技
利用互联网等科技手段
博彦科技互联网金融
广州紫鲸互联网科技有限公司
美国互联网保险保险科技
盈实互联网科技
互联网科技集团
互联网科技上市公司
互联网科技公司的市场部门
移动互联网科技股
互联网校园科技培训
全球科技与互联网公司市值变化
