场景描述
小王将日志采集到日志服务(Cloud Log Service,CLS),是单行文本格式。现在小王想将日志结构化,从文本中提取日志时间、日志级别、requestid 等信息,便于后续的检索分析。
场景分析
梳理一下小王的加工需求,加工思路如下:
1. {...}中的内容是操作的详情,可以通过正则提取。
2. 使用正则提取日志时间、日志级别、URL。
原始日志
{"content": "[2021-11-24 11:11:08,232][328495eb-b562-478f-9d5d-3bf7e][INFO] curl -H 'Host: ' http://abc.com:8080/pc/api -d {\\"version\\": \\"1.0\\",\\"user\\": \\"CGW\\",\\"password\\": \\"123\\"}"}
加工结果
{"level":"INFO""password":"123""requestid":"328495eb-b562-478f-9d5d-3bf7e""time":"2021-11-24 11:11:08,232""user":"CGW""version":"1.0"}
DSL 加工函数
ext_regex("content", regex="\\[(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3})\\]\\[(\\w+-\\w+-\\w+-\\w+-\\w+)\\]\\[([A-Z]{4})\\].*(\\{[^\\}]+\\})", output="time,requestid,level,msg")ext_json("msg")fields_drop("content","msg")
DSL 加工函数详解
1. 使用正则键值提取函数 ext_regex,提取时间、请求、日志级别、消息等信息,并将相关的内容保存至 time、requestid、level、msg 字段中。
ext_regex("content", regex="\\[(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3})\\]\\[(\\w+-\\w+-\\w+-\\w+-\\w+)\\]\\[([A-Z]{4})\\].*(\\{[^\\}]+\\})", output="time,requestid,level,msg")
2. 使用 ext_json 对 msg 字段进行平铺,msg 的值是{\\"version\\": \\"1.0\\",\\"user\\": \\"CGW\\",\\"password\\": \\"123\\"}。
ext_json("msg")
3. 丢弃 content、msg 字段。
fields_drop("content","msg")