你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure AI 搜索中监视查询请求

本文介绍如何使用内置指标与资源日志来度量查询性能和查询量。 它还介绍如何获取应用程序用户输入的查询字符串。

Azure 门户显示有关查询延迟、查询负载 (QPS) 和限制的基本指标。 可在门户中访问馈送到这些指标的历史数据 30 天。 若要延长保留期或者要基于操作数据和查询字符串进行报告,必须添加诊断设置,该设置指定用于保留记录的操作和指标的存储选项。 我们建议将“Log Analytics 工作区”作为已记录操作的目标。 Kusto 查询和数据浏览面向 Log Analytics 工作区。

可最大程度地提高数据度量完整性的条件包括:

  • 使用可计费服务(在“基本”或“标准”层创建的服务)。 免费服务由多个订阅者共享,当负载变化时,这会造成某种程度的波动。

  • 如果可能,请使用单个副本和分区创建包容性的隔离环境。 如果使用多个副本,将会计算多个节点中的查询指标的平均值,这可能会降低结果的精确度。 同样,使用多个分区意味着数据将被分割,如果同时正在进行索引编制,则某些分区有可能包含不同的数据。 优化查询性能时,单个节点和分区就能提供更稳定的环境用于测试。

提示

使用附加的客户端代码和 Application Insights,还可以捕获点击率数据,以更深入地了解哪些内容引起了应用程序用户的兴趣。 有关详细信息,请参阅搜索流量分析

查询量 (QPS)

查询量以每秒搜索查询数 (QPS) 度量。QPS 是一个内置指标,可按一分钟时间范围内执行的查询数的平均、计数、最小或最大值来报告。 指标的一分钟间隔 (TimeGrain = "PT1M") 在系统中是固定的。

查询往往在若干毫秒内即可完成执行,因此,指标中仅显示以秒度量的查询。

聚合类型 说明
平均值 执行查询的某一分钟内的平均秒数。
计数 在一分钟间隔内发出到日志的指标数。
最大值 在一分钟内每秒注册的最大搜索查询数。
最小值 在一分钟内每秒注册的最小搜索查询数。
Sum 在一分钟内执行的所有查询数之和。

例如,在一分钟内可能出现如下所述的模式:有 1 秒出现高负载(这是 SearchQueriesPerSecond 的最大值),紧接着有 58 秒的平均负载,最后 1 秒只有 1 个查询(这是最小值)。

另举一例:如果某个节点发出 100 个指标,其中每个指标的值为 40,那么,“计数”为 100,“总和”为 4000,“平均值”为 40,“最大值”为 40。

查询性能

服务范围的查询性能以搜索延迟(完成查询花费的时间)以及由于资源争用而丢弃的受限制查询度量。

搜索延迟

聚合类型 延迟
平均值 平均查询持续时间(毫秒)。
计数 在一分钟间隔内发出到日志的指标数。
最大值 样本中运行时间最长的查询。
最小值 样本中运行时间最短的查询。
总计 样本中在时间间隔(一分钟)内执行的所有查询的总执行时间。

考虑以下“搜索延迟”指标示例:已采样 86 个查询,平均持续时间为 23.26 毫秒。 最小值 0 表示丢弃了某些查询。 运行时间最长的查询花费了 1000 毫秒才完成。 总执行时间为 2 秒。

Latency aggregations

受限制的查询

受限制的查询是指已丢弃而未处理的查询。 在大多数情况下,限制是运行服务的正常组成部分。 发生限制并不一定表示出现了问题。

当执行的请求数量超过容量时,就会发生限制。 排除某个副本的轮换或者在编制索引期间,可能会看到受限制请求的数量增多。 查询和索引编制请求由同一组资源处理。

服务根据资源消耗量确定是否丢弃请求。 内存、CPU 和磁盘 IO 资源消耗百分比是一段时间的平均值。 如果此百分比超过阈值,则所有索引请求将受到限制,直到请求量减少。

根据所用的客户端,可通过以下方式指示受限制的请求:

  • 服务返回“"You are sending too many requests. Please try again later."”错误
  • 服务返回 503 错误代码,指示服务当前不可用。
  • 如果使用的是门户(例如搜索资源管理器),则会以静默方式丢弃查询,你需要再次选择“搜索”。

若要确认受限制的查询,请使用“受限制的搜索查询”指标。 可以在门户中浏览指标,或根据本文中所述创建一个警报指标。 对于在采样间隔内丢弃的查询,请使用“总计”来获取未执行的查询百分比。

聚合类型 限制
平均值 间隔内丢弃的查询百分比。
计数 在一分钟间隔内发出到日志的指标数。
最大值 间隔内丢弃的查询百分比。
最小值 间隔内丢弃的查询百分比。
总计 间隔内丢弃的查询百分比。

对于“受限制的搜索查询百分比”、最小值、最大值、平均值和总计,全都具有相同的值:在一分钟内的搜索查询总数中,已限制搜索查询百分比。

在以下屏幕截图中,第一个数字是计数(或发送到日志的指标数)。 显示在顶部或者将鼠标悬停在指标上显示的其他聚合包括平均值、最大值和总计。 在此示例中,未丢弃任何请求。

Throttled aggregations

在门户中浏览指标

为了让用户快速查看当前数字,服务“概述”页上的“监视”选项卡会显示三个按固定间隔以小时、天和周度量的指标(“搜索延迟”、“每秒搜索查询数(每搜索单位)”和“受限制的搜索查询百分比”),并提供用于更改聚合类型的选项。

若要进行更深入的浏览,请从“监视”菜单中打开指标资源管理器,以便可以分层、放大和可视化数据,从而浏览趋势或异常情况。 在这篇有关创建指标图表的教程中详细了解指标资源管理器。

  1. 在“监视”部分下,选择“指标”打开指标资源管理器,其中的数据范围是根据搜索服务设置的。

  2. 在“指标”下,从下拉列表中选择一个指标,并查看偏好类型的可用聚合列表。 聚合定义在每个时间间隔如何对收集的值采样。

    Metrics explorer for QPS metric

  3. 在右上角设置时间间隔。

  4. 选择可视化效果。 默认设置为折线图。

  5. 选择“添加指标”并选择不同的聚合来叠加更多聚合。

  6. 在折线图上放大感兴趣的区域。 将鼠标指针放在区域的开头位置,选中并按住鼠标左键,拖动到区域的另一侧,然后松开按钮。 图表会在该时间范围内放大。

返回用户输入的查询字符串

启用资源日志记录时,系统将捕获“AzureDiagnostics”表中的查询请求。 你必须已指定已记录操作的目标(即 Log Analytics 工作区或其他存储选项),这是先决条件。

  1. 在“监视”部分下,选择“日志”在 Log Analytics 中打开一个空查询窗口。

  2. 运行以下表达式来搜索 Query.Search 操作,这会返回表格格式的结果集,其中包含操作名称、查询字符串、查询的索引以及找到的文档数。 最后两条语句排除针对样本索引运行的、包含空的或未指定的搜索的查询字符串,这可以减少结果中的干扰信息。

       AzureDiagnostics
    | project OperationName, Query_s, IndexName_s, Documents_d
    | where OperationName == "Query.Search"
    | where Query_s != "?api-version=2023-07-01-preview&search=*"
    | where IndexName_s != "realestate-us-sample-index"
    
  3. (可选)在 Query_s 中设置列筛选器,以基于特定的语法或字符串进行搜索。 例如,可以基于“等于?api-version=2023-11-01&search=*&%24filter=HotelName”进行筛选

    Logged query strings

尽管此方法适用于临时调查,但生成报告可以在更有利于分析的布局中合并和呈现查询字符串。

识别长时间运行的查询

添加持续时间列以获取所有查询的数量,而不仅仅是作为指标选取的查询的数量。 将此数据排序可以显示完成哪些查询所花费的时间最长。

  1. 在“监视”部分下,选择“日志”以查询日志信息。

  2. 运行以下基本查询以返回按持续时间(以毫秒为单位)排序的查询。 运行时间最长的查询列在最前面。

    AzureDiagnostics
    | project OperationName, resultSignature_d, DurationMs, Query_s, Documents_d, IndexName_s
    | where OperationName == "Query.Search"
    | sort by DurationMs
    

    Sort queries by duration

创建指标警报

指标警报会建立一个阈值,该阈值适用于发送一个通知或触发一个你提前定义的纠正操作。 你可以创建与查询执行相关的警报,但也可以针对资源健康状况、搜索服务配置更改、技能执行和文档处理(索引)创建警报。

所有阈值都是用户定义的,因此你应该了解什么活动级别应该触发警报。

对于查询监视,通常会针对搜索延迟和受限制的查询创建指标警报。 如果你知道何时丢弃了查询,可以查看降低负载或增加容量的补救措施。 例如,如果受限制的查询在索引编制期间增加,可将其推迟到查询活动减少时。

如果推送特定副本分区配置的限制,则针对查询量阈值 (QPS) 设置警报也很有帮助。

  1. 在“监视”下,选择“警报”,然后选择“创建预警规则”

  2. 在“条件”下,选择“添加”。

  3. 配置信号逻辑。 对于信号类型,请选择“指标”,然后选择信号。

  4. 选择信号后,可以使用图表来可视化历史数据,以便在如何继续设置条件方面做出明智的决策。

  5. 接下来,向下滚动到“警报逻辑”。 对于概念证明,可以人为地指定一个较小值进行测试。

  6. 接下来,指定或创建操作组。 这是在达到阈值时要调用的响应措施。 该措施可以是推送通知或自动响应。

  7. 最后,指定警报详细信息。 命名并描述警报,分配严重性值,并指定是要以启用还是禁用状态创建规则。

如果指定了电子邮件通知,则会收到来自“Microsoft Azure”的主题行为“Azure:已激活的严重性:3 <your rule name>”的电子邮件。

后续步骤

如果尚未这样做,请查看搜索服务监视基础知识,以全方面地了解监督功能。