通过事件判断可以更好地对符合特定条件的数据进行相应操作,让加工逻辑更可靠。本文主要介绍使用函数进行事件判断的常见场景和最佳方案示例。
基于字段值的逻辑查询判断
根据日志中的http_status字段和body_bytes_sent字段的值的不同,为每条日志添加不同的type信息。
为http_status为2XX且body_bytes_sent长度小于1000的日志,添加type字段,并将字段值设置为正常。
为http_status为2XX且body_bytes_sent长度大于等于1000的日志,添加type字段,并将字段值设置为过长警告。
为http_status为3XX的日志,添加type字段,并将字段值设置为重定向。
为http_status为4XX的日志,添加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" } ]
该文章对您有帮助吗?