Skip to content

SLS 查询与日志分析 ​

从来源文档中剥离的技术说明。示例与约束沿用原文,使用前按实际环境核对。

三、SLS 查询语法 ​

SLS 查询由“查询语句”和可选的“分析语句”组成,两者使用 | 分隔:

text
查询语句 | 分析语句
  • 查询语句用于筛选日志,可以单独使用。
  • 分析语句使用 SQL 对查询结果进行统计,不能单独使用。
  • 字段查询和 SQL 分析依赖索引配置;字段不存在或未开启索引、统计时,结果可能不符合预期。

1. 简单查询 ​

查询全部日志:

text
*

查询包含关键词 error 的日志:

text
error

同时包含两个关键词:

text
example-service and error

查询任意一个关键词:

text
timeout or deadline

排除健康检查日志:

text
error not health

按字段查询(字段名以实际日志为准):

text
level:ERROR

组合字段条件:

text
service:example-service and level:ERROR

查询数值范围(字段必须建立 long 或 double 类型索引):

text
status in [500 599]

2. 复杂查询与分析 ​

统计各 HTTP 状态码的日志数量:

sql
* | SELECT status, count(*) AS count GROUP BY status ORDER BY count DESC LIMIT 20

统计错误最多的服务:

sql
level:ERROR | SELECT service, count(*) AS error_count GROUP BY service ORDER BY error_count DESC LIMIT 20

计算接口请求量、平均耗时和最大耗时:

sql
* |
SELECT
  request_uri,
  count(*) AS request_count,
  round(avg(request_time), 2) AS avg_time,
  max(request_time) AS max_time
GROUP BY request_uri
ORDER BY avg_time DESC
LIMIT 20

按分钟统计 5xx 错误趋势:

sql
status in [500 599] |
SELECT
  date_trunc('minute', from_unixtime(__time__)) AS minute,
  count(*) AS error_count
GROUP BY minute
ORDER BY minute

TIP

上述字段名(如 level、service、status、request_uri、request_time)是通用示例。使用前先展开一条实际日志,确认字段名和字段类型,再替换查询条件。

四、常见问题 ​

查询不到日志 ​

按以下顺序检查:

  1. 时间范围是否覆盖问题发生时间。
  2. 区域、Project 和 Logstore 是否正确。
  3. 查询词是否受分词规则影响。
  4. 查询字段是否已创建索引。
  5. SQL 使用的字段是否开启统计功能。

查询条件包含特殊字符 ​

字段名或字段值包含空格、冒号、连字符等特殊字符时,使用双引号包裹,例如:

text
request_uri:"/api/user-info"

参考资料 ​

适用范围 ​

继续阅读