Top N 查询
使用查询洞察监控前 N 个查询,可以实时了解在指定时间段内(例如,过去一小时)延迟最高或资源消耗最高的查询。
配置前 N 个查询监控
您可以通过以下指标类型配置前 N 个查询监控
延迟
CPU
内存
每个指标都有一组对应的设置
search.insights.top_queries.<metric>.enabled
: 设置为true
以启用按指标进行的前 N 个查询监控。search.insights.top_queries.<metric>.window_size
: 配置按指标进行的前 N 个查询的窗口大小。search.insights.top_queries.<metric>.top_n_size
: 指定按指标进行的前 N 个查询中 N 的值。
例如,要按 CPU 使用率启用前 N 个查询监控,请将 search.insights.top_queries.cpu.enabled
设置为 true
。有关指定动态设置的更多信息,请参阅动态设置。
启用此功能时务必谨慎,因为它可能会消耗系统资源。
启用前 N 个查询监控
安装 query-insights
插件后,默认启用前 N 个查询监控。要禁用前 N 个查询监控,请更新所需指标类型的动态集群设置。例如,要禁用按延迟进行的前 N 个查询监控,请更新 search.insights.top_queries.latency.enabled
设置
PUT _cluster/settings
{
"persistent" : {
"search.insights.top_queries.latency.enabled" : false
}
}
配置窗口大小
要配置监控窗口大小,请更新所需指标类型的 window_size
设置。默认 window_size
为 5m
。例如,要在 60 分钟窗口内收集按延迟排序的前 N 个查询,请更新 search.insights.top_queries.latency.window_size
设置
PUT _cluster/settings
{
"persistent" : {
"search.insights.top_queries.latency.window_size" : "60m"
}
}
配置 N 的值
要配置 N 的值,请更新所需指标类型的 top_n_size
设置。默认 top_n_size
为 10
。例如,要收集按延迟排序的前 20 个查询,请更新 insights.top_queries.latency.top_n_size
设置
PUT _cluster/settings
{
"persistent" : {
"search.insights.top_queries.latency.top_n_size" : 20
}
}
监控当前前 N 个查询
您可以使用 Insights API 端点检索当前时间窗口的前 N 个查询。此 API 默认返回前 N 个 latency
结果。
GET /_insights/top_queries
查询参数
下表列出了可用的查询参数。所有查询参数都是可选的。
参数 | 数据类型 | 描述 |
---|---|---|
类型 | 字符串 | 要检索前 N 个查询数据的指标类型。结果将根据此指标按降序排序。有效值为 latency 、cpu 和 memory 。默认值为 latency 。 |
从 | 字符串 | 用于获取历史前 N 个查询的时间范围的开始。更多信息,请参阅监控历史前 N 个查询。 |
为 | 字符串 | 用于获取历史前 N 个查询的时间范围的结束。更多信息,请参阅监控历史前 N 个查询。 |
ID | 字符串 | 要检索的特定顶部查询记录的 ID。 |
详细 | 布尔型 | 指示是否返回详细输出。默认值为 true 。 |
示例响应
响应
{
"top_queries" : [
{
"timestamp" : 1745021834451,
"id" : "36506bd2-7bca-4a0a-a6b8-f3e7db2b0745",
"group_by" : "NONE",
"indices" : [
"my-index-0"
],
"source" : {
"size" : 20,
"query" : {
"bool" : {
"must" : [
{
"match_phrase" : {
"message" : {
"query" : "document",
"slop" : 0,
"zero_terms_query" : "NONE",
"boost" : 1.0
}
}
},
{
"match" : {
"user.id" : {
"query" : "userId",
"operator" : "OR",
"prefix_length" : 0,
"max_expansions" : 50,
"fuzzy_transpositions" : true,
"lenient" : false,
"zero_terms_query" : "NONE",
"auto_generate_synonyms_phrase_query" : true,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
},
"task_resource_usages" : [
{
"action" : "indices:data/read/search[phase/query]",
"taskId" : 28,
"parentTaskId" : 27,
"nodeId" : "BBgWzu8QR0qDkR0G45aw8w",
"taskResourceUsage" : {
"cpu_time_in_nanos" : 22664000,
"memory_in_bytes" : 6604536
}
},
{
"action" : "indices:data/read/search",
"taskId" : 27,
"parentTaskId" : -1,
"nodeId" : "BBgWzu8QR0qDkR0G45aw8w",
"taskResourceUsage" : {
"cpu_time_in_nanos" : 119000,
"memory_in_bytes" : 3920
}
}
],
"node_id" : "BBgWzu8QR0qDkR0G45aw8w",
"phase_latency_map" : {
"expand" : 0,
"query" : 23,
"fetch" : 0
},
"labels" : {
"X-Opaque-Id" : "query-label-1"
},
"search_type" : "query_then_fetch",
"total_shards" : 1,
"measurements" : {
"memory" : {
"number" : 6608456,
"count" : 1,
"aggregationType" : "NONE"
},
"latency" : {
"number" : 24,
"count" : 1,
"aggregationType" : "NONE"
},
"cpu" : {
"number" : 22783000,
"count" : 1,
"aggregationType" : "NONE"
}
}
},
{
"timestamp" : 1745021826937,
"id" : "86e161d0-e982-48c2-b8da-e3a3763f2e36",
"group_by" : "NONE",
"indices" : [
"my-index-*"
],
"source" : {
"size" : 20,
"query" : {
"term" : {
"user.id" : {
"value" : "userId",
"boost" : 1.0
}
}
}
},
"task_resource_usages" : [
{
"action" : "indices:data/read/search[phase/query]",
"taskId" : 26,
"parentTaskId" : 25,
"nodeId" : "BBgWzu8QR0qDkR0G45aw8w",
"taskResourceUsage" : {
"cpu_time_in_nanos" : 11020000,
"memory_in_bytes" : 4292272
}
},
{
"action" : "indices:data/read/search",
"taskId" : 25,
"parentTaskId" : -1,
"nodeId" : "BBgWzu8QR0qDkR0G45aw8w",
"taskResourceUsage" : {
"cpu_time_in_nanos" : 1032000,
"memory_in_bytes" : 115816
}
}
],
"node_id" : "BBgWzu8QR0qDkR0G45aw8w",
"phase_latency_map" : {
"expand" : 0,
"query" : 15,
"fetch" : 1
},
"labels" : { },
"search_type" : "query_then_fetch",
"total_shards" : 1,
"measurements" : {
"memory" : {
"number" : 4408088,
"count" : 1,
"aggregationType" : "NONE"
},
"latency" : {
"number" : 23,
"count" : 1,
"aggregationType" : "NONE"
},
"cpu" : {
"number" : 12052000,
"count" : 1,
"aggregationType" : "NONE"
}
}
}
]
}
如果您的查询没有返回结果,请确保已为目标指标类型启用前 N 个查询监控,并且在当前时间窗口内进行了搜索请求。
监控历史前 N 个查询
要查询历史前 N 个结果,请使用 from
和 to
参数指定时间范围,格式为 ISO 8601:YYYY-MM-DD'T'HH:mm:ss.SSSZ
。例如,要检索从 2024 年 8 月 25 日 15:00 UTC 到 2024 年 8 月 30 日 17:00 UTC 的前 N 个查询,请发送以下请求
GET /_insights/top_queries?from=2024-08-25T15:00:00.000Z&to=2024-08-30T17:00:00.000Z
要查看历史查询数据,导出器类型必须设置为 local_index
。更多信息,请参阅配置本地索引导出器。
导出前 N 个查询数据
您可以配置所需的导出器,将前 N 个查询数据导出到不同的接收器,从而更好地监控和分析 OpenSearch 查询。目前,支持以下导出器
配置调试导出器
要使用调试导出器,请将导出器类型设置为 debug
PUT _cluster/settings
{
"persistent" : {
"search.insights.top_queries.exporter.type" : "debug"
}
}
配置本地索引导出器
默认导出器为 local_index
。本地索引导出器允许您将前 N 个查询数据保存到在 OpenSearch 域中自动创建的索引中。查询洞察会按照命名模式 top_queries-YYYY.MM.dd-hashcode
创建这些索引,其中 hashcode
是根据当前 UTC 日期生成的 5 位数字。每天都会创建一个新索引。要使用 Top Queries API 或 Query Insights 控制面板进行历史前 N 个查询,您必须启用本地索引导出器。
要使用本地索引导出器,请将导出器类型设置为 local_index
PUT _cluster/settings
{
"persistent" : {
"search.insights.top_queries.exporter.type" : "local_index"
}
}
使用 delete_after_days
设置(整数)指定本地索引自动删除的天数。查询洞察每天 00:05 UTC 运行一次作业,删除早于指定天数的前 N 个本地索引。 delete_after_days
的默认值为 7,有效值范围为 1
到 180
。
例如,要删除超过 10 天的本地索引,请发送以下请求
PUT _cluster/settings
{
"persistent" : {
"search.insights.top_queries.exporter.delete_after_days" : "10"
}
}
从前 N 个查询中排除索引
您可以根据查询目标索引,将某些搜索查询从前 N 个查询列表中排除。当某些索引已知包含长时间运行的查询且无需监控时,此功能非常有用。
如果查询搜索属于 excluded_indices
中列出的任何索引的任何分片,则该查询将被排除。
默认情况下,此设置为 null
(包含所有索引)。要排除特定索引,请在 search.insights.top_queries.excluded_indices
设置中提供以逗号分隔的索引名称列表
PUT _cluster/settings
{
"persistent" : {
"search.insights.top_queries.excluded_indices" : "index-1,index-2,index-3"
}
}