1

// Java 程序员,当我指的是方法时,我指的是“做事的方式”...

大家好,

我正在编写一个日志挖掘脚本来监视我公司的各种日志文件,它是用 Perl 编写的,尽管我可以访问 Python,如果我真的需要,C(尽管我的公司不喜欢二进制文件)。它需要能够经历过去的 24 小时,获取日志代码并检查它是否应该忽略或通过电子邮件发送给适当的人(我)。该脚本将作为 Solaris 服务器上的 cron 作业运行。现在这就是我的想法(这只是伪...而且写得很糟糕的伪)

main()
{
    $today = Get_Current_Date();
    $yesterday = Subtract_One_Day($today);
    `grep $yesterday '/path/to/log' > /tmp/log`    # Get logs from previous day
    `awk '{print $X}' > /tmp/log_codes`;           # Get Log Code
    SubRoutine_to_Compare_Log_Codes('/tmp/log_codes');
}

另一个想法是将日志文件加载到内存中并在那里读取它......除了两个小问题之外,这一切都很好。

  1. 这些服务器是生产服务器,为数百万客户提供服务……
  2. 日志文件平均 3.3GB(大约两天的日志)

因此,grep 不仅会花费一些时间来遍历每个文件,而且还会占用进程中需要在其他地方使用的 CPU 和内存。将 3.3GB 的文件加载到内存中并不是最明智的想法。(至少恕我直言)。现在我有一个疯狂的想法,涉及汇编代码和内存位置,但我不知道 SPARC 汇编太快了这个想法。

有人有什么建议吗?

感谢您阅读本文 =)

4

1 回答 1

2

可能的解决方案: 1) 让系统在每个午夜开始一个新的日志文件——这样你可以以降低的优先级挖掘前一天的有限大小的日志文件;2) 修改日志系统,使其自动提取某些消息以进行动态进一步处理。

于 2010-09-02T18:41:56.867 回答