分享方式:


開發進階安全性資訊模型 (ASIM) 剖析器 (公開預覽)

進階安全性資訊模型 (ASIM) 使用者在其查詢中會使用統一剖析器 (而不是使用資料表名稱),以正規化格式檢視資料,並在查詢中包括與結構描述相關的所有資料。 接著,統一剖析器會使用來源特定的剖析器,來處理每個來源的特定詳細資料。

Microsoft Sentinel 可為許多資料來源提供內建的來源專屬剖析器。 您可能想要在下列情況下修改或「開發」這些來源特定的剖析器:

  • 您的裝置提供符合 ASIM 結構描述的事件,但裝置的來源特定剖析器和相關結構描述無法在 Microsoft Sentinel 中使用。

  • ASIM 來源專屬剖析器可供您的裝置使用,但您的裝置以不是 ASIM 剖析器預期的方式或格式傳送事件。 例如:

    • 您的來源裝置可能設定為以非標準方式傳送事件。

    • 您的裝置版本可能與 ASIM 剖析器所支援的版本不同。

    • 中繼系統可能會收集、修改和轉送事件。

若要了解剖析器如何融入 ASIM 架構內,請參閱 ASIM 架構圖

重要

ASIM 目前為預覽狀態。 Azure 預覽補充條款 包含適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未發行的版本) 的其他法律條款。

自訂 ASIM 剖析器開發流程

下列工作流程將描述開發自訂 ASIM 來源專屬剖析器的步驟總覽:

  1. 收集範例記錄

  2. 識別傳送自來源的事件所代表的結構描述。 如需詳細資訊,請參閱結構描述概觀

  3. 將來源事件欄位對應至所識別出的結構或結構描述。

  4. 針對您的來源開發一或多個 ASIM 剖析器。 您必須為每個與來源相關的結構描述開發篩選剖析器和無參數剖析器。

  5. 測試您的剖析器。

  6. 將剖析器部署至 Microsoft Sentinel 工作區。

  7. 更新相關的 ASIM 整合剖析器,以參考新的自訂剖析器。 如需詳細資訊,請參閱管理 ASIM 剖析器

  8. 建議也將剖析器提供給主要 ASIM 散發。 貢獻的剖析器也可以在所有工作區中當作內建剖析器使用。

本文會引導您完成流程的開發、測試和部署步驟。

提示

另請觀看有關 Microsoft Sentinel 正規化剖析器和正規化內容的深入探討網路研討會,或檢閱相關的投影片組。 如需詳細資訊,請參閱後續步驟

收集範例記錄

若要建置有效的 ASIM 剖析器,您需要一組代表性的記錄,在大部分情況下,這些記錄需要設定來源系統並將其連線至 Microsoft Sentinel。 如果您沒有可用的來源裝置,雲端隨用隨付服務可讓您部署許多裝置以供開發和測試。

此外,找出記錄的廠商文件和範本來確認廣泛的記錄格式涵蓋範圍,將有助於加速開發和減少錯誤。

一組代表性的記錄應該包括:

  • 事件結果不同的事件。
  • 回應動作不同的事件。
  • 格式不同的使用者名稱、主機名稱和識別碼,以及其他格式不同且需要值正規化的欄位。

提示

針對相同的結構描述使用現有剖析器來啟動新的自訂剖析器。 使用現有的剖析器對於篩選剖析器特別重要,以確保其接受結構描述所需的所有參數。

規劃對應

開發剖析器之前,請先將來源事件或事件中可用的資訊對應至您識別的結構描述:

  • 對應所有必要欄位,最好也包括建議欄位。
  • 嘗試將來源中可用的任何資訊對應至正規化欄位。 如果不是所選結構描述的一部分,請考慮對應至其他結構描述中可用的欄位。
  • 將來源欄位的值對應至 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)

篩選最佳化

若要確保剖析器的效能,請注意下列篩選建議:

  • 一律篩選內建欄位,而不是剖析的欄位。 雖然使用剖析的欄位進行篩選,有時候更輕鬆,但會大幅影響效能。
  • 使用提供最佳化效能的運算子。 特別是 ==hasstartswith。 使用 containsmatches regex 之類的運算子也會大幅影響效能。

提高效能的篩選建議並非都很容易遵循。 例如,使用 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 運算子如下所列 (依效能最佳化排序)。 第一個是效能最佳化程度最高的項目,而最後一個則是效能最佳化程度最低的項目。

Operator 描述
split 剖析分隔的值字串。
parse_csv 剖析格式化為 CSV (逗號分隔值) 行的值字串。
parse-kv 從字串運算式擷取結構化資訊,並以索引鍵/值形式表示資訊。
parse 使用模式剖析任一字串中的多個值,模式這可以是具有較佳效能的簡化模式,或是規則運算式。
extract_all 使用規則運算式剖析任一字串中的單一值。 如果後者使用規則運算式,則 extract_all 具有類似 parse 的效能。
extract 使用規則運算式從任一字串中擷取單一值。

如果需要單一值,則使用 extract 可提供比 parseextract_all 更好的效能。 不過,對相同來源字串使用 extract 的多個啟用比單一 parseextract_all 效率更低,因此應該避免。
parse_json 在格式化為 JSON 的字串中剖析值。 如果只需要來自 JSON 的幾個值,則使用 parseextractextract_all 可提供更好的效能。
parse_xml 在格式化為 XML 的字串中剖析值。 如果只需要來自 XML 的幾個值,則使用 parseextractextract_all 可提供更好的效能。

正規化

對應欄位名稱

正規化最簡單的形式是將原始欄位重新命名為其正規化名稱。 為此使用運算子 project-rename。 使用 project-rename 可確保欄位仍以實體欄位的形式受控,且處理欄位效能更高。 例如:

 | project-rename
    ActorUserId = InitiatingProcessAccountSid,
    ActorUserAadId = InitiatingProcessAccountObjectId,
    ActorUserUpn = InitiatingProcessAccountUpn,

正規化欄位格式和類型

在許多情況下,必須將擷取的原始值正規化。 例如,在 ASIM 中,MAC 位址會使用冒號做為分隔符號,而來源可能會傳送以連字號分隔的 MAC 位址。 轉換值的主要運算子為 extend,以及一組廣泛的 KQL 字串、數值和日期函式。

此外,請確保剖析器輸出欄位符合結構描述中所定義的類型,這對於剖析器運作至關重要。 例如,您可能需要將代表日期和時間的字串轉換成日期時間欄位。 todatetimetohex 這類函式在這些情況下很有幫助。

例如,原始唯一事件識別碼可能會以整數的形式傳送,但 ASIM 需要值為字串,以確保資料來源之間的廣泛相容性。 因此,指派來源欄位時會使用 extendtostring,而不是 project-rename

  | extend EventOriginalUid = tostring(ReportId),

衍生欄位和值

擷取來源欄位的值後,可能需要將值對應至專為目標結構描述欄位指定的值集合。 函式 iffcaselookup 有助於將可用的資料對應至目標值。

例如,Microsoft DNS 剖析器會使用 EventResult 陳述式,根據事件識別碼和回應碼指派 iff 欄位,如下所示:

   extend EventResult = iff(EventId==257 and ResponseCode==0 ,'Success','Failure')

若要對應多個值,請使用 datatable 運算子定義對應,並使用 lookup 來執行對應。 例如,某些來源會報告數值 DNS 回應碼和網路通訊協定,而結構描述則要求兩者都有較常見的文字標籤表示法。 下列範例示範如何使用 datatablelookup 衍生所需的值:

   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

請注意,當對應只有兩個可能的值時,lookup 也很實用且有效率。

對應條件較複雜時,請合併 iffcaselookup。 下列範例示範如何合併 lookupcase。 若找不到查閱值,上述 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')

第一個選項接受作為要查閱之值的參數,並讓您選擇輸出欄位,因此可作為一般 Lookup 函式。 第二個選項更適合剖析器、接受作為來源欄位的名稱,並更新所需的 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 提供用於處理擴充的實用函式。 例如,使用下列函式,根據 Computer 欄位中的值自動指派 SrcHostnameSrcDomainSrcDomainTypeSrcFQDN 欄位。

  | invoke _ASIM_ResolveSrcFQDN('Computer')

此函式會設定欄位,如下所示:

計算欄位 輸出欄位
server1 SrcHostname:伺服器 1
SrcDomain、SrcDomainType 和 SrcFQDN 全部空白
server1.microsoft.com SrcHostname:伺服器 1
SrcDomain:microsoft.com
SrcDomainType:FQDN
SrcFQDN:server1.microsoft.com

函式 _ASIM_ResolveDstFQDN_ASIM_ResolveDvcFQDN 執行類似的工作,並填入相關的 DstDvc 欄位。如需 ASIM 說明函式的完整清單,請參閱 ASIM 函式

選取結果集中的欄位

剖析器可以選擇性地選取結果集內的欄位。 移除不必要的欄位可以改善效能,並避免正規化欄位與其餘來源欄位之間造成混淆,進而提升效能並增加清晰度。

下列 KQL 運算子用來選取結果集中的欄位:

Operator 描述 在剖析器中的使用時機
project-away 移除欄位。 針對您想要從結果集中移除的特定欄位,使用 project-away。 建議不要從結果集中移除未正規化的原始欄位,除非它們會造成混淆或非常大型,而且可能會影響效能。
project 選取之前已存在或建立為陳述式一部分的欄位,並移除所有其他欄位。 不建議在剖析器中使用,因為剖析器不應該移除任何其他未正規化的欄位。

如果您需要移除特定欄位,例如剖析期間所使用的暫存值,請使用 project-away 從結果中移除這些欄位。

例如,剖析自訂記錄資料表時,請使用下列命令來移除仍有類型描述元的其餘原始欄位:

    | project-away
        *_d, *_s, *_b, *_g

處理剖析變體

重要

不同變體代表不同的事件類型,通常對應至不同的結構描述並開發個別的剖析器

在許多情況下,事件串流中的事件會包含需要不同剖析邏輯的變體。 若要剖析單一剖析器中的不同變體,請使用條件陳述式 (例如 iffcase) 或使用聯合結構。

若要使用 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…

為避免重複事件和過度處理,請確保每個函式會先使用原生欄位篩選所要剖析的事件。 此外,如有需要,請在使用 union 之前,對每個分支使用 project-away。

部署剖析器

您可以將剖析器複製到 Azure 監視器記錄頁面,並將查詢儲存為函式,藉此來手動部署剖析器。 這個方法在測試時很有用。 如需詳細資訊,請參閱建立函式

若要部署大量剖析器,我們建議使用剖析器的 ARM 範本,如下所示:

  1. 根據每個結構描述的相關範本建立 YAML 檔案,並在其中納入您的查詢。 從與結構描述和剖析器類型、篩選或無參數相關的 YAML 範本開始。

  2. 使用 ASIM Yaml 至 ARM 範本轉換器,將您的 YAML 檔案轉換成 ARM 範本。

  3. 如果部署更新,請使用入口網站或函式刪除 PowerShell 工具刪除舊版的函式。

  4. 使用 Azure 入口網站PowerShell部署您的範本。

您也可以使用連結範本,將多個範本合併為單一部署流程

提示

ARM 範本可以合併不同的資源,因此剖析器可以與連接器、分析規則或關注清單一起部署,以命名幾個有用的選項。 例如,您的剖析器可以參考與其一起部署的關注清單。

測試剖析器

本節介紹 ASIM 提供的測試工具,使您能夠測試剖析器。 也就是剖析器是程式碼且有時會很複雜,而除了自動化測試之外,也建議使用程式碼檢閱等標準的品質保證做法。

安裝 ASIM 測試工具

若要測試 ASIM,請將 ASIM 測試工具部署至 Microsoft Sentinel 工作區,其中:

  • 您的剖析器已部署。
  • 剖析器使用的來源資料表可用。
  • 剖析器使用的來源資料表會填入各種相關事件集合。

驗證輸出結構描述

若要確定您的剖析器會產生有效的結構描述,請在 Microsoft Sentinel [記錄] 頁面中執行下列查詢,來使用 ASIM 結構描述測試器:

<parser name> | getschema | invoke ASimSchemaTester('<schema>')

處理結果,如下所示:

錯誤 動作
遺漏強制性欄位 [<Field>] 將此欄位新增至您的剖析器。 在許多情況下,這會是衍生值或常數值,而不是已從來源取得的欄位。
當強制性資料行 [<Field>] 存在時,遺漏欄位 [<Field>] 是必要的 將此欄位新增至您的剖析器。 在許多情況下,此欄位代表其所參考之現有資料行的類型。
當資料行 [<Field>] 存在時,遺漏欄位 [<Field>] 是必要的 將此欄位新增至您的剖析器。 在許多情況下,此欄位代表其所參考之現有資料行的類型。
遺漏必要別名 [<Field>] 設定現有資料行 [<Field>] 的別名 將別名新增至您的剖析器
遺漏建議的別名 [<Field>] 設定現有資料行 [<Field>] 的別名 將別名新增至您的剖析器
遺漏選擇性別名 [<Field>] 設定現有資料行 [<Field>] 的別名 將別名新增至您的剖析器
遺漏必要別名 [<Field>] 設定遺漏資料行 [<Field>] 的別名 此錯誤伴隨別名欄位的類似錯誤。 請更正別名欄位錯誤,並將此別名新增至您的剖析器。
欄位 [<Field>] 的類型不符。 其目前為 [<Type>],且應該為 [<Type>] 確定正規化欄位的類型正確無誤,通常使用轉換函式,例如 tostring
資訊 動作
遺漏建議欄位 [<Field>] 請考慮將此欄位新增至您的剖析器。
資訊 動作
遺漏建議的別名 [<Field>] 設定不存在資料行 [<Field>] 的別名 如果您將別名欄位新增至剖析器,請務必同時新增此別名。
遺漏選擇性別名 [<Field>] 設定不存在資料行 [<Field>] 的別名 如果您將別名欄位新增至剖析器,請務必同時新增此別名。
遺漏選擇性欄位 [<Field>] 雖然經常遺漏選擇性欄位,但值得檢閱清單,以判斷是否可從來源對應任何選擇性欄位。
額外的非正規化欄位 [<Field>] 雖然未正規化的欄位有效,但值得檢閱清單,以判斷是否有任何未正規化值可以對應至選擇性欄位。

注意

錯誤會阻止使用剖析器的內容正常運作。 警告不會阻止內容運作,但可能會降低結果的品質。

驗證輸出值

若要確定您的剖析器會產生有效值,請在 Microsoft Sentinel [記錄] 頁面中執行下列查詢,來使用 ASIM 資料測試器:

<parser name> | limit <X> | invoke ASimDataTester ('<schema>')

指定結構描述是選擇性的。 若未指定架構,則會使用 EventSchema 欄位識別事件應遵守的結構描述。 Ig 事件不包含 EventSchema 欄位,僅驗證一般欄位。 如果結構描述指定為參數,此結構描述將用來測試所有的記錄。 這適用於為設定欄位 EventSchema 的舊版剖析器。

注意

即使未指定結構描述,函式名稱之後也需要空的括弧。

此測試會耗用大量資源,而且可能無法在整個資料集上運作。 將 X 設定為查詢不會逾時的最大數目,或使用時間範圍選取器設定查詢的時間範圍。

處理結果,如下所示:

訊息 動作
(0) 錯誤:資料行 [<Field>] 的類型不符。 其目前為 [<Type>],且應該為 [<Type>] 確定正規化欄位的類型正確無誤,通常使用轉換函式,例如 tostring
(0) 錯誤:欄位 [<Field>] 的值無效 (最多列出 10 個),類型為 [<Logical Type>] 確定剖析器會將正確的來源欄位對應至輸出欄位。 如果正確地對應,請更新剖析器,將來源值轉換成正確的類型、值或格式。 如需每個邏輯類型正確值和格式的詳細資訊,請參閱邏輯類型清單

請注意,測試工具只會列出 10 個無效值的範例。
(1) 警告:必要欄位 [<Field>] 中的空白值 必要欄位應該填入資料,而不只是進行定義。 檢查是否可以針對目前來源空白的記錄,從其他來源填入欄位。
(2) 資訊:建議欄位 [<Field>] 中的空白值 建議的欄位通常應該填入資料。 檢查是否可以針對目前來源空白的記錄,從其他來源填入欄位。
(2) 資訊:選擇性欄位 [<Field>] 中的空白值 檢查別名欄位是必要欄位還是建議欄位,若是如此,是否可以從其他來源填入。

許多訊息也會報告產生訊息的記錄數目,及其範例總數百分比。 百分比是問題重要性的良好指標。 以建議欄位為例:

  • 90% 空白值可能表示一般剖析問題。
  • 25% 空白值可能表示未正確剖析的事件變數。
  • 少數空白值可能是可忽略的問題。

注意

錯誤會阻止使用剖析器的內容正常運作。 警告不會阻止內容運作,但可能會降低結果的品質。

參與剖析器

建議將剖析器提供給主要 ASIM 散發。 若接受,剖析器會以 ASIM 內建剖析器的形式提供給每位客戶。

如何提供剖析器:

記載以接受的警告

如果 ASIM 測試控管列出的警告對剖析器而言有效,請使用 Exceptions 區段記錄剖析器 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 的檔案,其中 EventProductEventProductEventSchema 是剖析器指派給這些欄位的值。

  • Logs 畫面中,執行將會輸出結構描述或剖析器輸入資料表的查詢。 例如,針對相同的 Infoblox DNS 剖析器,查詢為:

    Syslog
    | getschema
  • 使用 [匯出至 CSV] 選項將結果匯出至名為 <TableName>_schema.csv 的檔案,其中 TableName 是剖析器所使用來源資料表的名稱。

  • 將這兩個檔案包含在 /Sample Data/ASIM 資料夾中的 PR。 如果檔案已經存在,請將 GitHub 控制代碼新增至名稱,例如:<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHanlde>.csv

測試結果提交指導方針

測試結果對於驗證剖析器的正確性及了解任何回報的例外狀況非常重要。

若要提交測試結果,請使用下列步驟:

  • 執行剖析器測試,如測試一節所述。

  • 並使用 [匯出至 CSV] 選項,將測試結果分別匯出至名為 <EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csv<EventVendor>_<EventProduct>_<EventSchema>_DataTest.csv 的檔案。

  • 將這兩個檔案包含在 /Parsers/ASim<schema>/Tests 資料夾中的 PR。

下一步

本文討論如何開發 ASIM 剖析器。

深入了解 ASIM 剖析器:

整體而深入地了解 ASIM: