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 minuteTIP
上述字段名(如 level、service、status、request_uri、request_time)是通用示例。使用前先展开一条实际日志,确认字段名和字段类型,再替换查询条件。
四、常见问题
查询不到日志
按以下顺序检查:
- 时间范围是否覆盖问题发生时间。
- 区域、Project 和 Logstore 是否正确。
- 查询词是否受分词规则影响。
- 查询字段是否已创建索引。
- SQL 使用的字段是否开启统计功能。
查询条件包含特殊字符
字段名或字段值包含空格、冒号、连字符等特殊字符时,使用双引号包裹,例如:
text
request_uri:"/api/user-info"参考资料
适用范围
继续阅读
- 知识专题
- 知识专题
- 开发与配置实践