Link Search Menu Expand Document Documentation Menu

Top N 查询

使用查询洞察监控前 N 个查询,可以实时了解在指定时间段内(例如,过去一小时)延迟最高或资源消耗最高的查询。

配置前 N 个查询监控

您可以通过以下指标类型配置前 N 个查询监控

  • 延迟
  • CPU
  • 内存

每个指标都有一组对应的设置

例如,要按 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_size5m。例如,要在 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_size10。例如,要收集按延迟排序的前 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 个查询数据的指标类型。结果将根据此指标按降序排序。有效值为 latencycpumemory。默认值为 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 个结果,请使用 fromto 参数指定时间范围,格式为 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,有效值范围为 1180

例如,要删除超过 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"
  }
}