背景:
使用grok解析日志做字段拆分,性能上可能存在问题,尝试使用ldetool,与grok做下对比。
安装(windows)
下载压缩包:ldetool
使用idea打开
当前目录是 D:\webwork\ldetool

实践
-
项目里已存在的demo是上图中红框所示的三个文件,下面按照README.md的步骤进行生成自己的demo,以便更容易熟悉其逻辑。
-
首先解决go mod的报错

直接删除go.mod里有关github.com/sirkon/gosrcfmt的配置即可 -
README.md有下面一段话
First write extraction script, we usually name it `<something>.lde` …… The recommended way is to put something like `//go:generate ldetool -- package main Line.lde` in `generate.go` of a package and then generate a code with `go generate <project path>` -
所以新建一个文件,如line.lde,填写以下内容
Line = ^'[' Time(string) ']' ^" FETCH " ^"first[" First(uint8) ']'[1] ^" format[" Format(string) ~']' ?Hidden (^" hidden[" Value(string) ']') ^" userAgent[" UserAgent(string) ']' _ "country[" Country(string) ']' ;匹配的日志内容如下:
[2017-09-02T22:48:13] FETCH first[1] format[JSON] hidden[0] userAgent[Android App v1.0] rnd[21341975] country[MA] [2017-09-02T22:48:14] FETCH first[0] format[JSON] userAgent[Android App v1.0] rnd[10000000] country[LC]具体语法可以查看TOOL_RULES.md
-
新建文件line.go,填写如下(包含双斜杠):
//go:generate ldetool --package main line.lde -
terminal执行命令
go generate D:\webwork\ldetool,出现如下错误

line.go文件里就这三行,然后报错了。试了几次后发现需要加个第四行,就可以执行成功了。


执行成功结果

生成相关处理该格式的日志的结构体对象

-
编写gotest,日志内容是
[2017-09-02T22:48:13] FETCH first[1] format[JSON] hidden["1"] userAgent[Android App v1.0] rnd[21341975] country[MA]
8. 执行结果如下:

Linux下实践
1、进入安装目录,rz -e 将windows下的压缩包拷贝到该目录,使用unzip命令解压。然后修改go.mod文件,与上述一样。
2、同样的创建line.lde、line.go文件,然后执行命令go generate /home/op/ldetool-master
3、报如下错误
generate.go:3: running "ldetool": exec: "ldetool": executable file not found in $PATH
4、所以尝试编译main文件进generate,go run main.go dicts.go,出现如下提示
Usage: main [--yaml-dict YAML-DICT] [--json-dict JSON-DICT] [--package PACKAGE] [--big-endian] [--little-endian] [--go-string] [--version] [FILE [FILE ...]] error: missing file name with LDE rules exit status 255
5、按照提示重新执行如下命令,go run main.go dicts.go --package main line.lde,执行成功,显示如下

本文档介绍了如何在Windows环境下使用ldetool替代grok进行日志解析,以提升性能。通过示例展示了创建.lde规则文件、处理gomod报错、生成结构体对象的过程,并在遇到命令行错误时进行解决。同时,文中还包含了在Linux环境下执行相同操作的步骤,包括ldetool命令的正确用法。
596

被折叠的 条评论
为什么被折叠?



