场景描述1
用户将工具的日志采集到了 CLS,现需要将 cmdb 日志中操作方法为 PUT 和 POST 的日志过滤出来。
原始日志
[{"path": "/eks/pod/running","clientIP": "1.*.*.123","method": "POST"},{"path": "/cmdb/login","clientIP": "1.*.*.123","method": "PUT"},{"path": "/cmdb/start","clientIP": "1.*.*.123","method": "GET"}]
加工语句
//path中包含有cmdb字符,保留该日志,其余日志过滤掉log_keep(regex_match(v("path"),regex="cmdb",full=False))//method中包含POST或者PUT字符,保留该日志log_keep(regex_match(v("method"),regex="POST|PUT",full=False))
加工结果
{"clientIP":"1.*.*.123","method":"PUT","path":"/cmdb/login"}
场景描述2
用户希望从海量业务日志中按比例随机抽取少量日志用于离线分析,减少后续存储和计算成本。此场景下不关心具体字段,仅需要按比例随机采样,例如1%的采样率。
原始日志
[{ "requestId": "req-1", "userId": "u-1001", "status": 200 },{ "requestId": "req-2", "userId": "u-1002", "status": 200 },{ "requestId": "req-3", "userId": "u-1003", "status": 500 }]
加工语句
//从1-100中随机取一个整数,等于5时保留该日志,其余过滤掉,实现1%的随机采样log_keep(op_eq(random(1, 100), 5))
加工结果
{"requestId": "req-2","userId": "u-1002","status": 200}
说明:
random(1, 100) 返回区间 [1, 100] 内的随机整数,op_eq(a, b) 判断两值是否相等。调整 op_eq 右侧的数值或 random 的区间,可灵活控制采样率(如1/100为1%采样,1/1000为0.1%采样)。