使用SLS Query Skill 智能查询分析日志

更新时间:
复制为 MD 格式

alibabacloud-sls-query 是一个 Agent Skill,支持在 AI Agent 中通过自然语言查询和分析 SLS 日志数据。安装后,Agent 自动将查询意图转换为 SLS 查询语句并执行,返回结构化分析结果。

适用场景

场景

说明

示例提示词

SQL 统计分析

对日志进行聚合、分组、排序、Top-N、趋势分析或字段投影。

统计最近 1 小时 5xx 错误最多的接口 Top 10。

查询语句生成

将自然语言需求转换为 SLS 索引查询语句、SQL 语句或 SPL 语句。

生成按分钟统计平均延迟和 P95 延迟的查询语句。

查询优化

根据索引配置和字段类型优化现有查询,减少不必要的数据扫描。

优化现有查询语句,优先使用字段索引并减少不必要的数据扫描。

前提条件

  • 已创建日志服务 Project 和 LogStore,并已采集日志数据。

  • 已为目标 LogStore 创建索引。未配置索引SLS 查询、SQL 分析和 SPL 查询无法执行。

  • 已获取可访问目标 Project 和 LogStore 的阿里云账号凭据。

    警告

    为防止凭据泄露,不要在 Agent 对话中粘贴 AccessKey ID 或 AccessKey Secret。建议通过环境变量或阿里云 CLI 配置文件管理凭据。

安装 Skill

alibabacloud-sls-query 已在阿里云 SkillClawHub发布,支持以下安装方式。

方式一(推荐):通过 npx 命令安装

npx 命令随 Node.js 一起提供。安装前,执行以下命令确认本地环境可用:

node -v
npx -v

如果终端提示 nodenpx 不存在,请先前往 Node.js 官网下载并安装。

执行以下命令安装 alibabacloud-sls-query Skill:

npx skills add aliyun/alibabacloud-aiops-skills --skill alibabacloud-sls-query

安装完成后,确认 skills 目录下存在 alibabacloud-sls-query 目录,然后重启 Agent 使 Skill 生效。

方式二:手动下载安装

GitHub Release 下载 alibabacloud-sls-query 安装包,解压后将文件复制到对应 Agent 的 skills 安装目录中。

复制完成后,确保 skills 目录下存在 alibabacloud-sls-query 目录,然后重启 Agent 以加载该 Skill。

常见 Agent 的 skills 安装目录如下:

Agent

项目级安装目录

用户级安装目录

Claude Code

.claude/skills

~/.claude/skills

Codex

.agents/skills

~/.agents/skills

Qoder

.qoder/skills

~/.qoder/skills

QwenCode

.qwen/skills

~/.qwen/skills

OpenClaw

.openclaw/skills

~/.openclaw/skills

查询和分析日志

安装完成后,在 Agent 中直接描述 SLS 查询或分析需求即可触发该 Skill。Agent 自动执行以下流程:

  1. 检查运行环境(阿里云 CLI 和 SLS 插件)。

  2. 读取目标 LogStore 的索引配置。

  3. 根据需求生成查询语句(索引查询、SQL 或 SPL)。

  4. 通过阿里云 CLI 执行查询。

  5. 输出整理后的结构化结果。

首次执行时,Agent 会引导完成阿里云 CLI 的安装和凭据配置。按提示授予执行权限并完成配置即可。

提示词最佳实践

提示词的质量直接影响查询结果的准确性。编写提示词时,建议包含以下信息:

  • Project 名称和 LogStore 名称。

  • 明确的查询或分析意图。例如“分析请求延迟同比变化,按分钟粒度统计平均延迟”。

  • 查询时间范围。例如“最近 15 分钟”或“2026-04-24 10:00 到 11:00,北京时间”。

  • 期望输出格式。例如“返回原始日志"”统计 Top 10""按分钟画趋势“"只返回这些字段”。

为提高查询效率和降低成本,建议:

  • 尽量缩小时间范围,避免全量扫描。

  • 明确指定字段名(如 statusrequest_uri),而非模糊描述。

  • 需要 Top-N 结果时,在提示词中说明具体数量(如 Top 10)。

说明

以下示例场景中的 Project、LogStore、字段名和查询结果均为示例数据。实际使用时,请替换为实际的资源名称和日志字段。

场景一:查询最近 15 分钟的 5xx 错误日志

提示词

查询 SLS 日志库 Project=prod-web,Logstore=nginx-access,最近 15 分钟 status 大于等于 500 的请求,按时间倒序。

Agent 输出示例

查询模式:索引查询。
原因:用户需要按条件返回原始日志,不涉及聚合、排序分析或字段投影;status 字段已配置数值类型索引,可直接使用范围查询。

执行命令:
aliyun sls get-logs-v2 \
  --project prod-web \
  --logstore nginx-access \
  --from 1777016700 \
  --to 1777017600 \
  --query 'status>=500' \
  --line 100 \
  --offset 0 \
  --reverse true

查询结果:
| 时间 | status | request_uri | upstream_status | request_time | message |
| --- | ---: | --- | ---: | ---: | --- |
| 2026-04-24 15:59:31 | 502 | /api/order/create | 502 | 1.238 | upstream connect timeout |
| 2026-04-24 15:58:44 | 500 | /api/pay/notify | 500 | 0.412 | internal server error |
| 2026-04-24 15:57:09 | 502 | /api/order/create | 502 | 1.104 | bad gateway |

结论:已按时间倒序返回最近 15 分钟内的 5xx 原始日志,最新错误集中出现在 /api/order/create。

场景二:统计 5xx 错误接口 Top 10

提示词

统计 SLS 日志库 prod-web/nginx-access 中最近 1 小时内 5xx 数量 Top 10 的接口。

Agent 输出示例

查询模式:索引查询 + SQL。
原因:需要统计 5xx 数量 Top10 的接口,因此先用索引查询过滤 500 到 599 状态码,再用 SQL 按 request_uri 分组、计数并排序。

执行命令:
aliyun sls get-logs-v2 \
  --project prod-web \
  --logstore nginx-access \
  --from 1777014000 \
  --to 1777017600 \
  --query 'status in [500 599] | SELECT request_uri, count(*) AS errors FROM log GROUP BY request_uri ORDER BY errors DESC LIMIT 10'

查询结果:
| 排名 | request_uri | errors |
| --- | --- | ---: |
| 1 | /api/order/create | 186 |
| 2 | /api/pay/notify | 73 |
.....
| 10 | /api/user/login | 1 |

结论:最近 1 小时内 5xx 数量最高的接口是 /api/order/create,其错误量明显高于其他接口,建议优先排查该接口及其后端依赖。

场景三:对比最近一小时与昨天同期的延迟趋势

提示词

分析 SLS 日志库 prod-web/nginx-access 中最近一小时与昨天同期相比的平均延迟变化,按分钟粒度统计平均值,分析延迟是否存在明显异常。

Agent 输出示例

查询模式:索引查询 + SQL
原因:需要对当前最近一小时和昨天同期分别按分钟聚合平均延迟,再按分钟对齐计算变化量和变化率。

执行命令(当前最近一小时):
aliyun sls get-logs-v2 \
  --project prod-web \
  --logstore nginx-access \
  --from 1777014000 \
  --to 1777017600 \
  --query "* | SELECT date_trunc('minute', __time__) AS minute, avg(request_time) AS avg_latency FROM log GROUP BY minute ORDER BY minute LIMIT 60"

执行命令(昨天同期):
aliyun sls get-logs-v2 \
  --project prod-web \
  --logstore nginx-access \
  --from 1776927600 \
  --to 1776931200 \
  --query "* | SELECT date_trunc('minute', __time__) AS minute, avg(request_time) AS avg_latency FROM log GROUP BY minute ORDER BY minute LIMIT 60"

查询结果:
| 分钟 | 当前平均延迟 | 昨天同期平均延迟 | 变化量 | 变化率 |
| --- | ---: | ---: | ---: | ---: |
| 2026-04-24 15:00 | 0.132s | 0.118s | +14ms | +11.9% |
| 2026-04-24 15:01 | 0.141s | 0.116s | +25ms | +21.6% |
| 2026-04-24 15:02 | 0.338s | 0.129s | +209ms | +162.0% |
| 2026-04-24 15:03 | 0.351s | 0.131s | +220ms | +167.9% |

结论:最近一小时平均延迟整体高于昨天同期,其中 15:02 到 15:03 上升最明显,平均延迟增加超过 160%。建议继续按 request_uri、upstream_addr 或 service 维度下钻,定位延迟上升来源。

场景四:基于查询结果继续追问

SLS Query Skill 支持多轮交互。可以基于前一次查询结果继续追问,逐步缩小排查范围。

第一轮提示词

统计 SLS 日志库 prod-web/nginx-access 中最近 1 小时 5xx 最多的接口 Top 5。

第二轮提示词(基于第一轮结果追问)

针对 /api/order/create 接口,按分钟粒度统计错误数量趋势,查看错误是集中爆发还是均匀分布。

第三轮提示词(进一步下钻)

查看 /api/order/create 在 15:02 到 15:05 之间的 5xx 原始日志,返回 upstream_addr 和 message 字段。

通过多轮追问,可以从宏观统计逐步下钻到具体时间段的原始日志,快速定位故障根因。

数据安全与隐私

SLS Query Skill 通过阿里云 CLI 执行查询,查询过程遵循以下安全原则:

  • 查询请求通过 HTTPS 加密传输,日志数据不经过第三方服务。

  • Agent 在本地生成和执行查询命令,日志数据不会发送给 AI 模型提供商。

  • 凭据信息(AccessKey)通过阿里云 CLI 配置文件或环境变量管理,不会出现在 Agent 对话记录中。

重要

不要在 Agent 对话中直接粘贴 AccessKey ID 或 AccessKey Secret。如需配置凭据,请使用 aliyun configure 命令。

使用限制

限制项

说明

索引配置

目标 LogStore 必须已创建索引。未配置索引时,所有查询类型均无法执行。

查询超时

单次查询默认超时时间为 60 秒。超时后可尝试缩小时间范围或简化查询条件。

数据扫描量

查询费用与数据扫描量相关。建议尽量缩小时间范围和使用字段索引,减少不必要的全量扫描。

运行环境

需要 Node.js 运行时(用于安装 Skill)和阿里云 CLI(用于执行查询)。

常见问题

是否需要手动安装阿里云 CLI 和 SLS 插件?

一般情况下不需要手动安装。在 Agent 中发起查询需求后,Agent 会自动检查环境(aliyun version)、启用 AI Mode、设置 User-Agent 并执行插件更新。

如果本机未安装阿里云 CLI 或版本过低,Agent 会给出安装或升级指引。按照 Agent 输出的命令在本机环境中完成安装即可。

如何配置阿里云账号凭据?

可以根据 Agent 引导提示配置账号凭据,也可以手动执行 aliyun configure 命令配置。支持 AK、StsToken、OAuth、RamRole 等多种凭据配置方式。详情参考配置凭证

是否支持内网域名、传输加速域名、自定义域名?

支持。在提示词中告知 Agent 使用 --endpoint <域名> 指定 Endpoint 即可。

查询结果不准确怎么办?

可以从以下方面排查和优化:

  • 确认目标字段已正确配置索引,且字段类型与查询条件匹配(例如 status 应为 long 类型而非 text)。

  • 在提示词中明确指定字段名、时间范围和期望格式,避免模糊描述。

  • 基于 Agent 返回的查询语句检查逻辑是否符合预期,通过追问修正查询条件。

故障排查

报错 IndexConfigNotExist

该错误表示目标 LogStore 没有索引配置或索引配置为空。

解决方法:在 SLS 控制台为目标 LogStore 创建索引。创建完成后等待片刻(新数据需要短暂时间才能被索引),然后重新执行查询。

报错 Unauthorized

该错误表示当前账号或 RAM 用户缺少必要权限。

解决方法:为当前账号授予以下权限:

API 名称

Action

Resource

GetLogsV2

log:GetLogStoreLogs

acs:log:<account>:<region>:project/<Project>/logstore/<Logstore>

GetIndex

log:GetIndex

acs:log:<account>:<region>:project/<Project>

报错 ProjectNotExist

该错误通常是 Project 名称错误、地域不正确或访问了错误的 Endpoint。

解决方法:确认以下信息:

  • Project 名称是否准确。

  • 地域是否与 Project 所在地域一致。

  • 网络环境是否需要使用内网 Endpoint。