你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Monitor 中创建转换
Azure Monitor 中的转换允许你在传入数据存储到 Log Analytics 工作区之前对其进行筛选或修改。 它们在数据收集规则 (DCR) 中以 Kusto 查询语言 (KQL) 语句的形式实现。 本文提供有关创建和测试转换查询并将其添加到 DCR 的指南。
注意
如果不熟悉 KQL 或为 Azure Monitor 数据创建日志查询的操作,请从 Azure Monitor 中的 Log Analytics 概述和 Azure Monitor 中的日志查询开始。
基本查询结构
所有转换查询均始于 source
,这是表示输入流的虚拟表。 然后可以使用任何支持的 KQL 运算符来筛选、修改数据或向数据中添加列,与操作其他表一样。 查询将分别应用于数据源发送的每个条目。
查询的输出必须与目标表的架构匹配,有以下注意事项:
- 可以省略任何不应填充的列。 目标表中相关记录的列将为空。
- 请确保排除输出表中未包含的任何列。 数据将被接受且不会出错,但需要为额外数据付费,即使未存储该数据。
- 每个转换的输出都必须在名为
TimeGenerated
且类型为datetime
列中包含一个有效的时间戳。 如果数据源不包含此属性,可以使用extend
或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 之前,需要创建和测试转换查询。 通常,可以通过针对现有数据或测试数据运行测试查询来执行此操作。 获得所需的结果时,可以将表名称替换为 source
,并将其粘贴到 DCR 中,如以下将转换添加到 DCR 中所述。
重要
转换并非支持所有 KQL 功能。 有关支持的功能和限制,请参阅 Azure Monitor 转换中支持的 KQL 功能。
例如,如果要创建转换来筛选 Syslog 事件,可以从以下查询开始,该查询可以在 Log Analytics 中运行。
Syslog | where SeverityLevel != 'info'
可以将此查询粘贴到 DCR 中,然后将表名称更改为 source
。
source | where SeverityLevel != 'info'
为数据使用以下策略之一来测试查询。
- 如果已在收集要转换的数据,可以使用 Log Analytics 编写查询,根据需要筛选或修改数据。 复制查询文本并将其粘贴到 DCR 中。
- 使用 Log Analytics 通过使用
datatable
运算符编写查询,以创建表示传入数据的示例数据集。 复制查询文本,不含datatable
运算符,将其粘贴到 DCR 中。 - 使用创建新表的过程在 Azure 门户中创建新表并提供示例数据。 使用包含的接口创建和测试转换查询。 复制查询文本并粘贴到 DCR 中,或执行该过程然后编辑 DCR 以复制转换查询。 之后如果不再需要该新表,可以将其删除。
向 DCR 添加转换
有了转换查询后,可以将其添加到 DCR。 使用在 Azure Monitor 中创建和编辑数据收集规则 (DCR) 中的指南,根据本部分中的信息创建或编辑 DCR,在 DCR 定义中包含转换查询。
注意
某些数据源提供使用 Azure 门户向 DCR 添加转换的方法。 例如,从虚拟机收集文本允许在 Azure 门户中指定转换查询。 但大多数数据收集方案当前要求直接使用 DCR 定义来添加转换。 这是本部分中所述的过程。
转换查询在 DCR 的数据流部分的 transformKql
属性中指定。 这是将数据源与目标配对的部分。 在将转换发送到目标之前,该转换将应用于数据流的传入流。 它将仅应用于该数据流,即使其他数据流中使用了同一流或目标也是如此。
如果省略 transformKql
属性,或其值仅为 source
,则不会应用任何转换,传入的数据将无任何修改地发送到目标。
重要
转换查询须完全在 DCR 中的一行上。 如果要在 Azure 门户中创建转换,出于可读性目的可以使用多行,查询的每个新行中将包含 \n
。
在以下示例中,没有 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,并向其中添加一个或多个转换。
可以通过向支持的表添加转换,在 Azure 门户中创建工作区转换 DCR。
优化和监视转换
转换会针对使用 DCR 收集的每个记录运行 KQL 查询,因此它们必须高效运行。 转换执行时间会影响总体数据引入延迟,而运行时间过长的转换可能会影响数据收集管道的性能并导致数据丢失。 最佳转换的运行时间不应超过 1 秒。 请参阅优化 Azure Monitor 中的日志查询,获取有关在将查询作为转换实现之前测试查询的指导,并获取有关优化未高效运行的查询的建议。
重要
如果转换时间超过 20 秒,可能会丢失数据。
由于转换不以交互方式运行,因此必须持续监视转换,以确保转换正常运行并且不会花费过多的时间来处理数据。 请参阅在 Azure Monitor 中监视 DCR 数据收集和排查相关问题,详细了解用于监视转换运行状况和性能的日志和指标。 这包括识别 KQL 中发生的任何错误以及用于跟踪其运行持续时间的指标。
系统将自动收集以下转换指标,并应定期审查以验证转换是否仍在按预期运行。 创建指标警报规则,以在其中一个指标超过阈值时自动收到通知。
- 每分钟的日志转换持续时间
- 每分钟的日志转换错误数
启用 DCR 错误日志以跟踪转换或其他查询中发生的任何错误。 创建日志警报规则,以在将条目写入此表时自动收到通知。
指南
有多种方法可以创建转换,具体取决于数据收集方法。 下表列出了用于创建转换的不同方法的指导。
数据收集 | 参考 |
---|---|
日志引入 API | 使用 REST API 将数据发送到 Azure Monitor 日志(Azure 门户) 使用 REST API(Azure 资源管理器模板)将数据发送到 Azure Monitor 日志 |
具有 Azure Monitor 代理的虚拟机 | 向 Azure Monitor 日志添加转换 |
具有容器见解的 Kubernetes 群集 | 容器见解中的数据转换 |
Azure 事件中心 | 教程:将日志从 Azure 事件中心引入 Azure Monitor 日志(公共预览版) |
后续步骤
- 使用 Azure Monitor 代理创建数据收集规则以及与虚拟机的关联。