详情页标题前

阿里云日志服务SLS调用函数清洗数据-云淘科技

详情页1

您可以通过日志服务数据加工函数清洗您所采集的海量日志数据,实现数据格式标准化。本文介绍调用函数清洗数据的常见场景和相关操作。

场景1:过滤日志(e_keep函数和e_drop函数)

您可以使用e_drop函数或e_keep函数过滤日志,也可以使用e_if函数与DROP参数、e_if_else函数与DROP参数过滤日志。

常用规则如下所示:

  • e_keep(e_search(...) ):满足条件时保留,不满足条件时丢弃。
  • e_drop(e_search(...) ):满足条件时丢弃,不满足条件时保留。
  • e_if_else(e_search("..."), KEEP, DROP):满足条件时保留,不满足条件时丢弃。
  • e_if(e_search("not ..."), DROP):满足条件时丢弃,不满足条件时保留。
  • e_if(e_search("..."), KEEP):无意义的加工规则。

示例如下所示:

  • 原始日志
    #日志1
    __source__:  192.168.0.1
    __tag__:__client_ip__:  192.168.0.2
    __tag__:__receive_time__:  1597214851
    __topic__: app 
    class:  test_case
    id:  7992
    test_string:  
    
    #日志2
    __source__:  192.168.0.1
    class:  produce_case
    id:  7990
    test_string:  
  • 加工规则

    丢弃没有__topic__字段和__tag__:__receive_time__字段的日志。

    e_if(e_not_has("__topic__"),e_drop())
    e_if(e_not_has("__tag__:__receive_time__"),e_drop())
  • 加工结果
    __source__:  192.168.0.1
    __tag__:__client_ip__:  192.168.0.2
    __tag__:__receive_time__:  1597214851
    __topic__: app 
    class:  test_case
    id:  7992
    test_string:  

场景2:为日志空缺字段赋值(e_set函数)

您可以使用e_set函数为日志空缺字段赋值。

  • 子场景1:原字段不存在或者为空时,为字段赋值。
    e_set("result", "......value......", mode="fill")

    mode参数取值请参见字段提取检查与覆盖模式。

    示例如下所示:

    • 原始日志
      name:
    • 加工规则
      e_set("name", "aspara2.0", mode="fill")
    • 加工结果
      name:  aspara2.0
  • 子场景2:使用GROK函数简化正则表达式,提取字段内容。
    示例如下所示:

    • 原始日志
      content:"ip address: 192.168.1.1"
    • 加工规则

      使用GROK函数捕获提取content字段中的IP地址。

      e_regex("content", grok(r"(%{IP})"),"addr")
    • 加工结果
      addr:  192.168.1.1
      content:"ip address: 192.168.1.1"
  • 子场景3:为多个字段赋值。
    e_set("k1", "v1", "k2", "v2", "k3", "v3", ......)

    示例如下所示:

    • 原始日志
      __source__:  192.168.0.1
      __topic__:
      __tag__:
      __receive_time__:
      id:  7990
      test_string:  
    • 加工规则

      为__topic__字段、__tag__字段和__receive_time__字段赋值。

      e_set("__topic__","app", "__tag__","stu","__receive_time__","1597214851")
    • 加工结果
      __source__:  192.168.0.1
      __topic__:  app
      __tag__:  stu
      __receive_time__:  1597214851
      id:  7990
      test_string:  

场景3:通过判断,删除和重命名字段(e_search函数、e_rename函数和e_compose函数)

一般情况下,推荐您使用e_compose函数进行重复判断和操作。

示例如下所示:

  • 原始日志
    content:123
    age:23
    name:twiss
  • 加工规则

    首先判断content字段值是否为123,如果是,则删除age和name字段,再将content字段重命名为ctx。

    e_if(e_search("content==123"),e_compose(e_drop_fields("age|name"), e_rename("content", "ctx")))
  • 加工结果
    ctx: 123

场景4:转换日志参数类型(v函数、cn_int函数和dt_totimestamp函数)

日志的字段和字段值在加工过程中,始终都是字符串形式,非字符串类型的数据会被自动转化为字符串类型。因此在调用函数时,要注意各个函数能接收的参数类型。更多信息,请参见语法简介。

  • 子场景1:调用op_add函数进行字符拼接和数据相加。

    op_add函数既可以接收字符串类型,也可以接受数值类型,因此不需要做参数类型转换。

    示例如下所示:

    • 原始日志
      a : 1
      b : 2
    • 加工规则
      e_set("d",op_add(v("a"), v("b")))
      e_set("e",op_add(ct_int(v("a")), ct_int(v("b"))))
    • 加工结果
      a:1
      b:2
      d:12
      e:3
  • 子场景2:运用事件检查函数函数和ct_int函数进行类型转换并调用op_mul函数进行数据相乘。
    示例如下所示:

    • 原始日志
      a:2
      b:5
    • 加工规则

      因为v(“a”)和v(“b”)都是字符串类型,而op_mul函数的第二个参数只能接收数值类型,所以您需要通过ct_int函数将字符串转化为整型,再传递给op_mul函数。

      e_set("c",op_mul(ct_int(v("a")), ct_int(v("b"))))
      e_set("d",op_mul(v("a"), ct_int(v("b"))))
    • 加工结果
      a: 2
      b: 5
      c: 10
      d: 22222
  • 子场景3:调用dt_parse函数和dt_parsetimestamp函数将字符串或日期时间转换为标准时间。

    dt_totimestamp函数接收的参数类型为日期时间对象,不是字符串。因此需要调用dt_parse函数将time1的字符串值类型转化为日期时间对象类型。您也可以直接使用dt_parsetimestamp函数,它既能接收日期时间对象,也能接收字符串。更多信息,请参见日期时间函数。

    示例如下所示:

    • 原始日志
      time1: 2020-09-17 9:00:00
    • 加工规则

      将time1表示的日期时间转化为Unix时间戳。

      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(dt_parse(v("time1")))) 或 e_set("time2", dt_parsetimestamp(v("time1"))) 
    • 加工结果
      time1:  2019-06-03 2:41:26 
      time2:  1559529686 

场景5:为日志不存在的字段填充默认值(default传参)

部分SLS DSL表达式函数对输入的参数有一定要求,如果不满足,数据加工窗口会报错或返回默认值。当日志中存在必要而残缺字段时,您可以在op_len函数中填充默认值。


注意 传递默认值给后续的函数时可能会进一步报错,因而需要及时处理函数返回的异常。

  • 原始日志
    data_len: 1024
  • 加工规则
    e_set("data_len", op_len(v("data", default="")))
  • 加工结果
    data: 0
    data_len: 0

场景6:判断日志并增加字段(e_if函数与e_switch函数)

推荐使用e_if函数或e_switch函数进行日志判断。更多信息,请参见流程控制函数。

  • e_if函数
    e_if(条件1, 操作1, 条件2, 操作2, 条件3, 操作3, ....)
  • e_switch函数

    e_switch函数是条件与操作的配对组合。依次根据条件进行判断,满足条件的进行对应操作,然后直接返回操作结果。不满足条件的不进行对应操作,直接进行下一个条件判断。如果没有满足任一条件并且配置了default参数,则执行default配置的操作并返回。

    e_switch(条件1, 操作1, 条件2, 操作2, 条件3, 操作3, ...., default=None)

示例如下所示:

  • 原始日志
    status1: 200
    status2: 404
  • e_if函数
    • 加工规则
      e_if(e_match("status1", "200"), e_set("status1_info", "normal"),
           e_match("status2", "404"), e_set("status2_info", "error"))
    • 加工结果
      status1: 200
      status2: 404
      status1_info: normal
      status2_info: error
  • e_switch函数
    • 加工规则
      e_switch(e_match("status1", "200"), e_set("status1_info", "normal"), 
               e_match("status2", "404"), e_set("status2_info", "error"))
    • 加工结果

      只要有一个条件满足,就返回结果,不再进行后续条件判断。

      status1: 200
      status2: 404
      status1_info: normal

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/160109.html

(0)
上一篇 2023年12月10日 上午2:10
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云云原生大数据计算服务 MaxComputeFLATTEN-云淘科技

    将数组类型的数组转换为单个数组。 命令格式 flatten(arrayOfArray) 参数说明 arrayOfArray:为数组类型的数组。 返回值说明 将数组类型的数组按元素顺序展开为单个数组。 如果输入值为null,则返回NULL。 如果输入参数不是数组类型的数组,则抛出异常。 示例 SELECT flatten(array(array(1, 2), …

  • 阿里云日志服务SLSSDK采集-云淘科技

    为了能让您更高效地使用日志服务,日志服务提供了多个语言版本(.NET、Java、Python、PHP、C等)的SDK(Software Development Kit),您可以根据业务需求选择合适的SDK语言版本采集日志、查询和分析日志等。 使用前须知 不同语言的日志服务SDK具体实现细节会有所不同,但是它们都是日志服务API在不同语言上的封装,实现的功能也…

    阿里云日志服务SLS 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云RDS数据库DeleteADSetting – 删除RDS SQL Server的AD域关联-云淘科技

    该接口用于将当前RDS SQL Server实例退出所在域。 接口说明 适用引擎 RDS SQL Server 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试调试授权信息下表是API对应的授权信息,可以在RAM权限策略语句的Action元素中…

    阿里云数据库 2023年12月9日
  • 阿里云云原生大数据计算服务 MaxCompute函数-云淘科技

    您可以编写自定义函数并在MaxCompute SQL中使用它们。 基本操作 list_functions():获取项目空间下的所有函数。 exist_function():用于判断是否存在某个函数。 get_function():用于获取函数对象。 create_function():创建函数。 delete_function():删除函数。 创建函数 使用…

  • 阿里云日志服务SLS查询分析程序日志-云淘科技

    本文通过查询、关联分析、统计分析等场景介绍如何使用日志服务对程序日志进行查询和分析。 背景信息 程序日志内容全、存在一定共性,它是运维程序的重要信息,但程序日志具有如下不便于存储与分析的特性: 格式随意:不同开发者的代码风格不同,对应的日志风格也不同,难以统一。 数据量大:程序日志一般比访问日志大1个数量级。 分布的服务器多:大部分应用为无状态模式,运行在不…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。