![在 Apache 日志中访问特定 URL 时发送电子邮件时发送的电子邮件过多](https://linux22.com/image/117998/%E5%9C%A8%20Apache%20%E6%97%A5%E5%BF%97%E4%B8%AD%E8%AE%BF%E9%97%AE%E7%89%B9%E5%AE%9A%20URL%20%E6%97%B6%E5%8F%91%E9%80%81%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E6%97%B6%E5%8F%91%E9%80%81%E7%9A%84%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E8%BF%87%E5%A4%9A.png)
在这个问题,找到了一种解决方案,可以在每次访问特定 URL(例如 )时自动发送电子邮件?src=foo
,如 Apache 日志中所示:
tail -F -n0 /var/log/apache2/other_vhosts_access.log | grep --line-buffered "?src=foo" | \
{ while IFS= read -r line; do echo "$line" | mail [email protected]; done } &
但问题是,此页面上加载的任何其他资源(图像、图标等)?src=foo
在推荐人列也:
www.example.fr:80 111.111.111.111 - - [12/Sep/2017:17:30:32 +0200] "GET /images/P26372.jpg
HTTP/1.1" 200 86276 "http://example.fr/?src=foo" "Mozilla/5.0"
然后我用这种方法连续收到 15 封电子邮件。
如何限制对此做“消化”?
我考虑过限制对内部模式的搜索"GET ... HTTP"
,以便排除引用列中的结果,但如何做到这一点?
或者,是否可以每天只发送一封电子邮件两次,其中包含 的所有结果grep
? (未发送电子邮件表示未找到任何内容)
答案1
有些日志扫描仪可以对其产生的噪音进行速率限制;我会用sec.pl
然后按照以下方式进行配置
type=SingleWithThreshold
ptype=SubStr
pattern=?src=foo
desc=specific-url-thing
action=pipe 'that url thing happened' /usr/bin/mail -s url-thing [email protected]
window=86400
thresh=1
对于监视相关日志的守护进程实例。这应该立即触发,然后关闭一天;还有其他选项可以聚合点击量等,请参阅手册了解详细信息。