如果你在软件堆栈中使用 Elasticsearch,你可能已经意识到 Elasticsearch 管理大量数据和提供实时搜索功能的强大能力。
了解 Elasticsearch 中的慢速查询
Slow Log 是 Elasticsearch 的内置功能,可用于识别慢速搜索。 任何花费时间超过预期的请求都会记录在慢速日志中,这有助于深入了解可能会降低应用程序性能的原因。
但是仅仅找到慢速请求是不够的。 了解是哪个请求导致了缓慢的查询对于正确诊断和调试问题至关重要。 X-Opaque-Id 标头在这种情况下很有用。
利用 X-Opaque-Id 进行调试
Elasticsearch 从版本 6.2.0 开始支持 X-Opaque-Id 请求 header。 借助此 header,你可以为发送到 Elasticsearch 集群的每个请求指定一个特殊标识符。 与请求关联的 X-Opaque-Id 也将在记录运行缓慢的查询时记录。 通过这样做,你可以确定导致查询缓慢的准确请求。
下面是如何使用 curl 请求和 X-Opaque-Id header 的说明:
curl -H “X-Opaque-Id: 123456” -XGET ‘localhost:9200/my_index/_search?q=user:john’
在上面的示例中,123456 是请求的唯一标识符。 如果此请求导致查询缓慢,慢速日志将包含 X-Opaque-Id 123456,使你更容易识别罪魁祸首。
设置慢日志
Slow Log 需要先配置,然后才能开始记录慢查询。 你可以在索引级别或集群级别设置阈值。
以下是为索引设置慢速日志的方法:
PUT /my_index/_settings
{
“index.search.slowlog.threshold.query.warn”: “10s”,
“index.search.slowlog.threshold.query.info”: “5s”,
“index.search.slowlog.threshold.query.debug”: “2s”,
“index.search.slowlog.threshold.query.trace”: “500ms”,
“index.search.slowlog.level”: “info”
}
在上面的示例中,慢速日志将在 “info” 级别记录任何花费超过 5 秒的查询。 你可以根据应用程序的需要调整这些阈值。
分析慢日志
在设置慢速日志并实现 X-Opaque-Id header 后,你可以将慢速查询跟踪到特定请求。 查找 X-Opaque-Id,当您在你速日志中发现请求时,使用它来定位导致慢速查询的请求。
然后可以开始调试阶段; 你可以检查请求,确定它导致查询缓慢的原因,并进行必要的调整以优化它。
结论
Elasticsearch 慢速查询调试可能是一项艰巨的任务,但使用正确的工具和策略,它可以变得简单得多。 你可以使用 X-Opaque-Id header 和慢速日志功能识别、跟踪和解决慢速查询问题。 设置适当的阈值并有效地利用唯一标识符将对你有所帮助。
更多关于如何摄取慢日志到 Elasticsearch 并进行搜索,请详细阅读:
- Observability:集群监控 (一) - Elastic Stack 8.x
-
Observability:集群监控 (二) - Elastic Stack 8.x