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

解决 Microsoft Sentinel 数据湖中的 KQL 查询故障问题

使用以下清单解决在 Microsoft Sentinel data lake 中使用 KQL(Kusto 查询语言)查询和作业时的常见问题。

  • 在运行查询或作业之前检查先决条件。 有关详细信息,请参阅 Microsoft Sentinel data lake 的角色和权限

  • 在执行 KQL 查询或作业之前,请确保选择了正确的工作区。

  • 确认所有引用的表和工作区都存在且可访问。

  • 仅使用支持的 KQL 运算符和命令来避免执行错误。

  • 使用筛选器(如时间范围)调整查询,以避免查询超时。

特定于作业的验证:

  • 在通过作业创建新的自定义表时,请确保你为目标工作区选择了正确的角色。 有关详细信息,请参阅 Microsoft Sentinel data lake 的角色和权限

  • 在 KQL 编辑器中测试查询,以便在将其作为作业提交之前捕获语法和逻辑错误。

  • 确保作业名称在租户中的所有作业(包括 Notebooks 作业)中是唯一的。

  • 验证查询输出架构是否与列名称和数据类型中的目标表保持一致。

  • 验证作业状态并跟踪进度。

  • 有关特定错误消息和解决方法步骤,请参阅以下错误表。

注释

提升到分析层的数据可能需要 15-30 分钟才能显示在高级搜寻中,具体取决于数据大小和查询复杂性。 如果作业查询超过一小时限制,部分结果可能会被推广。

KQL 查询错误消息

错误消息 根源 建议操作
找不到表或为空。 引用的表不存在、为空或用户没有所需的权限。 验证表名称、确认数据可用性,并确保用户具有适当的访问权限。 有关详细信息,请参阅 Microsoft Sentinel data lake 的角色和权限
无法访问已释放的对象。 后端服务中出现内部服务错误。 重试。 如果问题仍然存在,请开具支持票证。
查询在网关处超时。 没有时间筛选器的长时间运行查询。 强制实施时间筛选器或应用额外的筛选器。
未设置时间范围。 添加时间参数来控制查询成本并避免超时。 回溯不受限制的查询可能会导致超时。 强制实施时间筛选器或应用额外的筛选器。
不支持的函数。 修改查询以删除 Data Lake 中不支持的函数:ingestion_time()。 Data Lake 上的查询不支持该 ingestion_time() 函数。 从查询中删除 ingestion_time() ,然后重试。
查询执行时间超过了分配的超时限制,已被中止。 • 查询可能过于复杂或检索大型数据集,从而导致超过允许的执行时间。
• 低效的查询结构,例如不必要的联接或过度筛选可能会导致性能降低。
优化查询,然后重试。
401-Unauthorized:这通常表示永久性错误,重试不太可能有所帮助。 错误详细信息:DataSource={clusterUri}、DatabaseName={databaseName}。 • 用于访问 Data Lake 的身份验证令牌可能无效或已过期。
• 您没有查询指定数据库所需的权限。
重新进行身份验证并验证访问权限。
调用外部 URL 的查询。 Lake 中的查询不支持调用外部 URL。 在 Data Lake 环境中执行的 KQL 查询不支持调用外部终结点。 从查询中删除外部 URL 调用。
查询执行已超过允许的限制。 数据湖中的 KQL 交互式查询限制为 500,000 行。 在 KQL 作业中运行查询或使用笔记本。
找不到表或可能没有数据。 请检查表是否存在、具有数据或用户是否具有权限。 • 数据库中可能不存在指定的表。
• 可能没有权限访问这些表。
• 表可能存在,但没有数据,因此没有有意义的输出。
确认表是否存在、数据可用性和用户权限。
查询文本超出了内部扩展后允许的最大长度。 当运算符与包含大量项列表的变量一起使用时 in() ,可能会发生这种情况。 in()• 运算符可能与大型列表一起使用,导致扩展查询超出查询限制。
• 查询可能包含动态生成的内容,导致长度过长。
减小列表的大小或简化查询。
查询执行已超过允许的限制。 优化查询,然后重试。
语义和语法错误,例如:
  • 语义错误:“project”运算符:无法解析名为“Timestamp”的标量表达式
  • 语义错误:“where”运算符:无法解析名为“Type”的标量表达式
  • 语法错误:运算符不能是查询中的第一个运算符。
  • 语法错误:缺少表达式
  • 未能执行 KQL 查询并出现验证错误:不完整的片段是意外的。
查询格式不正确,引用不存在的表或列,或者使用无效标量函数。 核查您的查询,然后重试。
客户端无权访问任何工作区,或客户端在范围内提供了无效的工作区。 查询使用无效的工作区 ID。 输入正确的工作区 ID,然后重试。
意外的控制命令 不允许使用控件命令(例如 show) 。 无需执行任何操作。

KQL 作业错误消息

错误消息 根源 建议操作
目标工作区中不存在指定的目标表。 表名称不正确、已删除或尚未创建。 在提交作业之前,请验证表名并确保它存在于目标工作区中。
指定的源表不存在。 指定的工作区中不存在一个或多个源表,或者这些源表最近从您的工作区中被删除。 验证指定工作区中是否存在源表。
查询中提供的工作区或数据库名称无效或不可访问。 引用的数据库不存在或作业缺少访问权限。 确认数据库名称正确且可从作业上下文访问。
Azure 订阅中不存在指定的目标工作区。 工作区 ID 或名称无效,或者租户中的任何 Azure 订阅中不存在。 验证工作区 ID。
查询输出架构与目标表的架构不匹配。 查询输出中的列数或名称不同于目标表架构。 更新查询或表架构以确保它们保持一致。
查询输出中一列或多列的数据类型与目标表架构不匹配。 查询输出和表架构之间的类型不匹配,例如字符串与日期/时间。 确保查询输出中的每个列都与表架构中预期的数据类型匹配。
由于语法或逻辑错误,KQL 查询未能执行。 查询包含无效的语法、不支持的函数、不支持的数据类型或不正确的引用。 使用 KQL 作业中的查询之前,在 KQL 查询或 Azure 数据资源管理器中测试查询。
KQL 作业名称必须是唯一的。 该作业名称已存在于租户中。 为作业提供唯一名称。
列名称无效。 它应以字母开头,仅包含字母、数字和下划线(_),_ResourceId。 作业的输出列包含不受支持的格式。 更新查询并重命名列。