Nginx日志分析与告警
Python编写的Nginx日志分析工具,解析access.log,统计PV/UV、状态码分布、TOP访问页面、高频IP、错误率,支持设置阈值告警,发现异常IP或高错误率自动推送告警,是网站运维的好帮手。
详细内容
import re
from collections import Counter
log_path = '/var/log/nginx/access.log'
pattern = r'(\S+) \S+ \S+ \[([^\]]+)\] "(\S+) (\S+) \S+" (\d+) (\d+)'
ip_counter = Counter(); status_counter = Counter(); page_counter = Counter()
with open(log_path) as f:
for line in f:
m = re.match(pattern, line)
if m:
ip, _, method, url, status, size = m.groups()
ip_counter[ip] += 1
status_counter[status] += 1
page_counter[url] += 1
total = sum(status_counter.values())
error_rate = sum(v for k,v in status_counter.items() if k.startswith('5')) / total * 100
print(f'总请求: {total}')
print(f'错误率: {error_rate:.2f}%')
print(f'TOP5 IP: {ip_counter.most_common(5)}')
print(f'TOP5 页面: {page_counter.most_common(5)}')
print(f'状态码分布: {dict(status_counter)}')
适配环境
依赖环境:Python 3.7+,无需额外依赖
使用说明
1.安装Python 3.7+
2.保存为nginx_analyze.py
3.修改日志文件路径
4.python nginx_analyze.py 运行
5.可配合crontab定时运行
修改log_path为你的access.log路径
可以设置错误率告警阈值
高频IP可以自动加入黑名单
支持分析压缩的日志文件
结果可以输出为JSON或CSV
2.保存为nginx_analyze.py
3.修改日志文件路径
4.python nginx_analyze.py 运行
5.可配合crontab定时运行
修改log_path为你的access.log路径
可以设置错误率告警阈值
高频IP可以自动加入黑名单
支持分析压缩的日志文件
结果可以输出为JSON或CSV
常见问题
问:支持其他Web服务器日志吗?
答:目前只支持Nginx默认格式,Apache需要修改正则
问:日志很大怎么办?
答:脚本逐行读取,内存占用低,可以处理GB级日志