教程:在 Azure Monitor 日志中引入期间转换文本日志
使用引入时转换可以在将传入数据存储到 Log Analytics 工作区之前对其进行筛选或修改。 本文介绍如何编写一个用于转换文本日志数据的 KQL 查询,并将转换添加到数据收集规则。
本文所述的过程假设你已按照使用 Azure Monitor 代理收集文本日志中所述,从文本文件中引入了一些数据。 在本教程中,你将:
- 编写 KQL 查询以转换引入的数据。
- 修改目标表架构。
- 将转换添加到数据收集规则。
- 验证转换是否正常工作。
先决条件
如果要完成此过程,需要:
- Log Analytics 工作区,你在其中至少拥有参与者权限。
- 数据收集规则、数据收集终结点和自定义表,如使用 Azure Monitor 代理收集文本日志中所述。
- 一个 VM、虚拟机规模集或已启用 Arc 的本地服务器,用于将日志写入到文本文件。
文本文件要求:
- 存储在运行 Azure Monitor 代理的计算机的本地驱动器上。
- 用行尾进行描绘。
- 使用 ASCII 或 UTF-8 编码。 不支持其他格式,如 UTF-16。
- 不允许以新条目覆盖文件的循环日志记录、日志轮换,或者会移动文件并打开同名的新文件的重命名。
编写 KQL 查询以转换引入的数据
在 Log Analytics 中查看目标自定义表中的数据:
- 在 Azure 门户中,选择“Log Analytics 工作区”> 你的 Log Analytics 工作区 >“日志”。
- 针对自定义日志表运行基本查询以查看表数据。
使用查询窗口编写一个用于转换表中原始数据的查询并对其进行测试。
有关转换所支持的 KQL 运算符的信息,请参阅 Azure Monitor 中的转换结构。
注意
只可以对 TimeGenerated 和 RawData 这两个列应用转换。 其他列会在转换后自动添加到表中,在转换时不可用。 无法在转换中使用 _ResourceId 列。
示例
该示例使用基本 KQL 运算符将
RawData
列中的数据分析为名为Time Ingested
、RecordNumber
和RandomContent
的三个新列:extend
运算符添加新列。project
运算符将输出的格式设置为与目标表架构的列匹配:
MyTable_CL | extend d=todynamic(RawData) | project TimeGenerated,TimeIngested=tostring(d.Time), RecordNumber=tostring(d.RecordNumber), RandomContent=tostring(d.RandomContent), RawData
注意
以这种方式查询表数据不会实际修改表中的数据。 在你将转换查询添加到数据收集规则后,Azure Monitor 将在数据引入管道中应用转换。
将查询格式设置为单行,并将查询的第一行中的表名替换为单词
source
。例如:
source | extend d=todynamic(RawData) | project TimeGenerated,TimeIngested=tostring(d.Time),RecordNumber=tostring(d.RecordNumber), RandomContent=tostring(d.RandomContent), RawData
复制带格式的查询,以便可以将其粘贴到数据收集规则配置中。
修改自定义表以包含新列
根据转换查询在自定义表中添加或删除列。
上面的示例转换查询添加了类型为 string
的三个新列:
TimeIngested
RecordNumber
RandomContent
若要支持这种转换,请将这三个新列添加到自定义表中。
将转换应用于数据收集规则
检查转换是否正常工作
查看目标自定义表中的数据,并检查数据是否正确引入到修改的表中:
- 在 Azure 门户中,选择“Log Analytics 工作区”> 你的 Log Analytics 工作区 >“日志”。
- 针对自定义日志表运行基本查询以查看表数据。
后续步骤
了解有关以下方面的详细信息: