Azure Monitor 中数据收集规则 (DCR) 的结构

本文介绍 DCR 的 JSON 结构,适用于需要直接使用 DCR 定义的情况。

  • 有关使用本文中所述的 JSON 的详细信息,请参阅 “创建和编辑 DCR”。
  • 有关不同方案的示例,请参阅 Azure Monitor0>Sample DCR。

属性

下表描述了 DCR 顶层的属性。

资产 DESCRIPTION
description 用户定义的数据收集规则的可选说明。
dataCollectionEndpointId 如果在创建 DCR 时提供一个,则 DCR 使用的 数据收集终结点(DCE) 的资源 ID。 不使用 DCE 的 DCR 中不存在此属性。
endpoints 1 包含 DCR 终结点的 logsIngestionmetricsIngestion URL。 只有当 DCR 中的 kind 特性为 Direct 时,创建 DCR 时才会自动创建此部分及其属性。
immutableId 数据收集规则的唯一标识符。 创建 DCR 时,会自动创建此属性及其值。
kind 指定 DCR 用于的数据收集场景。 以下部分进一步介绍了此参数。
transformations (预览版)多阶段转换使用的命名转换管道数组。 每个条目定义标头处理器和有序处理器序列。 通过 dataSources 属性引用和 dataFlows 通过 transform 属性。 需要 API 版本 2025-05-11 或更高版本。 请参阅 转换

1 此属性并不是为 2024 年 3 月 31 日之前创建的 DCR 创建的。 在此日期之前创建的 DCR 需要指定 数据收集终结点 (DCE)dataCollectionEndpointId 属性。 如果要使用这些嵌入式 DCE,则必须创建新的 DCR。

种类

DCR 中的 kind 属性指定了 DCR 用于的集合的类型。 每种 DCR 具有不同的结构和属性。

下表列出了不同类型的 DCR 及其详细信息。

种类 DESCRIPTION
Direct 使用日志引入 API 直接引入。 仅当使用此种类值时,才会为 DCR 创建终结点。
AgentSettings 配置 Azure Monitor 代理参数。
Linux 从 Linux 计算机收集事件和性能数据。
PlatformTelemetry 导出平台指标。
Windows 从 Windows 计算机收集事件和性能数据。
WorkspaceTransforms 工作区转换 DCR。 此 DCR 不包括输入流。

DCR 数据流概述

DCR 的基本流如下图所示。 后续部分将介绍其中的每个组件。

说明 DCR 不同部分之间的关系的图示。

整个数据流通过 DCR 遵循以下顺序: 数据源输入流数据流目标。 并非所有 DCR 类型都使用每个元素。 下表显示了应用于每个 DCR 类型的元素。

DCR 类型 数据源 输入流 数据流 目的地
AMA DCR (LinuxWindows 是的 是的 是的 是的
直接引入 DCR (Direct No 是的 是的 是的
工作区转换 DCR (WorkspaceTransforms No No 是的 No

使用多阶段转换时,该 transformations 部分会添加在数据源阶段(客户端)或数据流阶段(引入端)应用的处理器管道,具体取决于所引用的命名转换的位置。

输入流

DCR 的输入流部分定义它收集的传入数据。 根据数据收集方案,可以采用两种类型的传入流。 大多数数据收集方案都使用其中一个输入流,而某些方案同时使用这两种方案。

注释

工作区转换 DCR 没有输入流。

输入流 DESCRIPTION
dataSources 已知参数类型。 此类型通常来自Azure Monitor代理处理的数据,并使用已知数据类型传送到Azure Monitor。
streamDeclarations 需要在 DCR 中定义自定义数据。

从日志引入 API 发送的数据使用 streamDeclaration 传入数据的架构,因为 API 发送自定义数据。

来自Azure Monitor代理(AMA)的文本日志是一个数据收集示例,需要 dataSourcesstreamDeclarations。 数据源包括用于连接到数据源的配置,并 streamDeclarations 定义传入数据的架构。

数据源

数据源是监视数据的唯一源,每个数据源都有其自己的格式和公开数据的方法。 每个数据源类型都有一组唯一的参数,必须为每个数据源配置这些参数。 数据源通常返回已知的数据类型,因此无需在 DCR 中定义架构。

例如,使用 Azure Monitor 代理(AMA)从 VM 收集的事件和性能数据使用数据源,例如 windowsEventLogsperformanceCounters。 为要收集的事件和性能计数器指定条件,但不需要定义数据本身的结构,因为此架构以潜在的传入数据而闻名。

常见数据源参数

所有数据源类型都共享下面的常见参数。

参数 DESCRIPTION
name 用于标识 DCR 中的数据源的名称。
streams 数据源收集的流列表。 如果此流是标准数据类型(如Windows事件),则流显示为 Microsoft-<TableName>。 如果是自定义类型,则流显示为 Custom-<TableName>
transform (预览版)要应用客户端的分区转换 transformations 的名称。 将此属性用于多阶段转换。

有效数据源类型

下表列出了当前可用的数据源类型。

数据源类型 DESCRIPTION 溪流 参数
eventHub 来自 Azure 事件中心的数据。 自定义1 consumerGroup - 要从中收集的事件中心的使用者组。
iisLogs Windows 计算机的 IIS 日志 Microsoft-W3CIISLog logDirectories - 在客户端上存储 IIS 日志的目录。
logFiles 虚拟机上的文本或 JSON 日志 自定义1 filePatterns - 要从客户端收集的日志文件的文件夹和文件模式。
format - jsontext
performanceCounters Windows 和 Linux 虚拟机的性能计数器 Microsoft-Perf
Microsoft-InsightsMetrics
samplingFrequencyInSeconds - 应采样性能数据的频率。
counterSpecifiers - 应收集的对象和计数器。
prometheusForwarder 从 Kubernetes 群集收集的 Prometheus 的数据。 Microsoft-PrometheusMetrics streams - 要收集的流
labelIncludeFilter - 标签包含筛选器的列表,作为名称-值对。 目前仅 microsoft_metrics_include_label 支持。
syslog Linux 虚拟机上的 Syslog 事件

在安全设备上以通用事件格式记录的事件
Microsoft-Syslog

Microsoft-CommonSecurityLog 适用于 CEF
facilityNames - 要收集的设施
logLevels - 要收集的日志级别
windowsEventLogs 虚拟机上的 Windows 事件日志 Microsoft-Event xPathQueries - XPaths 指定应收集的事件的条件。
extension Azure Monitor 代理使用的基于扩展的数据源。 因扩展而异 extensionName - 扩展的名称
extensionSettings - 扩展程序所需的各项设置值

1 这些数据源同时使用数据源和流声明,因为它们收集的数据架构可能有所不同。 数据源中使用的流应该是流声明中定义的自定义流。

流声明

声明发送到Log Analytics工作区的不同类型的数据。 每个流都是一个对象,其键表示流名称,该名称必须以 Custom- 开头。 该流包含你发送的 JSON 数据中包含的顶级属性的完整列表。 发送到终结点的数据的形状不需要与目标表的形状匹配。 相反,应用在输入数据上的转换的结果需要与目标的形状相匹配。

数据类型

将以下数据类型分配给属性:

  • string
  • int
  • long
  • real
  • boolean
  • dynamic
  • datetime

guid 类型在流声明中不可用。 如果源数据包含 GUID 值,请将这些列声明为 string。 表 API 支持该 guid 类型,但值实际上以字符串的形式存储和查询。 有关详细信息,请参阅 Azure Monitor Logs 中的 Column 数据类型

目的地

在节中 destinations 发送数据的每个目标都包含一个条目。 将这些目标与节中的 dataFlows 输入流匹配。

常见目标参数

参数 DESCRIPTION
name 用于标识 dataSources 部分中的目标的名称。

有效目标

下表列出了可用目标。

目的地 DESCRIPTION 必需的参数
azureDataExplorer Azure 数据资源管理器 resourceId - ADX 群集的资源 ID
databaseName - ADX 群集中数据库的名称
ingestionUri - 群集的引入 URI
azureMonitorMetrics Azure Monitor 指标 不需要进行任何配置,因为该订阅只有一个指标存储库。
logAnalytics Log Analytics 工作区 workspaceResourceId - 工作区的资源 ID。
workspaceID - 工作区的 ID

此参数仅指定工作区,而不是发送数据的表。 如果它是已知的目标,则无需指定表。 对于自定义表,请在数据源中指定表。

重要

一个流只能发送到 DCR 中的一个 Log Analytics 工作区。 单个流可以有多个 dataFlow 条目,前提是它们使用同一工作区中的不同表。 如果需要从单个数据流向多个 Log Analytics 工作区发送数据,请为每个工作区创建单独的 DCR。

数据流

数据流与目标匹配输入流。 每个数据源可以选择指定转换,在某些情况下,请在Log Analytics工作区中指定特定表。

数据流属性

部分 DESCRIPTION
streams 在输入流部分中定义的一个或多个流。 如果要将多个数据源发送到同一目标,请在单个数据流中包含多个流。 仅当数据流包含转换时,才使用单个流。 如果要将特定数据源发送到同一Log Analytics工作区中的多个表,请对多个数据流使用一个流。
destinations 上面 destinations 部分中的一个或多个目标。 多宿主方案允许多个目标。
transform (预览版)在引入时要应用的节转换 transformations 的名称。 与 transformKql 互斥。
transformKql 应用于传入流的可选转换。 转换必须了解目标表架构中传入数据和输出数据的架构。 如果使用转换,数据流应仅使用单个流。 与 transform 互斥。
outputStream 描述将在 destination 属性下指定的工作区中接收数据的表。 数据被引入到标准表中时,outputStream 的值采用 Microsoft-[tableName] 格式;将数据引入自定义表时采用 Custom-[tableName] 格式。 每个流只允许有一个目标。

此属性不用于 Azure Monitor 中的已知数据源,例如事件和性能数据,因为这些数据源会发送到预定义表。

Transformations

重要

多阶段转换目前处于公开预览阶段。 本部分需要 API 版本 2025-05-11 或更高版本。 有关适用于 beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 Azure 预览补充使用条款

transformations 节定义由 dataSourcesdataFlows. 引用的可重用命名转换。 每个转换定义按顺序应用于数据的 处理器 管道。 有关概念性的详细信息 ,请参阅多阶段转换

"transformations": [
    {
        "name": "my_transform",
        "headerProcessor": {
            "processor": "header.Syslog",
            "configuration": { }
        },
        "processors": [
            {
                "processor": "filter.Basic",
                "configuration": {
                    "any": [
                        {
                            "all": [
                                {
                                    "columnName": "Facility",
                                    "operator": "==",
                                    "value": "auth"
                                }
                            ]
                        }
                    ]
                }
            }
        ]
    }
]

转换对象属性

资产 类型 必需 DESCRIPTION
name 字符串 是的 此转换的唯一名称。 由 dataSources[].transformdataFlows[].transform. 引用。
headerProcessor 对象 是的 建立起始架构的标头处理器。 必须是第一个元素。 请参阅 标头处理器
processors 数组 No 在标头之后应用的转换处理器的有序顺序。 请参阅 处理器类型

Processor 对象

每个处理器都是描述特定数据转换操作的声明性构建基块。

{
    "processor": "{family}.{Name}",
    "configuration": { }
}
资产 类型 必需 DESCRIPTION
processor 字符串 是的 采用格式 {family}.{Name}的处理器名称。 区分大小写。 例如,filter.Basic
configuration 对象 是的 处理器特定的配置。 请参阅各个处理器部分。

处理器类型

下表显示了客户端和引入端可用的处理器。

  • 客户端标头处理器用于分配给数据源的客户端转换。 由于已知传入数据的架构,因此不需要配置。
  • 引入端标头处理器用于向数据流分配的引入端转换。
处理器名称 家庭 客户端 引入端
header.Syslog 标题 是的 No
header.WindowsEvents 标题 是的 No
header.WindowsPerformanceCounters 标题 是的 No
header.LinuxPerformanceCounters 标题 是的 No
header.TextLog 标题 是的 No
header.IISLog 标题 是的 No
header.WindowsFirewallLog 标题 是的 No
header.StandardStream 标题 No 是的
header.CustomStream 标题 No 是的
filter.Basic Filter 是的 是的
map.Rename 地图 是的 是的
map.Drop 地图 是的 是的
parse.JsonPath Parse 是的 是的
parse.XmlPath Parse 是的 是的
parse.CEFAttribute Parse 是的 是的
aggregate.Basic Aggregate 是的 是的
enrich.DNSLookup 扩充 是的 是的
transform.KQL 转换 No 是的

标头处理器

标头处理器接收原始数据,并将其转换为已知的架构化表格格式。 标头处理器必须是任何转换中的第一个处理器。

头。Syslog

syslog 数据源的客户端标头。

输出架构:
类型
TimeGenerated 日期/时间
设施 字符串
SeverityNumber int
EventTime 日期/时间
主机IP地址 字符串
消息 字符串
ProcessId 字符串
Severity 字符串
Host 字符串
Ident 字符串
Timestamp 日期/时间

头。WindowsEvents

Windows事件日志数据源的客户端标头。

输出架构:
类型
TimeGenerated 日期/时间
TimeCreated 日期/时间
发布者ID (PublisherId) 字符串
出版社名称 字符串
Channel 字符串
LoggingComputer 字符串
EventNumber int
事件类别 int
事件级别 字符串
UserName 字符串
RawXml 字符串
EventDescription 字符串
RenderingInfo 字符串
EventRecordId int

头。WindowsPerformanceCounters

Windows性能计数器数据源的客户端标头。

输出架构:
类型
TimeGenerated 日期/时间
CounterName 字符串
CounterValue real
SampleRate int
Counter 字符串
Instance 字符串

头。LinuxPerformanceCounters

Linux 性能计数器数据源的客户端标头。

输出架构:
类型
TimeGenerated 日期/时间
Timestamp 日期/时间
CounterName 字符串
对象名称 字符串
实例名称 字符串
价值 int
Host 字符串

头。TextLog

自定义文本文件的客户端标头。

输出架构:
类型
TimeGenerated 日期/时间
FilePath 字符串
RawData 字符串
电脑 字符串

头。IISLog

IIS 日志数据源的客户端标头。

输出架构:
类型
TimeGenerated 日期/时间
s_sitename 字符串
s_computername 字符串
s_ip 字符串
cs_method 字符串
cs_uri_stem 字符串
cs_uri_query 字符串
s_port int
cs_username 字符串
c_ip 字符串
cs_version 字符串
cs_User_Agent_ 字符串
cs_Cookie_ 字符串
cs_Referer_ 字符串
cs_host 字符串
sc_status int
sc_substatus int
sc_win32_status int
sc_bytes int
cs_bytes int
time_taken int

头。WindowsFirewallLog

Windows防火墙日志数据源的客户端标头。

输出架构:
类型
TimeGenerated 日期/时间
date 字符串
时间 字符串
操作 字符串
协议 字符串
src_ip 字符串
dst_ip 字符串
src_port 字符串
dst_port 字符串
size 字符串
tcpflags 字符串
tcpsyn 字符串
tcpack 字符串
tcpwin 字符串
icmptype 字符串
icmpcode 字符串
信息 字符串
路径 字符串
pid 字符串

头。StandardStream

当输入是标准流(如 Microsoft-SyslogMicrosoft-Event)时使用。

{
    "processor": "header.StandardStream",
    "configuration": {
        "streamId": "Microsoft-Syslog"
    }
}
资产 类型 必需 DESCRIPTION
streamId 字符串 是的 标准流的标识符,例如 Microsoft-Syslog

输出架构:与相应的标准Log Analytics表架构相同。 请参阅 Log Analytics 表参考,了解按资源类型显示的架构。

头。CustomStream

输入是在定义 streamDeclarations自定义流时使用的。

{
    "processor": "header.CustomStream",
    "configuration": {
        "streamId": "Custom-MyStream"
    }
}
资产 类型 必需 DESCRIPTION
streamId 字符串 是的 自定义流的标识符。 必须与在 . 中 streamDeclarations定义的流匹配。

标头处理器之后

这些处理器在转换管道中的标头处理器之后运行。 并非所有处理器在两个阶段都可用。 请参阅 处理器适用性表 ,确定客户端、引入端或两者均支持哪些处理器。

滤波器。基本

根据条件评估删除整个记录。 条件的结构为 OR 组 AND 组。

{
    "processor": "filter.Basic",
    "configuration": {
        "any": [
            {
                "all": [
                    {
                        "columnName": "Facility",
                        "operator": "==",
                        "value": "auth"
                    }
                ]
            }
        ]
    }
}
资产 类型 必需 DESCRIPTION
any AND 组数组 是的 顶级 OR 组。 如果任何 AND 组的计算结果为 true,则会保留记录。

每个 AND 组都有一个 all 属性,其中包含条件对象的数组:

资产 类型 必需 DESCRIPTION
columnName 字符串 是的 要计算的列。
operator 字符串 是的 比较运算符。 字符串:==、、!=contains.!contains。 数字:==、、!=><>=<=
value string、number 或 boolean 是的 要与之进行比较的引用值。

输出架构:与输入相同。 记录被删除,而不是列。

地图。重 命名

重命名列并根据需要更改其类型。

{
    "processor": "map.Rename",
    "configuration": {
        "all": [
            {
                "columnName": "OldName",
                "nameAs": "NewName",
                "typeAs": "string"
            }
        ]
    }
}
资产 类型 必需 DESCRIPTION
columnName 字符串 是的 要重命名或 typecast 的现有列。
nameAs 字符串 No 新列名。 如果省略,则列保留其名称。
typeAs 字符串 No 目标类型:string、、intlongrealbooldatetime。 如果强制转换失败, null 则返回。

输出架构:与输入相同,但已重命名的列和具有已更改类型的列除外。

地图。下降

从数据中删除一个或多个列。

{
    "processor": "map.Drop",
    "configuration": {
        "columnNames": ["Column1", "Column2"]
    }
}
资产 类型 必需 DESCRIPTION
columnNames 字符串数组 是的 要删除的列。

输出架构:与输入相同,删除的列除外。

解析。JsonPath

分析列中 JSON 格式的字符串,并将指定的键提取到新列中。

{
    "processor": "parse.JsonPath",
    "configuration": {
        "columnName": "EventData",
        "all": [
            {
                "path": "$.user.name",
                "nameAs": "UserName",
                "typeAs": "string"
            }
        ]
    }
}
资产 类型 必需 DESCRIPTION
columnName 字符串 是的 包含 JSON 字符串的列。
all 提取对象的数组 是的 要提取的密钥。

提取对象属性:

资产 类型 必需 DESCRIPTION
path 字符串 是的 密钥的 JSON 路径,例如 $.key$.nested.key
nameAs 字符串 是的 新的输出列名称。
typeAs 字符串 No 目标类型。 如果强制转换失败, null 则返回。

输出架构:与输入相同,以及每个提取键的新列。

解析。XmlPath

分析列中 XML 格式的字符串,并将指定的元素提取到新列中。

{
    "processor": "parse.XmlPath",
    "configuration": {
        "columnName": "RawXml",
        "all": [
            {
                "path": "/Event/System/EventID",
                "nameAs": "EventID",
                "typeAs": "int"
            }
        ]
    }
}

配置属性匹配 parse.JsonPath,但 path 使用 XPath 语法(例如, /Event/System/EventID/Event/EventData/Data[@Name='SubjectUserName'])。

输出架构:与输入相同,以及每个提取元素的新列。

注释

有效的 XPath 语法由每个阶段分析程序库控制。 只能在特定的执行位置支持高级 XPath 表达式。

解析。CEFAttribute

分析列中的 CEF(通用事件格式)数据,并将指定的字段提取到新列中。

{
    "processor": "parse.CEFAttribute",
    "configuration": {
        "columnName": "Message",
        "all": [
            {
                "path": "deviceAction",
                "nameAs": "Action",
                "typeAs": "string"
            }
        ]
    }
}

配置属性匹配 parse.JsonPath,但指定 CEF 密钥名称除外 path

输出架构:与输入相同,以及每个提取字段的新列。

骨料。基本

使用具有分组维度的聚合运算符汇总记录。

{
    "processor": "aggregate.Basic",
    "configuration": {
        "batchingSettings": {
            "timeWindow": "5m",
            "maxBatchRows": 1000
        },
        "aggregates": [
            {
                "columnName": "CounterValue",
                "operator": "avg",
                "nameAs": "AvgValue"
            },
            {
                "operator": "count",
                "nameAs": "RecordCount"
            }
        ],
        "dimensionColumns": ["Host", "CounterName"]
    }
}
资产 类型 必需 DESCRIPTION
batchingSettings.timeWindow 字符串 是的 每个聚合批处理的时间跨度,例如 5m1h
batchingSettings.maxBatchRows int 是的 每个聚合批处理的最大行数。
aggregates 数组 是的 聚合定义。
dimensionColumns 字符串数组 是的 要分组依据的列。 仅 string 支持类型。

聚合项属性:

资产 类型 必需 DESCRIPTION
columnName 字符串 No 要聚合的列。 count运算符不需要。
operator 字符串 是的 聚合函数:sum、、avgminmax. count
nameAs 字符串 是的 聚合值的输出列名称。

输出架构:聚合完全更改输出架构。 输出仅包含聚合列和维度列。 将聚合数据路由到单独的自定义表。

丰富。DNSLookup

查找列中的 IP 地址并添加 DNS 名称列。

{
    "processor": "enrich.DNSLookup",
    "configuration": {
        "columnName": "IPAddress",
        "nameAs": "DNSName"
    }
}
资产 类型 必需 DESCRIPTION
columnName 字符串 是的 包含要查找的 IP 地址的列。
nameAs 字符串 是的 解析的 DNS 名称的新输出列名称。

输出架构:与输入相同,以及解析的 DNS 名称的新列。 DNS 解析是尽力而为。 如果查找失败,则输出列包含 null

变换。KQL

为高级方案应用自定义 KQL 表达式。 此处理器仅引入端,提供对 KQL 的有限验证。 数据流中使用的 transformKql 现有 DCR 具有此处理器的直接迁移路径。

{
    "processor": "transform.KQL",
    "configuration": {
        "expression": "source | where SeverityNumber >= 4 | extend EnrichedMsg = strcat(Host, ': ', Message)"
    }
}
资产 类型 必需 DESCRIPTION
expression 字符串 是的 应用于输入数据的 KQL 查询字符串。

输出架构:由 KQL 定义,无法静态验证。