【问题标题】:How to detect sequences in a interleaved log file如何检测交错日志文件中的序列
【发布时间】:2020-12-03 20:14:56
【问题描述】:

我想匹配给定模式库中的模式,返回检测到的最长模式。

但是,我在日志文件中只有多个并行任务的交错结果,例如来自处理器的多个内核。

这是数据挖掘中的已知应用程序吗?

我想到了一种类似于Regex subsequence matching 的正则表达式解决方案。然而,有一种距离度量来允许一些模糊性会很好,例如如果序列中的一项活动丢失。

【问题讨论】:

  • 我怀疑这是一个 NP 难题。您更喜欢贪婪的解决方案,还是计算上不可行的解决方案?
  • 正则表达式可以做很多事情,但不烤蛋糕不是其中之一。这里真正的解决方案是为每个线程创建单独的日志文件并匹配每个线程。如果无法处理交织,请提供有关令牌的更多详细信息,因为我怀疑您上面给出的示例被严重抽象到此处涉及正则表达式的任何答案对您来说都是无用的。
  • (1)。您能否更清楚地说明您期望的distance metric? (2)。您期待“最长”匹配模式,那么为什么expected detected pattern 中有 2 个结果,不应该只有ABC 吗?
  • 如果您不能创建单独的日志文件,您当然可以尝试使用每条消息的相关信息(资源号、核心号)来扩展日志消息。

标签: python algorithm pattern-matching data-mining sequencematcher


【解决方案1】:

如果我们有日志文件和模式库,我们可以解决堆栈问题。 我们开始从日志文件中读取。如果带有堆栈的新日志在模式库中创建了现有模式,我们将其推送到堆栈中。除非,我们把它放在一个新的堆栈中。请发送您的 cmets 以完成答案的详细信息。

【讨论】:

    【解决方案2】:

    您有一个很容易描述的问题,如果我们知道您的限制条件就好了。这需要运行多快?

    在 Python 中,您将对资源使用单个迭代器,将每个资源推送到单独的生成器以进行模式匹配。也就是说,迭代器产生 (resource 1, A) 并被推入资源 1 的生成器中,以查看它是否与模式匹配。生成器偶尔会踢出匹配的模式。

    在实践中,您可能只需要一个 Splunk 插件或将所有内容放入数据库中。这种类型的分析用于常见问题,例如“查找所有客户,您在过去两周内进行了 3 次会话,但放弃了购物车,购物车中的一个常见商品占总数的 75% 以上。向这个临时客户发送24 小时内可享 5% 折扣。”

    【讨论】:

      【解决方案3】:

      正如其他人所指出的,如果我们了解您要完成的任务的语义,这将有所帮助。我在这里猜测您的模式库中的模式都与

      • 单个资源(或)
      • 一组资源

      如果是这种情况,我建议您首先将该信息添加到您的模式库中以使其明确。例如,您的模式库如下所示:

      1: A
      1: AB
      1: ABC
      2: AD
      2: C
      2: D
      

      如果你想涵盖一组资源的模式,它可能看起来像这个人为的例子:

      3: X
      4: Y
      3,4: Z
      

      现在,您可以从交错的日志文件中分离出与每个资源相关的日志记录(假设日志文件确实具有资源标识符)。然后,您可以应用模式匹配来发现最长的模式。

      本质上,将您的关注点分开并针对每个子问题应用解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-12
        • 2012-01-16
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        相关资源
        最近更新 更多