事件判断

通过事件判断可以更好地对符合特定条件的数据进行相应操作,让加工逻辑更可靠。本文主要介绍使用函数进行事件判断的常见场景和最佳方案示例。

基于字段值的逻辑查询判断

  • 根据日志中的http_status字段和body_bytes_sent字段的值的不同,为每条日志添加不同的type信息。

    • http_status2XXbody_bytes_sent长度小于1000的日志,添加type字段,并将字段值设置为正常。

    • http_status2XXbody_bytes_sent长度大于等于1000的日志,添加type字段,并将字段值设置为过长警告。

    • http_status3XX的日志,添加type字段,并将字段值设置为重定向。

    • http_status4XX的日志,添加type字段,并将字段值设置为错误。

    • 为其余所有日志,添加type字段,并将字段值设置为其他。

  • 原始日志

    [
    {
      "http_host": "example.com",
      "http_status": "200",
      "request_method":"GET",
      "body_bytes_sent":"740"
    },
    {
      "http_host": "example.com",
      "http_status": "200",
      "request_method":"POST",
      "body_bytes_sent":"1123"
    },{
    "http_host": "example.com",
      "http_status": "300",
      "request_method":"GET",
      "body_bytes_sent":"711"
    },{
    "http_host": "aliyundoc.com",
      "http_status": "404",
      "request_method":"GET",
      "body_bytes_sent":"1822"
    },{
    "http_host": "aliyundoc.com",
      "http_status": "500",
      "request_method":"GET",
      "body_bytes_sent":"100"
    } 
    ]
  • SPL语句

    * | extend type=(CASE
        WHEN http_status like '2%' AND  cast(body_bytes_sent as BIGINT) < 1000 then 'normal'
        WHEN http_status like '2%' AND  cast(body_bytes_sent as BIGINT) >= 1000 then 'long warning'
        WHEN http_status like '3%' then 'redirect'
        WHEN http_status like '4%' then 'error'
        ELSE 'others'
    END)
  • 输出结果

    [
    {
      "http_host": "example.com",
      "http_status": "200",
      "request_method":"GET",
      "body_bytes_sent":"740",
      "type":"normal"
    },
    {
      "http_host": "example.com",
      "http_status": "200",
      "request_method":"POST",
      "body_bytes_sent":"1123",
      "type":"long warning"
    },{
    "http_host": "example.com",
      "http_status": "300",
      "request_method":"GET",
      "body_bytes_sent":"711",
      "type":"redirect"
    },{
    "http_host": "aliyundoc.com",
      "http_status": "404",
      "request_method":"GET",
      "body_bytes_sent":"1822",
      "type":"error"
    },{
    "http_host": "aliyundoc.com",
      "http_status": "500",
      "request_method":"GET",
      "body_bytes_sent":"100",
      "type":"others"
    } 
    ]