当您需要从海量、复杂的日志中提取关键信息、转换格式或进行统计分析时,手写实时、准确的 SPL 查询语句可能是一项挑战。Copilot for SPL 是日志服务内置的 AI 助手,它能理解您的自然语言指令,帮助您完成 SPL 语句的生成、解释和诊断,降低日志数据加工的门槛,提升分析效率。
操作步骤
登录日志服务控制台。
单击源Project名称,进入源Project。
在左侧导航栏,单击
任务管理。在数据加工页签下,单击创建数据加工任务,选择源日志库,单击确认。
在加工语句编辑界面,单击
,即可唤起智能运维助手对话框。说明默认加入原始日志的前三条语句作为LLM的上下文内容。
在输入自然语言描述需求前,请先选择使用模式,以便系统更精准地理解和响应您的需求,支持如下三种模式:
SPL生成:根据自然语言描述自动生成可执行的 SPL 加工语句。
SPL问答:获取 SPL 语法、函数用法、最佳实践等知识解答。
诊断SPL:对 SPL 语句进行语法检查与错误修复建议。
输入自然语言需求或待分析的SPL语句。
查看 AI 生成结果,单击Run query,将输出结果一键加入SPL语句编辑框中。
如果AI给出的加工语句不够准确,可以通过多轮对话来获取准确的加工语句。
不同模式使用示例
SPL生成
原始日志中的待加工日志:
[
{
"content": "[2025-11-27 11:11:08,232][1a2b3c4d-5e6f-4789-a0b1-c2d3e][INFO] curl -H 'Host: 'http://sls.console.aliyun.com:8080/etl/api -d {\"APIVersion\":\"0.6.0\",\"AccessKeyId\":\"STS.NZ*****eq\",\"AccessKeySecret\":\"123\"}"
}
]和AI进行多轮对话,具体内容如下:
第一轮对话
用户问题:结构化该日志
AI助手答复:
* | parse-regexp content, '\[([^]]+)\]\[([^]]+)\]\[([^]]+)\]\s+(.*)' as timestamp, trace_id, level, request_part
| extend headers = regexp_extract(request_part, "-H\s+'([^']+)'", 1),
body_str = regexp_extract(request_part, "-d\s+'(\{[^}]+\})'", 1),
url = regexp_extract(request_part, "'(http[^\s']+)'", 1),
method = regexp_extract(request_part, '-X\s+(\w+)', 1)
| parse-json body_str第二轮对话
用户问题:先把content中的JSON部分提取出来,然后再从JSON中提取数据
AI助手答复:
* | extend json_str = regexp_extract(content, '\{.*\}')
| extend parsed_json = json_parse(json_str)
| parse-json parsed_json第三轮对话
用户问题:过滤出level为ERROR的数据
AI助手答复:
* | extend json_str = regexp_extract(content, '\{.*\}')
| extend parsed_json = json_parse(json_str)
| parse-json parsed_json
| where level = 'ERROR'SPL问答
用户问题:如何打包Json
AI助手答复:
正确答案:用 pack-fields 指令!
比如: * | pack-fields -include='\w+' as packed_json
这个语句的意思是:把所有字段都打包成一个叫 packed_json 的JSON对象,超方便!
SPL小贴士:
pack-fields 是专门用来打包字段的,比手动拼接字符串优雅多了!
-include='\w+' 表示包含所有字段(\w+ 是正则表达式,匹配字母数字下划线)
如果只想打包特定字段,可以写成 pack-fields request_info = method, uri, status 这样更灵活!
举个栗子: 假设你有这些字段:method=GET, uri=/api/v1/users, status=200 执行后会变成: packed_json = {"method":"GET","uri":"/api/v1/users","status":"200"}SPL诊断
用户问题:
* | ||pack-fields -include='\w+' as packed_jsonAI助手答复:
您的SPL语句中存在一个明显的语法错误: * | ||pack-fields -include='\w+' as packed_json
错误原因:
在SPL中,管道符 | 用于连接指令,但您写成了 ||(两个连续的管道符),这是非法语法!
正确写法应为:
* | pack-fields -include='\w+' as packed_json
建议:
删除多余的 |,保留单个管道符
如果要对特定字段打包,请使用更精确的字段列表,例如:
pack-fields method, uri, status as packed_json该文章对您有帮助吗?