背景:
使用grok解析日志做字段拆分,性能上可能存在问题,尝试使用ldetool,与grok做下对比。
安装(windows)
下载压缩包:[ldetool](https://github.com/sirkon/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,填写如下(包含双斜杠):
-
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 ,执行成功,显示如下
|