日志解析--ldetool

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

使用grok解析日志做字段拆分,性能上可能存在问题,尝试使用ldetool,与grok做下对比。

安装(windows)

下载压缩包:ldetool
使用idea打开
当前目录是 D:\webwork\ldetool
在这里插入图片描述

实践

  1. 项目里已存在的demo是上图中红框所示的三个文件,下面按照README.md的步骤进行生成自己的demo,以便更容易熟悉其逻辑。

  2. 首先解决go mod的报错在这里插入图片描述
    直接删除go.mod里有关github.com/sirkon/gosrcfmt的配置即可

  3. 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>`
    
  4. 所以新建一个文件,如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

  5. 新建文件line.go,填写如下(包含双斜杠):

    //go:generate ldetool --package main line.lde
    
  6. terminal执行命令go generate D:\webwork\ldetool,出现如下错误
    在这里插入图片描述
    line.go文件里就这行,然后报错了。试了几次后发现需要加个第行,就可以执行成功了。

    在这里插入图片描述
    执行成功结果
    在这里插入图片描述
    生成相关处理该格式的日志的结构体对象
    在这里插入图片描述

  7. 编写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,执行成功,显示如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值