我有一个MaraDNS服务器,需要logging所有查询它的DNS服务器的IP地址。 随着日志logging的详细出现,它会输出这个到stdout,但是当我尝试将stdout(和stderr)redirect到一个日志文件时,似乎并没有实时捕获它,并在写入到stdout时忽略了一些输出。 有任何想法吗?
如果您对DNS服务器的查询率很高,则可能是因为您用来存储日志的存储介质速度不够快,无法跟上STDIO缓冲区。 如果在收到100个查询所花费的时间量上,磁盘速度足够快,那么可以写入90个查询,那么您将开始删除条目。 要么他们不会把它放到你的STDIO缓冲区中,否则你将失去来自缓冲区的排队消息。
如果是这种情况,并且您可以访问高性能存储(如SSD),请尝试将日志放在SSD上。 如果你没有SSD,你可以尝试妥协。 就像任何妥协一样,尽pipe如此,您也有可能失去数据。
创build一个基于RAM的文件系统,并在那里写你的日志。 让另一个作业定期同步或将这些日志复制到较慢的存储中。 如果您的服务器崩溃或重新启动(可能),则会丢失数据,但在正常运行的情况下,您将有更好的机会捕获所有这些查询。