日志结构化-单行文本

最近更新时间:2024-10-18 10:20:11

我的收藏

场景描述

小王将日志采集到日志服务(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")