自定义字段是 Azure Monitor 的一个功能,允许您从同一表中不同的文本列提取数据到单独的列中。 从 2023 年 3 月 31 日起,将禁用新建自定义域。 自定义字段功能将弃用,现有自定义字段将于 2026 年 3 月 31 日停止运行。
使用基于 DCR 的 引入时间转换 来实现相同的结果有几个优点:
- 可以应用完整的 字符串函数 集来调整自定义列。
- 可以对同一数据执行多个操作。 例如,将某个值的一部分提取到单独的列,并删除原始列。
- 可以在 ARM 模板中使用数据摄取时转换,以大规模部署自定义列。
随着 数据收集规则(DCR)的引入,基于 KQL 的转换是表自定义的标准方法,取代了旧的自定义字段。
本教程中,您将学习如何:
- 找到需要替换的自定义字段
- 了解自定义字段的内容
- 设置引入时转换以替换表中的自定义字段
先决条件
- 具有包含自定义字段的表的日志分析工作区
- 创建和修改数据收集规则的足够帐户权限(DCR)
查找要替换的自定义字段
首先查找要替换的自定义字段。 如果已知道计划替换的自定义字段,请继续执行下一步。
导航到包含自定义字段的表所在的 Log Analytics 工作区。
在侧菜单中,选择 “表”。 从表的上下文菜单中选择“ 管理表 ”。
请注意,是否有任何数据收集规则(DCR)与给定表相关联。
- 如果相应部分中存在任何 DCR,则表示任何预先存在的自定义字段要么已在这些 DCR 中实现,要么在创建 DCR 时放弃。 你将在本教程的下一步中检查自定义字段的内容,并确定是否需要对 DCR 进行更多更新。
- 如果没有与表关联的数据收集规则,则以“_CF”结尾的名称的给定表中的所有列都将是要替换的自定义字段。
关闭“表属性”对话框,然后从表上下文菜单中选择 “编辑架构 ”。 滚动到列出自定义列的页面底部。 这些列以 _CF结尾。
请注意这些列的名称,因为你将在下一步中确定其内容。
了解自定义字段内容
由于无法直接检查自定义字段定义,因此需要查询表以确定自定义字段公式。
在侧菜单中选择 “日志 ”,然后运行查询,从表中获取数据示例。
找到上一步中记录的列并检查其内容。
- 如果该列 不为空 ,并且存在与表关联的 DCR ,则已使用转换实现自定义字段逻辑。 无需执行任何动作
- 如果列 为空 (或查询结果中不存在),并且存在与表关联的 DCR ,则未使用 DCR 实现自定义字段逻辑。 在现有 DCR的数据流中添加一个转换。
- 如果列 不为空 ,并且没有与表关联的 DCR ,则自定义字段逻辑需要在 工作区 DCR 中实现为转换。
检查自定义字段的内容,并确定其计算方式的逻辑。 自定义字段通常计算同一表中其他列的子字符串。 确定数据来自哪个列及其提取的字符串部分。
创建转换
现在可以创建所需的 KQL 代码片段并将其添加到 DCR。 此逻辑应用于每个记录,在它被导入工作区时。
使用 KQL 修改表的查询以复制自定义字段逻辑。 如果有多个自定义字段要替换,则可以将其计算逻辑合并到单个语句中。
- 使用 分析 运算符对字符串中的子字符串进行基于模式的搜索。
- 使用 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?
否,仅当仍需要填充自定义列时,才需要迁移自定义字段。 如果不迁移自定义字段,则当自定义字段支持结束时,相应的列将停止填充。 已处理并存储在表中的数据不会受到影响,并且将保持可用状态。
如果不及时迁移自定义字段,是否会丢失相应列中的现有数据?
否,自定义字段是在数据引入时计算的。 删除字段定义或未及时迁移它们不会影响以前引入的任何数据。