在 Elasticsearch 中,slowlog (慢日志)是用来记录查询和索引操作的性能数据,帮助你诊断性能瓶颈。你可以为查询 (search slowlog
) 和索引 (index slowlog
) 配置慢日志。
数据准备
json
POST /products/_doc/1
{
"product_name": "Apple iPhone 15",
"price": 999.99,
"category": "Smartphones",
"rating": 4.5,
"discount": 0.1,
"availability": true,
"stock": 50,
"release_date": "2023-09-01"
}
POST /products/_doc/2
{
"product_name": "Samsung Galaxy S24",
"price": 899.99,
"category": "Smartphones",
"rating": 4.3,
"discount": 0.05,
"availability": true,
"stock": 30,
"release_date": "2023-10-10"
}
POST /products/_doc/3
{
"product_name": "Dell XPS 13",
"price": 1199.99,
"category": "Laptops",
"rating": 4.8,
"discount": 0.15,
"availability": true,
"stock": 20,
"release_date": "2023-08-20"
}
POST /products/_doc/4
{
"product_name": "Sony WH-1000XM5",
"price": 349.99,
"category": "Headphones",
"rating": 4.7,
"discount": 0.2,
"availability": false,
"stock": 0,
"release_date": "2023-06-15"
}
POST /products/_doc/5
{
"product_name": "Apple MacBook Air",
"price": 999.00,
"category": "Laptops",
"rating": 4.6,
"discount": 0.1,
"availability": true,
"stock": 15,
"release_date": "2023-11-01"
}
检索请求实现流程
其中,query阶段的核心步骤如下。
❑客户端发送请求到协调节点。
❑协调节点转发请求到索引的每个主或副本分片。
❑分片本地查询完成后,将结果添加到本地的优先队列。
❑每个分片将本地结果返回给协调节点,协调节点合并完成后,形成全局排序列表。
fetch阶段的核心步骤如下。
❑协调节点接收到客户端请求后,将GET请求(query阶段形成的全局排序列表结果数据)转发给相关节点。
❑接收到请求的节点向协调节点返回结果数据。
❑待全部结果数据都返回后,协调节点将结果返回给客户端。
修改现有索引的慢日志配置 (动态配置)
你也可以通过 Elasticsearch 的 动态设置 API 来为已存在的索引启用慢日志配置,而不需要重启 Elasticsearch。
示例:动态配置查询慢日志
json
PUT /products/_settings
{
"settings": {
"index.search.slowlog.threshold.query.warn": "10s",
"index.search.slowlog.threshold.query.info": "5s",
"index.search.slowlog.threshold.query.debug": "0s",
"index.search.slowlog.threshold.query.trace": "500ms",
"index.search.slowlog.threshold.fetch.warn": "1s",
"index.search.slowlog.threshold.fetch.info": "500ms",
"index.search.slowlog.threshold.fetch.debug": "0s",
"index.indexing.slowlog.level": "debug"
}
}
GET /products/_search
示例:动态配置索引慢日志
json
PUT /products/_settings
{
"settings": {
"index.indexing.slowlog.threshold.index.warn": "10s",
"index.indexing.slowlog.threshold.index.info": "5s",
"index.indexing.slowlog.threshold.index.debug": "0s",
"index.indexing.slowlog.level": "trace"
}
}
总结
- 启用查询慢日志:可以通过设置查询慢日志阈值来启用,通常记录执行时间较长的查询。
- 启用索引慢日志:记录索引、删除等操作的耗时,帮助定位性能瓶颈。
使用慢日志能够帮助你监控和调优 Elasticsearch 的性能,发现并优化长时间运行的查询和索引操作。