你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Monitor 中的示例转换
Azure Monitor 中的转换允许你在传入数据发送到 Log Analytics 工作区之前对其进行筛选或修改。 本文提供了常见场景的示例查询,你可以使用这些示例开始创建自己的转换。 有关测试这些转换并将其添加到数据收集规则 (DCR) 的详细信息,请参阅在 Azure Monitor 中创建转换。
降低数据成本
由于需要为任何发送到 Log Analytics 工作区的数据支付引入费用,因此需要筛选出所有不需要的数据来降低成本。
筛选数据行
使用 where
语句筛选符合特定要求的传入数据。 如果传入记录与该语句不匹配,则不会将记录发送到目标。 在以下示例中,仅收集严重性为 Critical
的记录。
source | where severity == "Critical"
筛选数据列
从数据源中移除不需要节省数据引入成本的列。 使用 project
语句指定输出中的列,或使用 project-away
仅指定要移除的列。 在以下示例中,RawData
列将从输出中移除。
source | project-away RawData
分析列中的重要数据
你可能有一列重要数据被埋没在过多的文本中。 仅保留有价值的数据并移除不需要的文本。 使用字符串函数(例如 substring
和 extract
)分析所需的数据。 还可以使用 parse
或 split
分析数据,以将单个列分解为多个值并选择所需的值。 然后使用 extend
创建包含已分析数据的新列,并使用 project-away
移除原始列。
警告
有关使用复杂分析命令的提示,请参阅拆分大型分析命令。
在以下示例中,RequestContext
列包含具有工作区 ResourceId 的 JSON。 parse_json
和 split
函数用于提取工作区的简单名称。 将为此值创建新列,然后移除其他列。
source
| extend Context = parse_json(RequestContext)
| extend Workspace_CF = tostring(Context['workspaces'][0])
| extend WorkspaceName_CF = split(Workspace_CF,"/")[8]
| project-away RequestContext, Context, Workspace_CF
将行发送到基本日志
将数据中需要基本查询功能的行发送到基本日志表,以降低引入成本。 有关如何将数据发送到多个表的详细信息,请参阅将数据发送到多个表。
删除敏感数据
你可能有一个数据源,用于发送不希望出于隐私或合规性原因而存储的信息。
筛选敏感信息
使用降低数据成本中所述的相同策略来筛选出包含敏感信息的整个行或特定列。 在以下示例中,ClientIP
列将从输出中移除。
source | project-away ClientIP
模糊处理敏感信息
使用字符串函数将 IP 地址或电话号码中的数字等信息替换为通用字符。 以下示例将电子邮件地址中的用户名替换为“*****”。
source | extend Email = replace_string(Email,substring(Email,0,indexof(Email,"@")),"*****")
发送到备用表
将敏感记录发送到具有不同基于角色的访问控制配置的备用表。 有关如何将数据发送到多个表的详细信息,请参阅将数据发送到多个表。
扩充数据
使用转换将信息添加到数据,从而提供业务上下文或稍后简化查询数据。 使用字符串函数从列中提取关键信息,然后使用 extend
语句向数据源添加新列。 以下示例会添加一个列,用于确定另一列中的 IP 地址是内部地址还是外部地址。
source | extend IpLocation = iff(split(ClientIp,".")[0] in ("10","192"), "Internal", "External")
设置目标数据的格式
你可能有数据源,该数据源以与目标表的结构不匹配的格式发送数据。 使用转换将数据重格式化为所需架构。
修改架构
使用命令(如 extend
和 project
)修改传入数据的架构以匹配目标表。 在以下示例中,将使用 KQL 函数将名为 TimeGenerated
的新列添加到传出数据,以返回当前时间。
source | extend TimeGenerated = now()
分析数据
使用 split
或 parse
运算符将数据分析到目标表中的多个列。 在以下示例中,传入数据具有一个名为 RawData
的逗号分隔的列,该列拆分为目标表的各个列。
source
| project d = split(RawData,",")
| project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])
警告
有关使用复杂分析命令的提示,请参阅拆分大型分析命令。