无法捕获 maraDNS 进程的所有标准输出

无法捕获 maraDNS 进程的所有标准输出

我有一台 MaraDNS 服务器,需要记录查询它的所有 DNS 服务器的 IP。打开日志详细程度后,它会将其输出到 stdout,但当我尝试将 stdout(和 stderr)重定向到日志文件时,它似乎无法实时捕获它,并且在写入 stdout 时会遗漏一些输出。有什么想法吗?

答案1

如果您的 DNS 服务器的查询率很高,则您用于存储日志的存储介质可能不够快,无法跟上 STDIO 缓冲区的速度。如果在接收 100 个查询所需的时间内,您的磁盘只能写入 90 个查询,那么您将开始丢弃条目。要么它们根本无法进入您的 STDIO 缓冲区,要么您将丢失缓冲区中的排队消息。

如果是这种情况,并且您有高性能存储(如 SSD),请尝试将日志放在 SSD 上。如果您没有 SSD,您可以尝试折衷方案。不过,与任何折衷方案一样,您确实有丢失数据的风险。

创建一个基于 RAM 的文件系统,并将日志写入其中。再安排另一项工作定期同步或复制这些日志到较慢的存储中。如果服务器崩溃或重新启动(可能),您将丢失数据,但当一切正常运行时,您将有更好的机会捕获所有这些查询。

相关内容