好吧,这个标题会有点混乱。让我试着更好地解释一下。我正在构建一个日志记录程序。该程序将有 3 个主要状态:
写入循环缓冲区文件,仅保留最后 10 分钟的数据。
写入缓冲区文件,忽略时间(记录所有数据)。
重命名整个缓冲区文件,并使用过去 10 分钟的数据开始一个新文件(并将状态更改为 1)。
现在,用例是这样的。我在我们的网络中不时遇到一些网络瓶颈。所以我想建立一个系统来记录 TCP 流量,当它检测到瓶颈时(通过 Nagios 检测)。然而,当它检测到瓶颈时,大部分有用的数据已经被传输了。
所以,我想要的是有一个一直在运行的守护进程dumpcap
。在正常模式下,它只会保留过去 10 分钟的数据(因为如果不需要,保留大量数据是没有意义的)。但是当 Nagios 发出警报时,我会在守护进程中发送一个信号来存储所有内容。然后,当 Naigos 恢复时,它将发送另一个信号以停止存储并将缓冲区刷新到保存文件。
现在,问题是我看不到如何干净地存储旋转 10 分钟的数据。如果处于模式 1,我可以每 10 分钟存储一个新文件并删除旧文件。但这对我来说似乎有点脏(尤其是在确定文件中何时发生警报时)。
理想情况下,已保存的文件应使警报始终位于文件中的 10:00 标记处。虽然每 10 分钟就有一次新文件可以做到这一点,但将文件“修复”到那时似乎有点脏。
有任何想法吗?我是否应该只做一个旋转文件系统并在最后将它们组合成 1 (做相当多的后处理)?有没有办法干净地实现半循环文件,从而不需要任何后处理?
谢谢
哦,在这个阶段语言并不重要(我倾向于 Python,但不反对任何其他语言。这比整体设计问题更小)......