#log-parser #template #drain #algorithm #run #logparsing #jun

nightly bin+lib drainrs

drainrs 实现了日志解析算法

1 个不稳定版本

0.1.0 2023年2月12日

#333模板引擎

MIT 许可证

29KB
420

drainrs

drainrs 实现了自动日志解析的 Drain 算法。

示例

 cargo run ./apache-short.log | tail
{"template":"[Sat Jun <*> <*> <*> [error] [client <*> script not found or unable to stat: /var/www/cgi-bin/awstats",
"values":["11","03:03:04","2005]","202.133.98.6]"]}
{"template":"[Sat Jun <*> <*> <*> [error] [client <*> script not found or unable to stat: /var/www/cgi-bin/awstats",
"values":["11","03:03:04","2005]","202.133.98.6]"]}
{"template":"[Sat Jun <*> <*> <*> [error] [client <*> script not found or unable to stat: /var/www/cgi-bin/awstats",
"values":["11","03:03:04","2005]","202.133.98.6]"]}
{"template":"[Sat Jun <*> <*> <*> [error] <*> Can't find child <*> in scoreboard",
"values":["11","03:03:04","2005]","jk2_init()","4210"]}
{"template":"[Sat Jun <*> <*> <*> [notice] workerEnv.init() ok <*>",
"values":["11","03:03:04","2005]","/etc/httpd/conf/workers2.properties"]}
{"template":"[Sat Jun <*> <*> <*> [error] mod_jk child init <*> <*>",
"values":["11","03:03:04","2005]","1","-2"]}
{"template":"[Sat Jun <*> <*> <*> [error] [client <*> script not found or unable to stat: /var/www/cgi-bin/awstats",
"values":["11","03:03:04","2005]","202.133.98.6]"]}

词汇表

日志记录 是文本文件中的一个条目,通常是单行,但不必是。

例如 [Thu Jun 09 06:07:05 2005] [notice] Digest logline here: done

日志模板 是用于格式化日志记录的字符串模板。

例如在 Python 格式中,它看起来像这样

"[{date}] [{log_level}] Digest logline here: {status}".格式化(...)

或者 drain.py 和 drain3.py 输出的语法

"[<date>] [<log_level>] Digest logline here: <*>"

待办事项

  • Python 版本中可配置的任何参数在此处都尚未可配置。

  • 第一个 drain 允许 split_line_provided,这使得你可以编写一个简单的令牌映射器,如下所示

    <时间戳> <日志级别> <内容>

然后 drain 仅将其逻辑应用于 <content>

Drain3 看起来已经放弃了这一点,转而使用用户代码侧的预处理,这很公平,尽管这个功能从 cli/无编码的角度来看非常有帮助。

  • Drain3 允许“遮罩”,这似乎是为了识别类似 IP 或数字的值。我们对此有初步支持,但无法从类外部配置,且用户界面尚未定义。

依赖关系

~2.8–4.5MB
~78K SLoC