你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
高级安全信息模型 (ASIM) 用户在查询中使用 统一分析程序 而不是表名,以规范化格式查看数据,并在查询中包含与架构相关的所有数据。 统一分析器反过来使用 特定于源分析程序 来处理每个源的特定详细信息。
Microsoft Sentinel为许多数据源提供特定于源的内置分析程序。 在以下情况下,你可能想要修改或 开发这些特定于源的分析程序:
当设备提供符合 ASIM 架构的事件,但设备的源特定分析程序和相关架构在Microsoft Sentinel中不可用时。
当 ASIM 源特定的分析程序可用于设备时,但设备发送事件的方法或格式与 ASIM 分析程序预期的不同。 例如:
源设备可能配置为以非标准方式发送事件。
你的设备版本可能与 ASIM 分析程序支持的版本不同。
中间系统可能会收集、修改和转发事件。
若要了解分析器如何适应 ASIM 体系结构,请参阅 ASIM 体系结构图。
自定义 ASIM 分析器开发过程
以下工作流介绍了开发自定义 ASIM、特定于源分析程序的高级步骤:
标识从源发送的事件所表示的架构。 有关详细信息,请参阅 架构概述。
将源 事件字段映射到标识的架构。
为源开发 一个或多个 ASIM 分析程序。 需要针对与源相关的每个架构开发筛选分析器和无参数分析程序。
测试 分析程序。
将分析程序部署到Microsoft Sentinel工作区。
更新相关的 ASIM 统一分析程序以引用新的自定义分析程序。 有关详细信息,请参阅 管理 ASIM 分析程序。
你可能还希望将 分析程序贡献 到主要 ASIM 分发。 参与分析程序也可以作为内置分析程序在所有工作区中提供。
本文将指导你完成该过程的开发、测试和部署步骤。
提示
另请观看有关Microsoft Sentinel规范化分析器和规范化内容的深入探讨网络研讨会,或查看相关的幻灯片组。 有关详细信息,请参阅后续步骤。
收集示例日志
若要构建有效的 ASIM 分析程序,需要一组具有代表性的日志,在大多数情况下,这些日志需要设置源系统并将其连接到Microsoft Sentinel。 如果没有可用的源设备,云即用即付服务允许你部署许多设备进行开发和测试。
此外,查找供应商文档和日志示例有助于加快开发速度,并通过确保广泛的日志格式覆盖面来减少错误。
一组有代表性的日志应包括:
- 具有不同事件结果的事件。
- 具有不同响应操作的事件。
- 用户名、主机名和 ID 以及需要值规范化的其他字段的不同格式。
提示
使用同一架构的现有分析程序启动新的自定义分析程序。 使用现有分析程序对于筛选分析程序确保它们接受架构所需的所有参数尤其重要。
规划映射
在开发分析程序之前,请将源事件或事件中可用的信息映射到标识的架构:
- 映射所有必填字段,最好也是建议字段。
- 尝试将源中的任何可用信息映射到规范化字段。 如果作为所选架构的一部分不可用,请考虑映射到其他架构中可用的字段。
- 将源中字段的值映射到 ASIM 允许的规范化值。 原始值存储在单独的字段中,例如
EventOriginalResultDetails。
开发分析程序
为每个相关架构开发筛选和无参数分析程序。
自定义分析程序是在“Microsoft Sentinel日志”页中开发的 KQL 查询。 分析器查询包含三个部分:
滤波器>解析>准备字段
筛选
筛选相关记录
在许多情况下,Microsoft Sentinel 中的表包含多种类型的事件。 例如:
- Syslog 表包含来自多个源的数据。
- 自定义表可能包含来自单个源的信息,该源提供多个事件类型,并且可以适合各种架构。
因此,分析程序应首先仅筛选与目标架构相关的记录。
KQL 中的筛选是使用 运算符完成的 where 。 例如, Sysmon 事件 1 报告进程创建,因此规范化为 ProcessEvent 架构。
Sysmon 事件 1 事件是表的Event一部分,因此请使用以下筛选器:
Event | where Source == "Microsoft-Windows-Sysmon" and EventID == 1
重要
分析程序不应按时间进行筛选。 使用分析器的查询将应用时间范围。
使用监视列表按源类型进行筛选
在某些情况下,事件本身不包含允许筛选特定源类型的信息。
例如,Infoblox DNS 事件作为 Syslog 消息发送,很难与从其他源发送的 Syslog 消息区分开来。 在这种情况下,分析程序依赖于定义相关事件的源列表。 此列表在 Sources_by_SourceType 监视列表中维护。
若要在分析器中使用 ASimSourceType 监视列表,请使用 _ASIM_GetSourceBySourceType 分析程序筛选部分中的 函数。 例如,Infoblox DNS 分析程序在筛选部分中包括以下内容:
| where Computer in (_ASIM_GetSourceBySourceType('InfobloxNIOS'))
若要在分析器中使用此示例,请:
将 替换为
Computer包含源源信息的字段的名称。 对于基于 Syslog 的任何分析程序,可以将其保留Computer为 。将
InfobloxNIOS令牌替换为为分析程序选择的值。 通知分析器用户,他们必须使用所选值以及发送此类型的事件的源列表更新ASimSourceType监视列表。
基于分析程序参数进行筛选
开发 筛选分析程序时,请确保分析程序接受相关架构的筛选参数,如该架构的参考文章中所述。 使用现有分析程序作为起点可确保分析程序包含正确的函数签名。 在大多数情况下,对于同一架构的筛选分析程序,实际筛选代码也类似。
筛选时,请确保:
- 使用物理字段在分析之前进行筛选。 如果筛选的结果不够准确,请在分析后重复测试以微调结果。 有关详细信息,请参阅 筛选优化。
- 如果未定义参数,并且仍具有默认值,则不要进行筛选。
以下示例演示如何对字符串参数(默认值通常为“*”)和列表参数(默认值通常为空列表)实现筛选。
srcipaddr=='*' or ClientIP==srcipaddr
array_length(domain_has_any) == 0 or Name has_any (domain_has_any)
请参阅 Kusto 文档中有关以下项的详细信息:
筛选优化
若要确保分析程序的性能,请注意以下筛选建议:
- 始终筛选内置字段,而不是分析字段。 虽然使用分析字段有时更容易进行筛选,但会极大地影响性能。
-
使用提供优化性能的运算符。 特别是
==、has和startswith。 使用 或matches regex等contains运算符也会显著影响性能。
性能筛选建议可能并不总是容易遵循。 例如, 使用 has 的准确度不如 contains。 在其他情况下,匹配内置字段(如 SyslogMessage)的准确度不如比较提取的字段(如 DvcAction)。 在这种情况下,我们建议你仍使用性能优化运算符对内置字段进行预筛选,并在分析后使用更准确的条件重复筛选。
有关示例,请参阅以下 Infoblox DNS 分析程序代码片段。 分析程序首先检查 SyslogMessage 字段 has 是否为 单词 client。 但是,术语可能在消息中的不同位置使用,因此在分析 Log_Type 字段后,分析程序会再次检查单词 client 是否确实是字段的值。
Syslog | where ProcessName == "named" and SyslogMessage has "client"
…
| extend Log_Type = tostring(Parser[1]),
| where Log_Type == "client"
注意
分析程序不应按时间进行筛选,因为使用分析器的查询已经筛选了时间。
解析
查询选择相关记录后,可能需要对其进行分析。 通常,如果在单个文本字段中传达多个事件字段,则需要分析。
下面列出了执行分析的 KQL 运算符,按其性能优化进行排序。 第一个提供最优化的性能,而最后一个提供最优化的性能。
| 运算符/函数 () | 说明 |
|---|---|
| split () 函数 | 分析带分隔值的字符串。 |
| parse_csv () 函数 | 分析格式为 CSV 的值字符串, (逗号分隔值) 行。 |
| parse-kv 运算符 | 从字符串表达式中提取结构化信息,并表示键/值形式的信息。 |
| parse 运算符 | 使用模式分析任意字符串中的多个值,该模式可以是性能更佳的简化模式,也可以是正则表达式。 |
| extract_all () 函数 | 使用正则表达式分析任意字符串中的单个值。
extract_all 与后者使用正则表达式时的性能 parse 类似。 |
| extract () 函数 | 使用正则表达式从任意字符串中提取单个值。 在需要单个值时,使用 extract 提供的性能比 parse 或 extract_all 更好。 但是,对同一源字符串使用 多次激活 extract 的效率低于单个 parse 或 extract_all ,应避免。 |
| parse_json () 函数 | 分析格式为 JSON 的字符串中的值。 如果只需要 JSON 中的几个值,请使用 parse、 extract或 extract_all 提供更好的性能。 |
| parse_xml () 函数 | 分析格式为 XML 的字符串中的值。 如果只需要 XML 中的几个值,则使用 parse、 extract或 extract_all 提供更好的性能。 |
规范
映射字段名称
最简单的规范化形式是将原始字段重命名为其规范化名称。 为此,请使用 运算符 project-rename 。 使用项目重命名可确保字段仍作为物理字段进行管理,并且处理字段的性能更高。 例如:
| project-rename
ActorUserId = InitiatingProcessAccountSid,
ActorUserAadId = InitiatingProcessAccountObjectId,
ActorUserUpn = InitiatingProcessAccountUpn,
规范化字段的格式和类型
在许多情况下,需要规范化提取的原始值。 例如,在 ASIM 中,MAC 地址使用冒号作为分隔符,而源可能会发送以连字符分隔的 MAC 地址。 用于转换值的主要运算符是 extend,以及一组广泛的 KQL 字符串、数字和日期函数。
此外,确保分析器输出字段与架构中定义的类型匹配对于分析程序工作至关重要。 例如,可能需要将表示日期和时间的字符串转换为 datetime 字段。 和 等todatetimetohex函数在这些情况下很有用。
例如,原始唯一事件 ID 可以作为整数发送,但 ASIM 要求该值为字符串,以确保数据源之间的广泛兼容性。 因此,在分配源字段时,请使用 extend 和 tostring 而不是 project-rename:
| extend EventOriginalUid = tostring(ReportId),
派生字段和值
提取源字段的值后,可能需要映射到为目标架构字段指定的值集。 函数 iff、 case和 lookup 有助于将可用数据映射到目标值。
例如,Microsoft DNS 分析程序使用 iff 语句基于事件 ID 和响应代码分配EventResult字段,如下所示:
extend EventResult = iff(EventId==257 and ResponseCode==0 ,'Success','Failure')
若要映射多个值,请使用 datatable 运算符定义映射,并使用 lookup 执行映射。 例如,某些源报告数字 DNS 响应代码和网络协议,而架构要求为两者使用更常见的文本标签表示形式。 以下示例演示如何使用 datatable 和 lookup派生所需的值:
let NetworkProtocolLookup = datatable(Proto:real, NetworkProtocol:string)[
6, 'TCP',
17, 'UDP'
];
let DnsResponseCodeLookup=datatable(DnsResponseCode:int,DnsResponseCodeName:string)[
0,'NOERROR',
1,'FORMERR',
2,'SERVFAIL',
3,'NXDOMAIN',
...
];
...
| lookup DnsResponseCodeLookup on DnsResponseCode
| lookup NetworkProtocolLookup on Proto
请注意,当映射只有两个可能的值时,查找也很有用且高效。
当映射条件比较复杂时,请合并 iff、 case和 lookup。 下面的示例演示如何合并 lookup 和 case。
lookup如果找不到查找值,则上面的示例在 字段中DnsResponseCodeName返回一个空值。 下面的示例 case 通过使用操作的结果 lookup (如果可用)并指定其他条件来扩充它。
| extend DnsResponseCodeName =
case (
DnsResponseCodeName != "", DnsResponseCodeName,
DnsResponseCode between (3841 .. 4095), 'Reserved for Private Use',
'Unassigned'
)
Microsoft Sentinel为常见查找值提供了方便的函数。 例如, DnsResponseCodeName 可以使用以下函数之一实现上述查找:
| extend DnsResponseCodeName = _ASIM_LookupDnsResponseCode(DnsResponseCode)
| invoke _ASIM_ResolveDnsResponseCode('DnsResponseCode')
第一个选项接受要查找的值作为参数,并允许你选择输出字段,因此作为常规查找函数很有用。 第二个选项更适用于分析程序,采用源字段的名称作为输入,并更新所需的 ASIM 字段,在本例 DnsResponseCodeName中为 。
有关 ASIM 帮助函数的完整列表,请参阅 ASIM 函数
扩充字段
除了源中可用的字段外,生成的 ASIM 事件还包括分析程序应生成的扩充字段。 在许多情况下,分析程序可以为字段分配常量值,例如:
| extend
EventCount = int(1),
EventProduct = 'M365 Defender for Endpoint',
EventVendor = 'Microsoft',
EventSchemaVersion = '0.1.0',
EventSchema = 'ProcessEvent'
分析程序应设置的另一种类型的扩充字段是类型字段,它们指定存储在相关字段中的值的类型。 例如, SrcUsernameType 字段指定存储在字段中的值 SrcUsername 的类型。 可以在 实体说明中找到有关类型字段的详细信息。
在大多数情况下,还会为类型分配一个常量值。 但是,在某些情况下,必须根据实际值确定类型,例如:
DomainType = iif (array_length(SplitHostname) > 1, 'FQDN', '')
Microsoft Sentinel提供了用于处理扩充的有用函数。 例如,使用以下函数根据字段中的值自动分配字段 SrcHostnameComputer、 SrcDomainSrcDomainType 和 SrcFQDN 。
| invoke _ASIM_ResolveSrcFQDN('Computer')
此函数将设置字段,如下所示:
| 计算机字段 | 输出字段 |
|---|---|
| server1 | SrcHostname: server1 SrcDomain、SrcDomainType、SrcFQDN 全部为空 |
| server1.microsoft.com | SrcHostname: server1 SrcDomain:microsoft.com SrcDomainType:FQDN SrcFQDN:server1.microsoft.com |
函数 _ASIM_ResolveDstFQDN 并 _ASIM_ResolveDvcFQDN 执行填充相关 Dst 和 Dvc 字段的类似任务。 有关 ASIM 帮助函数的完整列表,请参阅 ASIM 函数
选择结果集中的字段
分析程序可以选择结果集中的字段。 删除不需要的字段可避免规范化字段和剩余源字段之间的混淆,从而提高性能并提高清晰度。
以下 KQL 运算符用于选择结果集中的字段:
| 运算符 | 说明 | 何时在分析器中使用 |
|---|---|---|
| project-away | 删除字段。 | 用于 project-away 要从结果集中删除的特定字段。 建议不要从结果集中删除未规范化的原始字段,除非它们会造成混淆或非常大,并且可能会影响性能。 |
| 项目 | 选择之前存在或作为语句的一部分创建的字段,并删除所有其他字段。 | 不建议在分析器中使用,因为分析程序不应删除未规范化的任何其他字段。 如果需要删除特定字段(例如分析期间使用的临时值),请使用 project-away 从结果中删除它们。 |
例如,在分析自定义日志表时,请使用以下命令删除仍具有类型描述符的剩余原始字段:
| project-away
*_d, *_s, *_b, *_g
处理分析变体
重要
不同的变体表示 不同的 事件类型,通常映射到不同的架构,开发单独的分析程序
在许多情况下,事件流中的事件包括需要不同分析逻辑的变体。 若要分析单个分析器中的不同变体,请使用 条件语句(如 iff 和 case),或使用联合结构。
若要使用 union 处理多个变体,请为每个变体创建一个单独的函数,并使用 union 语句合并结果:
let AzureFirewallNetworkRuleLogs = AzureDiagnostics
| where Category == "AzureFirewallNetworkRule"
| where isnotempty(msg_s);
let parseLogs = AzureFirewallNetworkRuleLogs
| where msg_s has_any("TCP", "UDP")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
":" srcPortNumber:int
…
| project-away msg_s;
let parseLogsWithUrls = AzureFirewallNetworkRuleLogs
| where msg_s has_all ("Url:","ThreatIntel:")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
" to " dstIpAddr:string
...
union parseLogs, parseLogsWithUrls…
若要避免重复事件和过度处理,请确保每个函数首先使用本机字段进行筛选,仅筛选要分析的事件。 此外,如果需要,请在联合之前在每个分支上使用 project-away。
部署分析程序
通过将分析程序复制到“Azure监视日志”页并将查询保存为函数,手动部署分析器。 此方法可用于测试。 有关详细信息,请参阅 创建函数。
若要部署大量分析程序,建议使用分析器 ARM 模板,如下所示:
基于每个架构的相关模板创建 YAML 文件,并在其中包括查询。 从与架构和分析程序类型、筛选或无参数相关的 YAML 模板 开始。
使用 ASIM YAML 到 ARM 模板转换器 将 YAML 文件转换为 ARM 模板。
如果部署更新,请使用门户或 函数删除 PowerShell 工具删除旧版本的函数。
使用 Azure 门户 或 PowerShell 部署模板。
还可以使用链接模板将多个模板合并到单个部署过程
提示
ARM 模板可以组合不同的资源,因此分析程序可以与连接器、分析规则或监视列表一起部署,例如一些有用的选项。 例如,分析程序可以引用随它一起部署的监视列表。
测试分析程序
本部分介绍 ASIM 提供的用于测试分析器的测试工具。 也就是说,分析器是代码,有时很复杂,除了自动测试之外,还建议使用标准质量保证做法(如代码评审)。
安装 ASIM 测试工具
若要测试 ASIM,请将 ASIM 测试工具部署到Microsoft Sentinel工作区,其中:
- 分析程序已部署。
- 分析程序使用的源表可用。
- 分析程序使用的源表填充了各种相关事件的集合。
验证输出架构
若要确保分析程序生成有效的架构,请使用 ASIM 架构测试程序,方法是在“Microsoft Sentinel日志”页中运行以下查询:
<parser name> | getschema | invoke ASimSchemaTester('<schema>')
按如下所示处理结果:
| 错误 | 操作 |
|---|---|
| 缺少必填字段 [<字段>] | 将 字段添加到分析程序。 在许多情况下,这将是派生值或常量值,而不是源中已有的字段。 |
| 当必填列 [<Field>] 存在时,缺少字段 [<Field>] 是必需的 | 将 字段添加到分析程序。 在许多情况下,此字段表示它引用的现有列的类型。 |
| 当列 [<Field>] 存在时,缺少字段 [<Field>] 是必需的 | 将 字段添加到分析程序。 在许多情况下,此字段表示它引用的现有列的类型。 |
| 缺少强制别名 [<Field>] 为现有列 [<Field>] 添加别名 | 将别名添加到分析器 |
| 缺少建议的别名 [<字段>] 为现有列 [<字段>] 添加别名 | 将别名添加到分析器 |
| 缺少可选别名 [<Field>] 为现有列 [<Field>] 添加别名 | 将别名添加到分析器 |
| 缺少必需的别名 [<Field>] 别名缺少列 [<Field>] | 此错误伴随着别名字段的类似错误。 更正别名字段错误,并将此别名添加到分析程序。 |
| 字段 [<Field>] 的类型不匹配。 它当前为 [<Type>] ,应为 [<Type>] | 确保规范化字段的类型正确,通常是通过使用 转换函数 (例如 tostring)。 |
| 信息 | 操作 |
|---|---|
| 缺少建议的字段 [<字段>] | 请考虑将此字段添加到分析程序。 |
| 信息 | 操作 |
|---|---|
| 缺少建议的别名 [<Field>] 别名不存在的列 [<Field>] | 如果将别名字段添加到分析程序,请确保也添加此别名。 |
| 缺少可选别名 [<Field>] 别名不存在列 [<Field>] | 如果将别名字段添加到分析程序,请确保也添加此别名。 |
| 缺少可选字段 [<Field>] | 虽然通常缺少可选字段,但有必要查看列表,以确定是否可以从源映射任何可选字段。 |
| 额外非规范化字段 [<字段>] | 虽然非规范化字段有效,但值得查看列表以确定任何未规范化值是否可以映射到可选字段。 |
注意
错误将阻止使用分析程序的内容正常工作。 警告不会阻止内容正常工作,但可能会降低结果的质量。
验证输出值
若要确保分析程序生成有效的值,请在“Microsoft Sentinel日志”页中运行以下查询,使用 ASIM 数据测试器:
<parser name> | limit <X> | invoke ASimDataTester ('<schema>')
指定架构是可选的。 如果未指定架构,则 EventSchema 字段用于标识事件应遵循的架构。 如果事件不包含 EventSchema 字段,则只会验证公共字段。 如果将架构指定为参数,则此架构将用于测试所有记录。 这对于未设置 EventSchema 字段的旧分析程序很有用。
注意
即使未指定架构,函数名称后也需要空括号。
此测试占用大量资源,可能无法用于整个数据集。 将 X 设置为查询不会超时的最大数字,或使用时间范围选取器设置查询的时间范围。
按如下所示处理结果:
| 邮件 | 操作 |
|---|---|
| (0) 错误:列 [<Field>] 的类型不匹配。 它当前为 [<Type>] ,应为 [<Type>] | 确保规范化字段的类型正确,通常是通过使用 转换函数 (例如 tostring)。 |
| (0) 错误: () (类型为 [<逻辑类型>] 的字段 [<Field>] 列出最多 10 个) 的值无效 | 确保分析器将正确的源字段映射到输出字段。 如果映射正确,请更新分析程序以将源值转换为正确的类型、值或格式。 有关每个 逻辑类型 的正确值和格式的详细信息,请参阅逻辑类型列表。 请注意,测试工具仅列出了 10 个无效值的示例。 |
| (1) 警告:必填字段 [<字段>] 中的空值 | 应填充必填字段,而不仅仅是定义字段。 检查是否可以从其他源填充字段,了解当前源为空的记录。 |
| (2) 信息:建议字段中的空值 [<字段>] | 通常应填充建议的字段。 检查是否可以从其他源填充字段,了解当前源为空的记录。 |
| (2) 信息:可选字段 [<Field>] 中的空值 | 检查别名字段是强制的还是建议的,如果是,则是否可以从其他源填充它。 |
许多消息还会报告生成消息的记录数及其占样本总数的百分比。 此百分比很好地表明问题的重要性。 例如,对于建议的字段:
- 90% 的空值可能表示存在一般分析问题。
- 25% 空值可能表示未正确分析的事件变体。
- 少数空值可能是一个可以忽略不计的问题。
注意
错误将阻止使用分析程序的内容正常工作。 警告不会阻止内容正常工作,但可能会降低结果的质量。
参与分析程序
你可能希望向主要 ASIM 分发提供分析程序。 如果接受,分析程序将作为 ASIM 内置分析程序提供给每个客户。
若要提供分析程序,请:
- 开发筛选分析器和无参数分析程序。
- 如上面的部署分析程序中所述,为 分析程序 创建 YAML 文件。
- 确保分析程序通过所有 测试 ,没有错误。 如果留下任何警告, 请将其记录 在分析器 YAML 文件中。
- 针对 Microsoft Sentinel GitHub 存储库创建拉取请求,包括:
记录接受的警告
如果 ASIM 测试工具列出的警告被视为对分析程序有效,请使用异常部分记录分析器 YAML 文件中接受的警告,如以下示例所示。
Exceptions:
- Field: DnsQuery
Warning: Invalid value
Exception: May have values such as "1164-ms-7.1440-9fdc2aab.3b2bd806-978e-11ec-8bb3-aad815b5cd42" which are not valid domains names. Those are related to TKEY RR requests.
- Field: DnsQuery
Warning: Empty value in mandatory field
Exception: May be empty for requests for root servers and for requests for RR type DNSKEY
YAML 文件中指定的警告应该是唯一标识的警告消息的简短形式。 值用于在执行自动测试时匹配警告消息并忽略它们。
示例提交指南
排查分析程序问题并确保分析程序的未来更新符合旧示例时,需要示例数据。 提交的示例应包括分析程序支持的任何事件变体。 确保示例事件包括所有可能的事件类型、事件格式和变体,例如表示成功和失败活动的事件。 此外,请确保表示值格式的变体。 例如,如果主机名可以表示为 FQDN 或简单主机名,则示例事件应同时包含这两种格式。
若要提交事件示例,请使用以下步骤:
- 在屏幕中
Logs,运行一个查询,该查询将仅从源表中提取分析程序选择的事件。 例如,对于 Infoblox DNS 分析程序,请使用以下查询:
Syslog
| where ProcessName == "named"
使用“ 导出到 CSV ”选项将结果导出到名为
<EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv的文件,其中EventProduct、EventProduct和EventSchema是分析程序分配给这些字段的值。在屏幕中
Logs,运行将输出架构或分析器输入表的查询。 例如,对于同一 Infoblox DNS 分析程序,查询为:
Syslog
| getschema
使用“ 导出到 CSV” 选项将结果导出到名为
<TableName>_schema.csv的文件,其中TableName是分析程序使用的源表的名称。在文件夹
/Sample Data/ASIM的 PR 中包含这两个文件。 如果文件已存在,请将 GitHub 句柄添加到名称,例如:<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHandle>.csv
测试结果提交指南
测试结果对于验证分析程序的正确性和了解报告的任何异常非常重要。
若要提交测试结果,请使用以下步骤:
运行分析程序测试,如 测试 部分所述。
使用“ 导出到 CSV ”选项将测试结果导出到分别名为
<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csv和<EventVendor>_<EventProduct>_<EventSchema>_DataTest.csv的文件。在文件夹
/Parsers/ASim<schema>/Tests的 PR 中包含这两个文件。
后续步骤
本文讨论如何开发 ASIM 分析程序。
详细了解 ASIM 分析程序:
详细了解 ASIM 的一般信息: