Azure Monitor 中的转换会在将传入数据存储到 Log Analytics 工作区之前,对其进行筛选或修改。 在 数据收集规则 (DCR) 中将转换实现为 Kusto 查询语言 (KQL) 语句。 本文提供有关创建和测试转换查询并将其添加到 DCR 的指南。
基本查询结构
所有转换查询均始于 source,这是表示输入流的虚拟表。 然后可以使用任何支持的 KQL 运算符来筛选、修改数据或向数据中添加列,与操作其他表一样。 查询将分别应用于数据源发送的每个条目。
查询的输出必须与目标表的架构匹配,有以下注意事项:
- 省去不需要的列以节省成本。 省略列时,该列对于目标表中的每条记录都是空的。
- 排除不在输出表中的任何列。 额外的列可以被接受且不会报错,但你仍需为摄取那些未被存储的数据付费。
- 在名为
TimeGenerated、类型为datetime的列中包含有效的时间戳。 如果数据源不包含此属性,请使用extend或project.
以下转换是执行三个函数的示例:
- 使用
where语句筛选传入数据。 - 使用
Properties运算符和extend函数解析传入的parse_json列中的 JSON 值,从而添加新列properties。 - 使用
project运算符将转换输出格式化为与目标表的列完全匹配。
source
| where severity == "Critical"
| extend Properties = parse_json(properties)
| project
TimeGenerated = todatetime(["time"]),
Category = category,
StatusDescription = StatusDescription,
EventName = name,
EventId = tostring(Properties.EventId)
有关各种不同场景的示例,请参阅 Azure Monitor 中的数据收集规则 (DCR) 示例和场景。
创建转换查询
在向 DCR 添加转换之前,请在Log Analytics中创建和测试查询。 当查询返回预期结果时,请将表名替换为 source,并按照 向 DCR 添加转换 中所述将其添加到 DCR 中。
重要
转换不支持所有 KQL 特性。 有关支持的功能和限制,请参阅 Azure Monitor 转换中支持的 KQL 功能。
| 转换测试策略 | Description |
|---|---|
| 查询现有数据。 | 如果已收集要转换的数据,请在Log Analytics中针对该表编写查询。 验证输出是否显示预期的筛选或修改,然后复制查询文本。 |
使用datatable处理示例数据。 |
使用 datatable 运算符编写查询,以创建表示传入数据的示例数据集。 验证查询输出,然后复制查询文本而不使用 datatable 运算符。 |
| 在门户中创建测试表。 | 在Azure门户中创建新表并提供示例数据。 使用内置转换编辑器编写和测试查询。 如果对结果感到满意,请复制查询文本。 |
例如,若要筛选 Syslog 事件,请从Log Analytics中开始此查询:
Syslog | where SeverityLevel != 'info'
然后在您的 DCR 中将表名替换为 source:
source | where SeverityLevel != 'info'
向 DCR 添加转换功能
创建转换查询后,请按照以下步骤将其添加到 DCR:
获取当前的 DCR 定义。 在 UI 中打开 DCR 定义并选择 JSON 视图,或使用Azure CLI导出 JSON:
az monitor data-collection rule show --name {dcrName} --resource-group {resourceGroupName} > dcr.json有关详细信息,请参阅 Azure Monitor 中的
创建和编辑数据收集规则(DCR)。 找到 DCR 中的
dataFlows部分。 本部分将数据源与目标配对。将
transformKqlJSON 属性添加到要转换的数据流。 将其值设置为单行中的转换查询。 在将输入流发送到目标之前,会先对其应用该转换。 它仅适用于该数据流,即使在其他数据流中使用同一流或目标也是如此。保存并部署更新的 DCR:
az monitor data-collection rule update --name {dcrName} --resource-group {resourceGroupName} --body @dcr.json有关其他方法,请参阅 在 Azure Monitor 中创建和编辑数据收集规则(DCR)。
注释
某些数据源提供了一种方法,该方法使用 Azure 门户向 DCR 添加转换。 例如,从虚拟机收集文本允许在 Azure 门户中指定转换查询。 不过,大多数数据收集方案目前要求你直接使用 DCR 定义。
如果省略属性 transformKql ,或者将其值 source设置为,则不应用任何转换。 传入的数据将发送到目标,无需修改。
重要
转换查询必须位于 DCR 中的单个行上。 如果要在 Azure 门户中创建转换,请分成多行以便阅读。 门户会为您将换行符 \n 包含在查询中。 如果直接编辑 JSON,请确保在保存之前删除任何换行符和额外空格。
在下面的示例中,没有 transformKql 属性,因此传入的数据将发送到目标,而无需修改。
"dataFlows": [
{
"streams": [
"Microsoft-Syslog"
],
"destinations": [
"centralWorkspace"
]
}
]
在以下示例中,transformKql 有一个简单的 source 查询,因此传入的数据将无任何修改地发送到目标。 其功能与前面的示例相同。
"dataFlows": [
{
"streams": [
"Microsoft-Syslog"
],
"transformKql": "source",
"destinations": [
"centralWorkspace"
]
}
]
在以下示例中,transformKql 有一个筛选数据的查询,因此仅将错误消息发送到目标。
"dataFlows": [
{
"streams": [
"Microsoft-Syslog"
],
"transformKql": "source | where message has 'error'",
"destinations": [
"centralWorkspace"
]
}
]
创建工作区转换 DCR
工作区转换数据收集规则 (DCR)是可直接应用于 Log Analytics 工作区的特殊DCR。 每个工作区只能有一个工作区转换 DCR,但它可以包含针对任意数量表的转换。
使用以下方法之一为工作区创建工作区转换 DCR,并向其中添加一个或多个转换。
注释
可能需要长达 60 分钟才能激活新的转换查询。
可以通过向支持的表添加转换,在 Azure 门户中创建工作区转换 DCR。
在 Azure 门户中的“Log Analytics 工作区”菜单中,选择“表”。 选择要转换的表右侧的省略号(...),然后选择“ 创建转换”。
如果此工作区的工作区转换 DCR 尚不存在,请选择创建一个的选项。 如果该 DCR 已存在,门户将选择它。 每个工作区只能有一个工作区转换 DCR。
选择“下一步”以查看表中的示例数据。 选择 转换编辑器 以定义转换查询。
编辑并运行转换查询,以查看针对表中的实际数据的结果。 继续修改和测试查询,直到获得所需结果。
当您对查询满意后,选择 应用,然后依次选择 下一步 和 创建,以保存包含新转换的 DCR。
若要验证转换是否处于活动状态,请转到 “监视>数据收集规则 ”,并确认工作区转换 DCR 显示为“ 成功”。 然后在下一个引入周期后查询目标表,以确认应用转换。
优化并监测转换过程
转换会针对使用 DCR 收集的每个记录运行 KQL 查询,因此它们必须高效运行。 转换执行时间有助于总体 数据引入延迟,而运行时间过长的转换可能会影响数据收集的性能并导致数据丢失。 最佳转换的运行时间不应超过 1 秒。 请参阅优化 Azure Monitor 中的日志查询,获取有关在将查询作为转换实现之前测试查询的指导,并获取有关优化未高效运行的查询的建议。
重要
如果转换需要 20 秒以上,则可能会遇到数据丢失。
由于转换不以交互方式运行,因此必须持续监视转换,以确保转换正常运行并且不会花费过多的时间来处理数据。 请参阅在 Azure Monitor 中监视 DCR 数据收集和排查相关问题,详细了解用于监视转换运行状况和性能的日志和指标。 这包括识别 KQL 中发生的任何错误以及用于跟踪其运行持续时间的指标。
系统将自动收集以下转换指标,并应定期审查以验证转换是否仍在按预期运行。 创建指标警报规则,以在其中一个指标超过阈值时自动收到通知。
- 每分钟的日志转换持续时间
- 每分钟的日志转换错误数
启用 DCR 错误日志以跟踪转换或其他查询中发生的任何错误。 创建日志警报规则,以在将条目写入此表时自动收到通知。
对转换进行故障排除
下表列出了常见的转换错误及其解决方法。
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 架构不匹配 | 转换输出与目标表列不匹配。 | 验证 project 或 extend 的输出是否与目标表架构匹配。 请参阅列名称和类型的 数据参考 。 |
| 不支持的 KQL 运算符 | 使用转换中不可用的运算符(例如 join)。 |
有关支持的运算符列表,请参阅 支持的 KQL 功能 。 |
| 查询在 Log Analytics 中可正常运行,但在转换中失败 | Log Analytics 中支持的某些 KQL 运算符在转换中不受支持。 | 有关转换中可用的运算符子集,请参阅 支持的 KQL 功能 。 在将其添加到 DCR 之前,先测试仅使用受支持运算符的查询。 |
| 转换后数据丢失 | 转换运行时间超过 20 秒。 | 简化 KQL 查询。 有关建议,请参阅 “优化日志查询 ”。 |
| 未应用转换 | 在同一数据流上同时指定了 transformKql 和 transform。 |
这些属性是相互排斥的。 每个数据流二者择一使用。 |
| DCR 错误日志中的错误 | KQL 语法无效或出现运行时错误。 |
启用 DCR 错误日志 并查看 DCRLogErrors 表。 |
| 访问被拒绝 | 权限不足,无法创建或编辑 DCR。 | 验证你是否在资源组或订阅上具有 “监视参与者” 角色。 |
| 处理器无法识别 | 无效的处理器类型名称(例如, filter.basic 而不是 filter.Basic)。 |
处理器名称区分大小写。 有关有效名称,请参阅 处理器类型 。 |
| 找不到命名转换 | 该 transform 属性引用节 transformations 中不存在的名称。 |
验证数据源或数据流上的 transform 值是否与 name 数组中的某个 transformations 完全匹配。 |
| 未应用客户端转换 | 代理版本不支持多阶段转换。 | 将Azure Monitor代理更新到最新版本。 多阶段转换需要 API 版本 2025-05-11 或更高版本。 |
按数据源排序的转换指南
有多种方法可以创建转换,具体取决于数据收集方法。 下表列出了用于创建转换的不同方法的指导。
| 数据收集 | 参考文献 |
|---|---|
| 日志引入 API |
使用 REST API 将数据发送到 Azure Monitor 日志(Azure 门户) 使用 REST API(Azure 资源管理器模板)将数据发送到 Azure Monitor 日志 |
| 具有 Azure Monitor 代理的虚拟机 | 向 Azure Monitor 日志添加转换功能 |
| 具有容器见解的 Kubernetes 群集 | 容器洞察中的数据转换 |
限制和注意事项
- 转换会在数据摄取时运行,并计入数据处理成本。 但是,使用转换筛选数据可以减少引入量和存储成本。 有关详细信息,请参阅 成本优化和 Azure Monitor。
- 并非所有 Log Analytics 工作区中的表都支持转换。 有关受支持表的列表,请参阅 支持 Azure Monitor 日志中转换的表。
- 转换查询中并非所有 KQL 运算符都受支持。 有关更多信息,请参阅 Azure Monitor 转换中支持的 KQL 功能。
- 虽然转换可以将单个数据源发送到多个表,但它无法将数据发送到多个工作区。 若要将数据从单个数据源发送到多个工作区,请创建多个 DCR。
- 工作区转换 DCR 无法将单个数据源发送到多个表,因为该转换将应用于表本身。
- 工作区转换 DCR 中的转换将应用于发送到表中的所有数据,无论数据源如何。 如果需要将不同的转换应用到不同的数据源,请使用
where转换查询中的语句将不同的逻辑应用于来自不同源的数据。
相关内容
- 在 Azure Monitor 中监视和排查 DCR 数据收集 - 跟踪转换性能并诊断问题。
- Azure Monitor转换中支持的 KQL 功能 - 验证哪些 KQL 运算符在转换中工作。
- Azure Monitor 中的数据收集规则 (DCR) 结构 - DCR 定义的完整 JSON 架构参考文档。
- Azure Monitor 的转换示例 - 常见场景的示例转换查询。
- 使用 Azure Monitor 代理创建数据收集规则,并将虚拟机与该规则关联。
- 成本优化和Azure Monitor - 了解转换如何影响引入成本。