Python解析ticky服务syslog日志生成CSV报表返回空表求助
运行后表格为空的核心原因
脚本的统计逻辑、CSV写入逻辑无问题,输出空表的原因全部来自正则匹配环节的错误:
- 强制要求日志正文必须包含
[#数字]格式的工单号,但样例中的ERROR级日志根本不存在这个结构,直接导致所有ERROR行匹配失败 - 正则语法误用:
- 把
ERROR、INFO包在[]字符组里,实际匹配效果是枚举E/R/O/I/N/F的任意字符组合,根本无法识别完整的日志级别字符串 - 代码中错误将HTML转义实体
<、>写进了命名捕获组的语法结构里,导致正则引擎根本识别不了message这类自定义捕获组,匹配逻辑完全失效
- 把
- 开头写的时间部分的正则匹配规则过于模糊,和实际日志的固定时间格式(如
Jan 31 16:35:46)不兼容,进一步降低了匹配成功率
修正方案
所有ticky服务输出的日志都有固定结构:[时间] [主机名] ticky: [日志级别] [日志正文] ([用户名]),不需要拆分INFO、ERROR两套正则,用一条通用正则就能覆盖所有格式,无需强制要求正文中必须带工单号。
对应的正则规则为:ticky: (ERROR|INFO) (?P<message>.*) \((?P<username>\w+)\)$
规则逻辑:跳过前面无意义的时间、主机名字段,直接匹配ticky服务的固定输出标识,依次抓取日志级别、正文内容、括号内的用户名,能适配所有样例中的日志格式。
修正后的完整可运行代码如下:
#!/usr/bin/env python3 import re import csv import operator errors = {} # 统计不同错误信息的出现次数 per_user = {} # 按用户名统计 [INFO次数, ERROR次数] logfile = 'syslog.log' # 预编译正则提升匹配效率 log_pattern = re.compile(r'ticky: (ERROR|INFO) (?P<message>.*) \((?P<username>\w+)\)$') with open(logfile, 'r') as f: for line in f: match = log_pattern.search(line) if not match: continue level, message, username = match.groups() # 初始化用户计数项 per_user.setdefault(username, [0, 0]) if level == 'ERROR': errors[message] = errors.get(message, 0) + 1 per_user[username][1] += 1 else: per_user[username][0] += 1 # 按规则排序 error_sorted = sorted(errors.items(), key=operator.itemgetter(1), reverse=True) per_user_sorted = sorted(per_user.items()) # 写入错误统计报表,newline='' 避免CSV出现空行 with open('error_report.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['Error', 'Count']) writer.writerows(error_sorted) # 写入用户行为统计报表 with open('per_user_report.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['Username', 'INFO', 'ERROR']) for username, counts in per_user_sorted: writer.writerow([username, counts[0], counts[1]])
样例日志测试结果
error_report.csv将按错误计数从高到低列出:Connection to DB failed(2次)、Timeout while retrieving information(1次)、The ticket was modified while updating(1次)per_user_report.csv将按用户名排序列出:bpacheco(INFO 0、ERROR 1)、mcintosh(INFO 2、ERROR 1)、oren(INFO 0、ERROR 2)
内容的提问来源于stack exchange,提问作者Julia Martynenko
相关产品推荐
相关产品推荐

