#drain #log #grok #categorization

drain-rs

使用drain算法自动聚类半格式化文本

3个版本 (破坏性更新)

0.3.0 2021年5月31日
0.2.0 2020年9月22日
0.1.0 2020年9月22日

#1087 in 算法

自定义许可

30KB
615 代码行

drain-rs

Drain提供了一种在线日志分类的机制。

本版本提供

  • 通过serde json序列化/反序列化drain状态
  • 支持GROK模式,以实现更精确的分类和变量过滤

该项目的目标是提供一个优美、快速、基于Rust的升级版本,用于原始的drain实现。原始论文在此

这是一个工作进展,0.2.x

安装

[dependencies]
drain-rs = "0.2.0"

使用drain进行聚类

要使用drain进行聚类

//Create new drain tree object
let mut drain = DrainTree::new()
// Add log lines and see their group:
let log_group = drain.add_log_line(s.as_str());

要使用drain与grok一起使用

let mut g = grok::Grok::with_patterns();
let filter_patterns = vec![
    "blk_(|-)[0-9]+",     //blockid
    "%{IPV4:ip_address}", //IP
    "%{NUMBER:number}",   //Num
];
// Build new drain tree
let mut drain = DrainTree::new()
    .filter_patterns(filter_patterns)
    .max_depth(4)
    .max_children(100)
    .min_similarity(0.5)
    // HDFS log pattern, variable format printout in the content section
    .log_pattern("%{NUMBER:date} %{NUMBER:time} %{NUMBER:proc} %{LOGLEVEL:level} %{DATA:component}: %{GREEDYDATA:content}", "content")
    // Compile all the grok patterns so that they can be used
    .build_patterns(&mut g);

依赖项

~4MB
~119K SLoC