继上次分享了基于Go语言开发的仿D盾简易文件夹监控工具后,收到了不少朋友的反馈。大家普遍认为这个轻量级工具在日常运维中确实能解决基础的文件篡改溯源需求,但也提出了一个共同的期望:如果能在检测到文件变化时主动发送邮件通知,那就更实用了!
经过一段时间的开发和测试,我很高兴地告诉大家,邮件通知功能已经正式上线!现在这个监控工具不仅能实时监控文件变化并记录日志,还能在检测到指定后缀文件的变更时,自动发送邮件通知给管理员,让你即使不在电脑前,也能第一时间获知服务器上的文件变动情况。
为什么要增加邮件通知功能?
在实际运维工作中,我们不可能24小时守在服务器旁边查看日志。文件被篡改往往发生在我们不注意的时候,等到发现问题时可能已经造成了严重后果。有了邮件通知功能,我们可以:
- 实时响应:文件一有变动,立即收到通知,第一时间采取行动
- 远程监控:即使不在办公室,也能随时了解服务器文件状态
- 精准预警:可以针对特定类型的文件(如配置文件、可执行文件)设置通知
- 团队协作:通知可以发送给多个管理员,确保关键变更不会被遗漏
新增功能详解
1. 基于文件后缀的智能过滤
新版本支持根据文件后缀来决定是否发送邮件通知。你可以在配置文件中指定需要监控的文件类型,例如:
"smtp_notify_suffix": [
".php",
".jsp",
".exe",
".config",
".ini"
]
这样,只有当这些后缀的文件发生变化时,系统才会发送邮件通知,避免了无关文件变动造成的通知泛滥。
2. 灵活的SMTP配置
为了适应不同的邮件服务环境,新版本提供了灵活的SMTP配置选项:
"smtp_enabled": true,
"smtp_host": "smtp.gmail.com",
"smtp_port": 587,
"smtp_username": "email@gmail.com",
"smtp_password": "password",
"smtp_sender": "email@gmail.com",
"smtp_recipients": [
"admin@example.com",
"security@example.com"
]
支持包括Gmail、Outlook、QQ邮箱、163邮箱等在内的主流邮件服务提供商,配置简单直观。
3. 详细的邮件通知内容
邮件通知包含了完整的事件信息,让你一目了然:
- 事件时间:精确到秒的时间戳
- 事件类型:创建、修改、删除还是重命名
- 文件路径:完整的文件路径信息
- 详细描述:事件的具体说明
4. 异步发送机制
为了确保邮件发送不会影响主程序的监控性能,新版本采用了异步发送机制:
// 发送邮件
go func() {
auth := smtp.PlainAuth("", config.SMTPUsername, config.SMTPPassword, config.SMTPHost)
to := config.SMTPPrecipients
addr := fmt.Sprintf("%s:%d", config.SMTPHost, config.SMTPPort)
err := smtp.SendMail(addr, auth, config.SMTPSender, to, []byte(message))
if err != nil {
logEvent("ERROR", "", fmt.Sprintf("发送邮件通知失败: %v", err), "ERROR")
} else {
logEvent("INFO", "", fmt.Sprintf("邮件通知已发送: %s", subject), "INFO")
}
}()
这样即使在邮件发送过程中遇到网络延迟或其他问题,也不会影响文件监控的实时性。
配置文件自动创建
考虑到有些用户可能是第一次使用,新版本还增加了配置文件自动创建功能。如果程序运行时找不到配置文件,会自动创建一个包含默认配置的config.json文件,你只需要根据自己的需求修改相应参数即可。
使用示例
1. 基本配置
首先,编辑config/config.json文件,启用邮件通知功能:
{
"watch_dirs": [
"/var/www/html",
"/etc/nginx/conf.d"
],
"log_path": "./logs",
"smtp_enabled": true,
"smtp_host": "smtp.gmail.com",
"smtp_port": 587,
"smtp_username": "your_email@gmail.com",
"smtp_password": "your_app_password",
"smtp_sender": "your_email@gmail.com",
"smtp_recipients": [
"admin@yourdomain.com"
],
"smtp_notify_suffix": [
".php",
".conf",
".ini",
".exe"
]
}
2. 编译运行
# 编译
go build -o dir_monitor main.go
# 运行
./dir_monitor
3. 测试验证
创建一个测试文件,验证邮件通知功能:
# 创建一个PHP文件,应该会触发邮件通知
touch /var/www/html/test.php
# 修改配置文件,也应该触发通知
echo "test" >> /etc/nginx/conf.d/default.conf
稍等片刻,你应该就能收到邮件通知了。
注意事项
- 安全考虑:配置文件中的SMTP密码以明文形式存储,请确保配置文件的访问权限设置正确
- 邮件频率:如果监控的目录有大量文件变更,可能会导致大量邮件通知,请合理配置需要通知的文件后缀
- 服务运行:作为系统服务运行时,请确保配置文件中的路径使用绝对路径
- 邮箱设置:部分邮箱服务商(如Gmail、QQ邮箱)需要使用应用专用密码或授权码,而不是登录密码
未来规划
目前这个工具已经能够满足基础的文件监控和邮件通知需求,但还有一些功能可以进一步完善:
- Web管理界面:提供简单的Web界面,方便查看监控状态和历史记录
- 多级别告警:根据文件重要性设置不同级别的告警策略
- 自定义通知模板:允许用户自定义邮件通知的内容和格式
- 更多通知渠道:支持微信、短信等更多通知方式
如果你对这个工具有任何建议或反馈,欢迎在评论区留言,或者直接到Gitee仓库提交issue。
总结
这次的升级主要聚焦在邮件通知功能上,目的是让这个轻量级的文件监控工具变得更加实用。通过增加邮件通知,我们可以实现对服务器文件的实时远程监控,在文件被篡改的第一时间得到通知,大大提高了运维效率和安全性。
工具依然保持了轻量、简单的特点,没有引入复杂的依赖,编译后即可直接运行。希望这个升级版的文件监控工具能为你的运维工作带来更多便利!
项目地址:https://gitee.com/li-laihu/gotools/tree/master/monitor
注:本文介绍的功能基于最新版本,如果你使用的是旧版本,请先更新到最新版本以获得这些功能。