Nginx日志分析脚本
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,运维工作是一个比较复杂的工作,有时候面对上万条的日志,如何作分析?难道一条条的分析?聪明的人会选择脚本,这就是为什么现在提倡自动化运维的原因吧,废话不多说,直接上脚本。vim /data/script
千家信息网最后更新 2025年02月04日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安全错误
数据库的锁怎样保障安全
全国计算机三级网络技术点
金字工程电子政务网络安全
网络安全法保护哪些利益
色贴图软件开发
浩瀚网络技术
数据库高并发查询优化
民政局网络安全保障工作方案
关于网络安全答题活动的新闻稿
教委信息中心网络安全预案
软件开发数据怎么导出
确保数据安全关停服务器
迅雷 使用代理服务器
上海数据库通用多路锁控板
江西创推网络技术有限公司
cs开发用什么软件开发
网页游戏直播软件开发
人头录音软件开发
服务器拷机软件
服务器硬件应考察什么指标
一梦江湖特殊服务器
浅述我国网络安全的法律法规
我的世界联机服务器地址格式
忍者必须死3服务器是通用的吗
云服务器设置多大合适
苹果笔记本电脑做软件开发
中职生网络技术班高三学科
100人的软件开发团队
软件开发模型有x模型吗
数据库怎么查询年龄最大的两个人
网络技术协议合同范本