慢日志做什么
Elasticsearch 慢日志把超过阈值的查询与写入请求记入日志文件,用来回答“谁在慢、慢在什么条件”。它不是性能分析器,而是筛出疑似慢请求的入口:从日志里拿到查询语句与耗时后,再用 profile API 或节点统计做进一步分析。阈值可以按 warn、info、debug 三档分别设置。
基本信息
| 配置层级 | 索引级索引设置,也可通过索引模板统一声明 |
|---|---|
| 配置项 | index.search.slowlog.threshold.* 与 index.indexing.slowlog.threshold.* |
| 档位 | warn、info、debug 等多档,可按同一操作设不同阈值 |
| 日志位置 | 节点 logs 目录下按集群名与用途命名的文件 |
索引级慢日志设置
索引级慢日志设置
PUT /logs-app/_settings
{
"index.search.slowlog.threshold.query.warn": "10s",
"index.search.slowlog.threshold.query.info": "5s",
"index.search.slowlog.threshold.fetch.warn": "1s",
"index.indexing.slowlog.threshold.index.warn": "10s"
}
# 日志文件在节点 logs 目录,例如:
# logs/<集群名>_index_search_slowlog.log参数含义
| 参数 | 含义 | 说明 |
|---|---|---|
| search.slowlog.threshold.query | 查询阶段阈值 | 只包含查询执行,不含取回文档 |
| search.slowlog.threshold.fetch | 取回阶段阈值 | GET 阶段耗时,常单独设更小阈值 |
| indexing.slowlog.threshold.index | 写入阶段阈值 | 批量写入中单条耗时超阈值即记录 |
| warn / info / debug | 日志级别档位 | 同一操作可设多档,日志标注级别 |
典型使用场景
- 定位大查询:按索引找出耗时超长的查询语句再优化
- 评估批量写入性能,发现单条文档写入异常耗时的来源
- 上线前压测时观察阈值命中情况,校准索引设计
- 排查聚类变化:某索引慢日志突然增多往往伴随数据量或查询模式改变
慢日志文件可用采集器汇总到日志平台,按索引与耗时排序更方便;定位完大查询后记得复核阈值,避免长期全量记录。
慢日志会把查询语句写入文件,涉及敏感字段时要控制输出并限制日志文件的访问权限,避免成为数据外泄渠道。
使用注意
- 先在少数索引上试设阈值,确认日志量与可读性都合适后再用索引模板铺开
- 按索引区分阈值:日志类索引写入频繁、查询简单,和商品检索不是同一套标准
- 慢日志只是入口,最终要落到查询重写、索引设计或分片调整上才有收益