你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:将 Log Analytics 工作区中的自定义字段替换为基于 KQL 的自定义列
自定义字段是 Azure Monitor 的一项功能,可用于从同一表的不同文本列提取到单独的列数据中。 从 2023 年 3 月 31 日起,将禁用创建新自定义字段。 自定义字段功能将弃用,现有自定义字段将于 2026 年 3 月 31 日停止运行。
使用基于 DCR 的引入时间转换实现相同结果有几个优点:
- 可以应用完整的字符串函数集来调整自定义列。
- 可以将多个操作应用于同一数据。 例如,将值的一部分提取到单独的列并删除原始列。
- 可以在 ARM 模板中使用引入时转换来大规模部署自定义列。
随着数据收集规则 (DCR) 的引入,基于 KQL 的转换是表自定义的标准方法,取代了旧的自定义字段。
在本教程中,你将了解如何执行以下操作:
- 找到需要替换的自定义字段
- 了解自定义字段的内容
- 设置引入时间转换以替换表中的自定义字段
先决条件
- 具有包含自定义字段的表的 Log Analytics 工作区
- 足够的帐户特权,可以创建和修改数据收集规则 (DCR)
查找要替换的自定义字段
首先查找要替换的自定义字段。 如果你已知道计划替换的自定义字段,请继续执行下一步。
导航到包含自定义字段的表所在的 Log Analytics 工作区。
在侧边菜单中,选择“表”。 从表的上下文菜单中选择“管理表”。
请注意是否有任何数据收集规则 (DCR) 与给定表相关联。
- 如果相应节中存在任何 DCR,则表示任何预先存在的自定义字段都已在这些 DCR 中实现,或在创建 DCR 时放弃。 你将在本教程的下一步中检查自定义字段的内容,并确定是否需要对 DCR 进行更多更新。
- 如果没有与表关联的数据收集规则,则给定表中名称以“_CF”结尾的所有列都将是自定义字段,可能会进行替换。
关闭表属性对话框,然后从表上下文菜单中选择“编辑架构”。 滚动到列出了自定义列的页面底部。 这些列以 _CF 结尾。
记下这些列的名称,因为你将在下一步中确定其内容。
了解自定义字段内容
由于无法直接检查自定义字段定义,因此需要查询表以确定自定义字段公式。
在侧边菜单中选择“日志”,然后运行查询以获取表中数据的示例。
找到上一步中记录的列并检查其内容。
- 如果列不为空,并且存在与表关联的 DCR,则表示自定义字段逻辑已通过转换实现。 不需要执行任何操作
- 如果列为空(或在查询结果中不存在),并且有与表关联的 DCR,则自定义字段逻辑未通过 DCR 实现。 向现有 DCR 中的数据流添加转换。
- 如果该列不为空,并且没有与表关联的 DCR,则自定义字段逻辑需要在工作区 DCR 中实现为转换。
检查自定义字段的内容并确定计算该字段的逻辑。 自定义字段通常计算同一表中其他列的子字符串。 确定数据来自哪个列以及它提取的字符串部分。
创建转换
现在可以创建所需的 KQL 代码片段并将其添加到 DCR。 此逻辑在引入工作区时应用于每个记录。
使用 KQL 修改表的查询,以复制自定义字段逻辑。 如果有多个要替换的自定义字段,则可以将其计算逻辑合并到单个语句中。
- 使用 parse 运算符对字符串中的子字符串进行基于模式的搜索。
- 使用 extract() 函数进行基于正则表达式的子字符串搜索。
- 作为 split()、substring() 的字符串函数和其他许多可能也有用。
确定需要放置自定义列的新 KQL 定义的位置。
- 对于使用 Azure Monitor 代理 (AMA) 收集的日志,请编辑收集表数据的 DCR,并添加转换。 有关示例,请参阅 Azure Monitor 中转换的最佳实践和示例。 转换查询在
transformKql
元素中定义。 - 对于使用诊断设置收集的资源日志,请将转换添加到工作区默认 DCR。 表必须支持转换。
- 对于使用 Azure Monitor 代理 (AMA) 收集的日志,请编辑收集表数据的 DCR,并添加转换。 有关示例,请参阅 Azure Monitor 中转换的最佳实践和示例。 转换查询在
常见问题
如何迁移使用旧版 Log Analytics 代理 (MMA) 收集的文本日志的自定义字段?
考虑迁移到 Azure Monitor 代理 (AMA)。 Log Analytics 代理即将终止支持,应迁移到 Azure Monitor 代理 (AMA)。 使用 AMA 收集的文本日志使用从一开始就以 KQL 转换形式定义的日志分析逻辑。 自定义字段不是必需的,在 Azure Monitor 代理收集的文本日志中不受支持。
将自定义字段迁移到 KQL 是否是必需的?
否,仅当你仍希望填充自定义列时,才需要迁移自定义字段。 如果不迁移自定义字段,则终止对自定义字段的支持时,相应的列将停止填充。 已处理并存储在表中的数据将不受影响,并且将保持可用。
如果不及时迁移自定义字段,是否会丢失相应列中的现有数据?
否,自定义字段是在数据引入时计算的。 删除字段定义或不及时迁移它们不会影响之前引入的任何数据。