在 Azure AI 搜索中监视查询请求
本文介绍如何使用内置指标与资源日志来度量查询性能和查询量。 它还介绍如何获取应用程序用户输入的查询字符串。
Azure 门户显示有关查询延迟、查询负载 (QPS) 和限制的基本指标。 可在门户中访问馈送到这些指标的历史数据 30 天。 若要延长保留期或者要基于操作数据和查询字符串进行报告,必须添加诊断设置,该设置指定用于保留记录的操作和指标的存储选项。 我们建议将“Log Analytics 工作区”作为已记录操作的目标。 Kusto 查询和数据浏览面向 Log Analytics 工作区。
可最大程度地提高数据度量完整性的条件包括:
使用可计费服务(在“基本”或“标准”层创建的服务)。 免费服务由多个订阅者共享,当负载变化时,这会造成某种程度的波动。
如果可能,请使用单个副本和分区创建包容性的隔离环境。 如果使用多个副本,将会计算多个节点中的查询指标的平均值,这可能会降低结果的精确度。 同样,使用多个分区意味着数据将被分割,如果同时正在进行索引编制,则某些分区有可能包含不同的数据。 优化查询性能时,单个节点和分区就能提供更稳定的环境用于测试。
提示
使用附加的客户端代码和 Application Insights,还可以捕获点击率数据,以更深入地了解哪些内容引起了应用程序用户的兴趣。 有关详细信息,请参阅搜索流量分析。
查询量 (QPS)
查询量以每秒搜索查询数 (QPS) 度量。QPS 是一个内置指标,可按一分钟时间范围内执行的查询数的平均、计数、最小或最大值来报告。 指标的一分钟间隔 (TimeGrain = "PT1M") 在系统中是固定的。
要详细了解 SearchQueriesPerSecond 指标,请参阅每秒搜索查询数。
查询性能
服务范围内的查询性能按搜索延迟和受限查询进行测量。
搜索延迟
搜索延迟表示完成查询需要使用的时长。 要了解有关 SearchLatency 指标的详细信息,请参阅搜索延迟。
考虑以下“搜索延迟”指标示例:已采样 86 个查询,平均持续时间为 23.26 毫秒。 最小值 0 表示丢弃了某些查询。 运行时间最长的查询花费了 1000 毫秒才完成。 总执行时间为 2 秒。
受限制的查询
受限制的查询是指已丢弃而未处理的查询。 在大多数情况下,限制是运行服务的正常组成部分。 发生限制并不一定表示出现了问题。 要了解有关 ThrottledSearchQueriesPercentage 指标的详细信息,请参阅受限搜索查询百分比。
在以下屏幕截图中,第一个数字是计数(或发送到日志的指标数)。 显示在顶部或者将鼠标悬停在指标上显示的其他聚合包括平均值、最大值和总计。 在此示例中,未丢弃任何请求。
在门户中浏览指标
为了让用户快速查看当前数字,服务“概述”页上的“监视”选项卡会显示三个按固定间隔以小时、天和周度量的指标(“搜索延迟”、“每秒搜索查询数(每搜索单位)”和“受限制的搜索查询百分比”),并提供用于更改聚合类型的选项。
若要进行更深入的浏览,请从“监视”菜单中打开指标资源管理器,以便可以分层、放大和可视化数据,从而浏览趋势或异常情况。 在这篇有关创建指标图表的教程中详细了解指标资源管理器。
在“监视”部分下,选择“指标”打开指标资源管理器,其中的数据范围是根据搜索服务设置的。
在“指标”下,从下拉列表中选择一个指标,并查看偏好类型的可用聚合列表。 聚合定义在每个时间间隔如何对收集的值采样。
在右上角设置时间间隔。
选择可视化效果。 默认设置为折线图。
选择“添加指标”并选择不同的聚合来叠加更多聚合。
在折线图上放大感兴趣的区域。 将鼠标指针放在区域的开头位置,选中并按住鼠标左键,拖动到区域的另一侧,然后松开按钮。 图表会在该时间范围内放大。
返回用户输入的查询字符串
启用资源日志记录时,系统将捕获“AzureDiagnostics”表中的查询请求。 你必须已指定已记录操作的目标(即 Log Analytics 工作区或其他存储选项),这是先决条件。
在“监视”部分下,选择“日志”在 Log Analytics 中打开一个空查询窗口。
运行以下表达式来搜索
Query.Search
操作,这会返回表格格式的结果集,其中包含操作名称、查询字符串、查询的索引以及找到的文档数。 最后两条语句排除针对样本索引运行的、包含空的或未指定的搜索的查询字符串,这可以减少结果中的干扰信息。AzureDiagnostics | project OperationName, Query_s, IndexName_s, Documents_d | where OperationName == "Query.Search" | where Query_s != "?api-version=2024-07-01&search=*" | where IndexName_s != "realestate-us-sample-index"
(可选)在 Query_s 中设置列筛选器,以基于特定的语法或字符串进行搜索。 例如,可以基于“等于
?api-version=2024-07-01&search=*&%24filter=HotelName
”进行筛选。
尽管此方法适用于临时调查,但生成报告可以在更有利于分析的布局中合并和呈现查询字符串。
识别长时间运行的查询
添加持续时间列以获取所有查询的数量,而不仅仅是作为指标选取的查询的数量。 将此数据排序可以显示完成哪些查询所花费的时间最长。
在“监视”部分下,选择“日志”以查询日志信息。
运行以下基本查询以返回按持续时间(以毫秒为单位)排序的查询。 运行时间最长的查询列在最前面。
AzureDiagnostics | project OperationName, resultSignature_d, DurationMs, Query_s, Documents_d, IndexName_s | where OperationName == "Query.Search" | sort by DurationMs
创建指标警报
指标警报会确定一个阈值,用于发送通知或触发提前定义的纠正操作。 你可以创建与查询执行相关的警报,但也可以针对资源健康状况、搜索服务配置更改、技能执行和文档处理(索引)创建警报。
所有阈值都是用户定义的,因此你应该了解什么活动级别应该触发警报。
对于查询监视,通常会针对搜索延迟和受限制的查询创建指标警报。 如果你知道何时丢弃了查询,可以查看降低负载或增加容量的补救措施。 例如,如果受限制的查询在索引编制期间增加,可将其推迟到查询活动减少时。
如果推送特定副本分区配置的限制,则针对查询量阈值 (QPS) 设置警报也很有帮助。
在“监视”下,选择“警报”,然后选择“创建预警规则”。
在“条件”下,选择“添加”。
配置信号逻辑。 对于信号类型,请选择“指标”,然后选择信号。
选择信号后,可以使用图表来可视化历史数据,以便在如何继续设置条件方面做出明智的决策。
接下来,向下滚动到“警报逻辑”。 对于概念证明,可以人为地指定一个较小值进行测试。
接下来,指定或创建操作组。 这是在达到阈值时要调用的响应措施。 该措施可以是推送通知或自动响应。
最后,指定警报详细信息。 命名并描述警报,分配严重性值,并指定是要以启用还是禁用状态创建规则。
如果指定了电子邮件通知,将收到来自“Azure”的主题行为“Azure:已激活的严重性:3 <your rule name>
”的电子邮件。
后续步骤
如果尚未这样做,请查看搜索服务监视基础知识,以全方面地了解监督功能。