You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python截取fail2ban日志行指定部分隐藏冗余字段

fail2ban日志格式化输出实现方案

核心逻辑:fail2ban的动作日志结构固定,冗余字段集中在时间戳毫秒位到动作关键词之间,用正则提取目标字段即可,不需要硬编码冗余片段做替换,适配性更强。

具体实现代码

import re

# 正则捕获组分别提取:秒级时间戳、动作类型(Ban/Found/Unban)、客户端IP
# 自动跳过中间所有冗余的毫秒标记、进程名、进程ID、日志级别、jail名称字段
match_rule = re.compile(r'^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}),\d+.*?(Ban|Found|Unban)\s+([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})')

with open('/var/log/fail2ban.log', 'r', encoding='utf-8') as f:
    for line in f:
        res = match_rule.search(line)
        if res:
            log_time, action, client_ip = res.groups()
            print(f"{log_time} {action} {client_ip}")

方案说明

  • 不需要单独写三个if判断关键词,正则匹配本身就会自动过滤掉不含三类动作的无关日志行,也不会误匹配日志内容里碰巧出现Ban/Found/Unban字样的非动作记录
  • 没有硬编码冗余片段的空格长度、进程ID等可变内容,哪怕fail2ban升级后中间字段的格式有微调,只要整体日志结构不变就能正常解析
  • 逐行遍历文件而非用readlines()一次性加载全量内容,日志文件体积较大时内存占用更低
  • 输出格式完全匹配需求,示例输出:2022-07-02 18:15:17 Unban 192.168.200.20

内容的提问来源于stack exchange,提问作者Luca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:15:31