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

常见问题

问:支持其他Web服务器日志吗?
答:目前只支持Nginx默认格式,Apache需要修改正则

问:日志很大怎么办?
答:脚本逐行读取,内存占用低,可以处理GB级日志

PythonNginx日志分析运维告警PV/UV免费

更多其他