CLS数据加工:日志清洗利器

2022-04-28 15:28:47 浏览数 (1)

作者:hermine

导语:云原生日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志数据解决平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。

日志数据采集到CLS日志主题之后,用户可以使用「数据加工」功能来处理原始日志,对其进行归类、结构化、清洗过滤脏数据等处理,处理后的日志数据就可以应用于日志的检索分析、仪表盘、告警等功能。

本文将重点介绍「数据加工」对日志清洗的强大作用。

背景

「为什么日志需要清洗?」

场景一:将不需要的字段、日志drop掉,可以有效节约云端费用。例如用户在云上存储、计算日志数据,经过日志清洗,对日志进行“减肥瘦身”,丢弃不需要的日志数据,整体数据量变少,可以显著降低存储、计算、流量费用

场景二:将非结构化的长文本,清洗为结构化数据,支持后续在CLS内的日志分析、仪表盘、告警等功能,或者下游的大数据如HIVE、CK等OLAP场景。

未结构化的文本日志不能使用SQL分析,而数据加工可以从文本中提取字段和值,形成结构化数据,为下一步的检索分析做好铺垫。

下图是在CLS内使用SQL语句对结构化日志进行查询分析、生成图表的演示图。用户可以直接使用SQL语句,按照server_addr,server_name进行group by,统计pv、uv、访问延时、流量等指标,进一步生成图表、快速添加为告警等。

「为什么使用数据加工来清洗日志?」

  • 首先,数据加工降低了日志流处理的门槛、降低了日志清洗的难度。一般常见的清洗手段是使用Kafka Flink对日志流进行处理,这就要求自建集群、编译JAR包。使用数据加工,不需要懂得JAVA、Flink,使用数据加工函数编写DSL脚本,即可轻松处理日志流数据。
  • 其次,数据加工降低了搭建和运维大数据流处理集群的费用。用户无需购买和运维大数据流处理集群,不必操心JAVA内存管理、大数据container的调度、数据偏移等。只需要写完加工脚本,随时预览加工结果,如下图所示。

日志清洗案例分析

场景1:主动丢弃不需要的日志

用户Teddy将日志采集到了CLS,他想保留正常日志,将购物失败日志丢弃。具体来说,如果日志中type字段是404或者500,则过滤该条日志,仅保留成功的日志,清洗后的结果导出到腾讯云对象存储COS,然后使用腾讯云Hive建表,对其进行进一步分析。

清洗日志,可以节省云产品之间的传递流量、计算费用,是节能增效的有效手段。

日志原文:

代码语言:javascript复制
[
   {
       "__CONTENT__": "2022-04-19 12:58:34.377 /var/lib/docker/containers/my.log {"Id":"0179","itemId":"586","originprice":"61","title":"女士香水","type":404}"
   },
   {
       "__CONTENT__": "2022-04-19 12:58:34.174 /var/lib/docker/containers/my.log {"Id":"0313","itemId":"630","originprice":"80","title":"美宝莲纽约粉底液","type":200}"
   },
   {
       "__CONTENT__": "2022-04-19 12:58:34.174 /var/lib/docker/containers/my.log {"Id":"0581","itemId":"730","originprice":"80","title":"美宝莲口红","type":500}"
   }
]

加工语句:

代码语言:javascript复制
//将日志拆分成两段,f2是JSON体。
ext_sepstr("__CONTENT__", "f1,f2", sep="my.log")
//将f1丢弃
fields_drop("__CONTENT__", "f1")
//将JSON f2平铺
t_if(if_json(v("f2")),ext_json("f2"))
//丢弃f2
fields_drop("f2")
如果type>400,(404或者500),丢弃该日志
log_drop(op_ge(v("type"),400)))

加工结果如下:

返回码正常的日志被保留下来,其余数据被丢弃了。

代码语言:javascript复制
{
"Id":"0313","itemId":"630","originprice":"80","title":"美宝莲纽约粉底液","type":"200"
}

场景2: 长文本日志的清洗和结构化

用户Tiger的日志如下,格式不固定,对日志进行OLAP分析几乎不可能。如果可以将其清洗成结构化数据,然后就可以轻松的使用SQL对日志进行分析处理。

使用数据加工清洗后的效果:

日志原文:

代码语言:javascript复制
[
    {
        "__CONTENT__": "2021-11-29 15:51:33,201 INFO request 7143a51d-caa4-4a6d-bbf3-771b4ac9e135 action: Describe uin: 15****29 reqbody {"Key": "config","Values": "appisrunnning","Action": "Describe","RequestId": "7143a51d-caa4-4a6d-bbf3-771b4ac9e135","AppId": 130****499,"Uin": "1000****2829"}"
    },
    {
        "__CONTENT__": "2021-11-29 15: 51: 33,272  ERROR request 2ade9fc4-2db2-49d8-b3e0-a6ea78ce8d96 has error action DataETL uin 15****29"
    },
    {
        "__CONTENT__": "2021-11-29 15: 51: 33,200  INFO request 6059b946-25b3-4164-ae93-9178c9e73d75 action: UploadData hUWZSs69yGc5HxgQ TaskId 51d-caa-a6d-bf3-7ac9e"
    }
]

加工语句解析:

代码语言:javascript复制
//使用正则,提取日志文本中的时间,并赋值给新的字段“时间”;
fields_set("时间",regex_select(v("__CONTENT__"),regex="d{4}-d{2}-d{2} d{2}:d{2}:d{2},d{3}",index=0,group=0))
//使用正则,提取文本中的日志级别,并赋值给新字段“loglevel”;
fields_set("loglevel",regex_select(v("__CONTENT__"),regex="[A-Z]{5}|[A-Z]{4}",index=0,group=0))
//提取文本中的requestid,并赋值给新字段“requestid”
fields_set("requestid",regex_select(v("__CONTENT__"),regex="request [A-Za-z0-9] -[A-Za-z0-9] -[A-Za-z0-9] -[A-Za-z0-9] -[A-Za-z0-9] ",index=0,group=0))
//提取文本中的action,并赋值给新字段“action”
fields_set("action",regex_select(v("__CONTENT__"),regex="action: S |action S ",index=0,group=0))
//提取文本中的reqbody,并赋值给新字段“reqbody”
t_if(regex_match(v("__CONTENT__"),regex="reqbody", full=False),fields_set("requestbody",regex_select(v("__CONTENT__"),regex="reqbody {[^}] }")))
//对reqbody中的字符进行规整
t_if(has_field("requestbody"),fields_set("requestbody",str_replace(v("requestbody"),old="reqbody",new="")))
//对request中的字符进行规整
fields_set("requestid",str_replace(v("requestid"),old="request",new=""))
//对action中的字符进行规整
t_if(has_field("action"),fields_set("action",str_replace(v("action"),old="action:|action",new="")))
fields_drop("__CONTENT__")

CLS 数据加工控制台怎么使用

看完介绍,是不是觉得「数据加工」使用起来还挺简单的。下面我们介绍一下CLS数据加工的控制台。

开通CLS日志服务后,在左侧一级菜单点击「数据加工」,新建数据加工任务之后,就开始编写DSL加工语句。

  • 编辑DSL语句:类似于IDE,可以看到在编辑函数的时候,函数的解释和参数会随即弹出,方便用户了解函数。
  • 加工函数示例:在右侧的DSL语句中,针对每个函数我们都提供了示例。可以将原始日志粘贴到测试数据框中,加工语句粘贴到DSL语句编辑框中,点击「执行预览」来查看加工结果。

更多数据加工操作方法和实战案例,欢迎访问腾讯云官网:

https://cloud.tencent.com/document/product/614/66375

结语

「数据加工」为其上层的检索分析、仪表盘、告警等应用提供了结构化的日志数据,帮助您在运维场景中更加游刃有余地分析日志、排查故障、指定运维决策。

在未来,CLS会继续打磨日志服务的细节,帮助用户在日志运维、运营、合规审计等业务方面实现跨越式发展,造福更多的运维团队与开发团队。


以上就是关于CLS应用「数据加工」进行日志清洗的应用实践,感谢阅读!

加入「腾讯云日志服务CLS技术交流群」,获取更多资讯,掌握最新动态!

「数据加工」其他推送文章

0 人点赞