我有一个 Dnsmasq 服务器,我想在该服务器上解析查询日志,以便能够根据查询/响应构建统计信息。
Dnsmasq 提供两种日志记录机制:
- 默认情况下,它记录到 syslog
- 如果给出了路径,它将登录到在给定路径中找到的文件
如果 dnsmasq 正在登录 syslog
有没有一种干净的方法来“观察”系统日志以接收 dnsmasq 发送的每条新行?
如果 dnsmasq 正在记录到文件
fifo 是否是 dnsmasq 日志代理的正确解决方案?
由以下人员创建的 fifo 会出现一些问题mkfifo
:
- 如果我们不希望 dnsmasq 的死亡杀死读取器进程,我们需要另一个虚拟进程来保存写入 FD,这对于“自动化”来说是一种痛苦。
- 如果我们不希望读取器进程的死亡破坏 fifo 日志记录,我们需要另一个虚拟的读取器进程,它会忽略所有内容。
- 我们需要始终确保 fifo 保持正常状态并可用。
- 如果我们仍然想要 dnsmasq 的日志(我们可能会这样做),我们被迫要么编写自定义
/var/log/dnsmasq.log
文件,要么以某种方式将日志发送到 syslog,同时将自己伪装成 dnsmasq。
简而言之
如果希望在新的 Dnsmasq 查询/答案上正确收到通知,而又不想冒中断默认 dnsmasq 机制或增加太多复杂性的风险,那么最好的方法是什么?
答案1
您可以自己推出,可以通过组合 tail + awk 来实现,如下所示这里。
否则,syslog 和fail2ban 的组合可以解决此问题。它不会增加大量的复杂性,并且这两个组件是众所周知的并且广泛可用。
Syslog 将管理所有到文件的重定向以及必要的日志文件管理。即使单个用户浏览网页也会生成很多DNS 查找。 syslog 守护进程可以毫无问题地管理此问题,并将涵盖您将遇到的所有实际问题,例如最大文件大小、以特定频率更新文件的文件轮换、日志文件的最大数量。
Fail2ban 通常用于根据日志文件内容将 IP 添加到 iptables/nftables。但是,它作为一个监视文件并在触发时执行脚本操作的平台运行良好。它使用正则表达式来过滤日志文件,以搜索您感兴趣的内容,并在正则表达式匹配时运行操作。您可以让它执行您希望它执行的任何操作,包括调用您编写的 python 脚本。它还具有在计时器过去后执行操作的功能,这在您的用例中可能有用,也可能没有用。