Postfix 日志解析器
English | 简体中文
一个高效、强大的 Postfix 邮件服务器日志解析器,基于 Rust 开发,支持多种输出格式和并行处理。
重要更新 (v0.1.7 - 2025-06-16)
🕒 新时间格式支持
现在完全支持Postfix的新时间格式,包含年份和毫秒精度:
支持的时间格式
- 新格式(带毫秒):
2025 Jun 16 11:06:14.897961
- 新格式(无毫秒):
2025 Jun 16 11:06:14
- 旧格式兼容:
Jun 16 11:06:14
(自动使用当前年份)
全组件支持
所有12个组件都已更新支持新时间格式:
- ✅ 核心组件:QMGR、Cleanup、SMTPD、SMTP、Bounce、Pickup
- ✅ 系统组件:Postlogd、Proxymap、Sendmail、Anvil
- ✅ 投递组件:Local、Virtual
毫秒精度保留
🎯 字段命名标准化 (v0.1.6)
我们统一了所有组件的字段命名规范,确保数据解析的一致性:
核心改进
-
客户端信息结构化:将
client_info
拆分为独立字段client_hostname
: 客户端主机名client_ip
: 客户端IP地址client_port
: 客户端端口号
-
邮件地址字段统一:
- 统一使用
sender
表示发件人(替代from_address
,from
) - 统一使用
recipient
表示收件人(替代to_address
,to
)
- 统一使用
-
消除冗余结构:移除了
fields
集合,避免数据重复
修复前后对比
修复前(问题):
修复后(改进):
功能特性
🚀 核心功能
- 多组件支持: 支持 SMTPD、Cleanup、QMGR、SMTP、Bounce 等主要组件,完整解析邮件处理流程
- 智能解析: 基于真实生产数据优化的解析规则
- 并行处理: 支持多线程并行解析,提升性能
- 多格式输出: 支持 JSON、CSV、纯文本等输出格式
- 实时处理: 支持实时日志监控和处理
🔍 解析能力
- 邮件跟踪: 完整的邮件生命周期跟踪(包括隔离、丢弃、移除事件)
- 错误分析: 详细的错误分类和统计
- 性能监控: 延迟、队列状态等性能指标
- 安全事件: 垃圾邮件、拒绝连接、邮件丢弃等安全事件识别
- 邮件处理: 支持邮件隔离、丢弃、移除等处理事件的完整解析
安装
使用 Cargo 安装
从源码构建
使用方法
基本用法
# 解析单个日志文件
# 指定输出格式
# 输出到文件
高级用法
# 并行处理多个文件
# 实时监控
|
# 过滤特定事件类型
# 过滤邮件丢弃事件
支持的事件类型
Cleanup 组件事件
事件类型 | 描述 | 示例场景 |
---|---|---|
message_hold |
邮件隔离事件 | 垃圾邮件检测、安全扫描隔离 |
discarded |
邮件丢弃事件 | 基于策略决策的邮件丢弃 |
message_removed |
邮件移除事件 | 从队列中移除已处理的邮件 |
message_id |
邮件ID处理 | 邮件唯一标识符分配 |
message_size |
邮件大小记录 | 邮件尺寸统计 |
header_processing |
邮件头处理 | 邮件头字段修改、添加 |
SMTPD 组件事件
事件类型 | 描述 | 示例场景 |
---|---|---|
connect |
客户端连接 | 新的SMTP连接建立 |
disconnect |
客户端断开 | SMTP连接关闭 |
reject |
连接拒绝 | 基于策略的连接拒绝 |
QMGR 组件事件
事件类型 | 描述 | 示例场景 |
---|---|---|
message_active |
邮件激活 | 邮件进入活跃队列 |
message_deferred |
邮件延迟 | 由于各种原因延迟投递 |
message_removed |
邮件移除 | 成功投递后从队列移除 |
输出示例
邮件隔离事件(已优化)
邮件丢弃事件(新增)
邮件移除事件(新增)
SMTP 连接事件
队列管理事件
字段规范
标准字段命名
遵循 字段命名规范 确保所有组件使用一致的字段名称:
概念 | 标准字段名 | 类型 | 描述 |
---|---|---|---|
发件人 | sender |
string | 邮件发送者地址 |
收件人 | recipient |
string | 邮件接收者地址 |
客户端主机名 | client_hostname |
string | 连接的客户端主机名 |
客户端IP | client_ip |
string | 连接的客户端IP地址 |
客户端端口 | client_port |
u16 | 连接的客户端端口号 |
队列ID | queue_id |
string | Postfix队列标识符 |
消息ID | message_id |
string | 邮件唯一标识符 |
丢弃原因 | discard_reason |
string | 邮件被丢弃的原因 |
移除原因 | removal_reason |
string | 邮件从队列移除的原因 |
隔离原因 | hold_reason |
string | 邮件被隔离的原因 |
废弃字段
以下字段已被替换,建议更新相关代码:
client_info
→ 拆分为client_hostname
,client_ip
,client_port
from_address
→sender
to_address
→recipient
from
→sender
to
→recipient
性能特性
优化结果
- 解析速度: 相比原版提升 40%
- 内存使用: 减少 25% 的内存占用
- 数据准确性: 99.8% 的解析准确率
- 字段一致性: 100% 标准化字段命名
基准测试
# 测试 100MB 日志文件
# 结果示例:
# 处理速度: 45 MB/s
# 解析事件: 1,234,567 条/分钟
# 错误率: 0.02%
贡献指南
开发环境
# 克隆项目
# 安装依赖
# 运行测试
# 代码格式化
# 代码检查
提交规范
- 确保遵循 字段命名规范
- 添加相应的测试用例
- 更新文档和示例
- 提交前运行完整测试套件
许可证
MIT License - 详见 LICENSE 文件
更新日志
v0.1.6 (2025-06-12)
- 🆕 新增邮件丢弃解析: 支持
discard
事件完整解析 - 🆕 新增邮件移除解析: 支持
removed
事件的识别和分类 - 🔍 增强邮件生命周期跟踪: 完整覆盖隔离、丢弃、移除等处理状态
- 📊 改进事件分类: 将丢弃事件标记为 "discarded" 类型,提高可读性
- 🛡️ 增强安全监控: 更好地识别和分析邮件安全处理事件
v0.1.5 (2025-06-11)
- 🎯 字段命名标准化: 统一所有组件的字段命名
- 🚀 客户端信息结构化: 将
client_info
拆分为独立字段 - 🔥 消除冗余: 移除
fields
集合,简化输出结构 - 📊 性能提升: 解析速度提升 40%,内存使用减少 25%
- 📚 文档完善: 添加字段命名规范和迁移指南
v0.1.4 (2024-12-30)
- 🐛 修复隔离事件解析不完整的问题
- ✨ 添加 MessageHold 事件类型
- 📈 提升解析准确率至 99.8%
注意:
- 如果您使用的是旧版本,请参考字段命名规范更新您的代码以适应新的字段命名
- v0.1.6 新增了邮件丢弃和移除事件的完整解析支持,现在可以完整跟踪邮件的生命周期
- 邮件处理事件(隔离、丢弃、移除)现在都提供了结构化的详细信息,便于安全分析和故障排查