開發先進安全資訊模型 (ASIM) 解析器

先進安全資訊模型 (ASIM) 使用者在查詢中使用 統一解析器 取代資料表名稱,以正規化格式查看資料,並將所有與結構相關的資料納入查詢中。 統一解析器則使用 來源特定的解析器 來處理每個來源的具體細節。

Microsoft Sentinel 為許多資料來源提供內建的、針對特定來源的解析器。 你可能會想要修改,或開發這些特定來源的剖析器,以因應下列情況:

  • 當你的裝置提供符合 ASIM 結構的事件,但 Microsoft Sentinel 中沒有針對你裝置及相關結構的來源解析器時,

  • 當 ASIM 特定來源解析器可以供您的裝置使用時,但您的裝置傳送事件的方式或格式與 ASIM 解析器預期的不同。 例如:

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

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

    • 事件可能會被中介系統收集、修改並轉發。

要了解解析器如何融入 ASIM 架構,請參考 ASIM 架構圖

自訂 ASIM 解析器開發流程

以下工作流程說明開發自訂ASIM(針對特定來源的解析器)的高階步驟:

  1. 收集範例記錄

  2. 識別傳送自來源的事件所代表的模式或結構描述。 更多資訊請參閱 結構概述

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

  4. 針對您的來源開發一或多個 ASIM 剖析器。 你需要為每個與來源相關的結構開發過濾解析器和無參數解析器。

  5. 測試您的解析器。

  6. 將解析器部署到你的 Microsoft Sentinel 工作區。

  7. 更新相關的 ASIM 統一解析器以參考新的自訂解析器。 欲了解更多資訊,請參閱 管理 ASIM 解析器

  8. 你也可以考慮將你的解析器貢獻給 ASIM 主要發行版本。 貢獻的剖析器也可以在所有工作區中當作內建剖析器使用。

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

收集範例記錄

要建立有效的 ASIM 解析器,你需要一組具代表性的日誌,通常需要設定原始碼系統並將其連接到 Microsoft Sentinel。 如果您沒有可用的來源裝置,雲端隨用隨付服務可讓您部署許多裝置以供開發和測試。

此外,找到廠商文件與日誌範例,有助於加速開發並減少錯誤,確保日誌格式涵蓋廣泛。

一組具代表性的日誌應包括:

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

Tip

建立新的自訂剖析器,使用現有的剖析器針對相同的架構。 使用現有的解析器對於過濾解析器尤其重要,以確保它們接受結構所需的所有參數。

規劃對應

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

  • 將所有必填欄位映射,最好也標示推薦欄位。
  • 試著將來源中所有可取得的資訊映射到正規化欄位。 如果不是所選結構描述中的一部分,請考慮將其對應至其他結構描述中可用的欄位。
  • 將來源欄位的值映射到 ASIM 允許的正規化值。 原始值會儲存在不同的欄位中,例如 EventOriginalResultDetails

開發中的解析器

為每個相關結構開發過濾解析器與無參數解析器。

自訂解析器是一種在 Microsoft Sentinel Logs 頁面中開發的 KQL 查詢。 解析器查詢包含三個部分:

篩選>解析>準備欄位

篩選

篩選相關的記錄

在許多情況下,Microsoft Sentinel 中的一個資料表包含多種類型的事件。 例如:

  • Syslog 資料表包含多個來源的資料。
  • 自訂資料表可能包含來自單一來源的資訊,提供多種事件類型,並可適用於多種結構。

因此,解析器應先過濾與目標結構相關的紀錄。

KQL 中的篩選是使用 where 運算子來完成。 例如, Sysmon 事件 1 會報告程序建立,因此會正規化為 ProcessEvent 架構。 Sysmon 事件 1 是表格的一部分Event,因此你可以用以下查詢篩選為僅 Sysmon 程序建立事件:

Event | where Source == "Microsoft-Windows-Sysmon" and EventID == 1

Important

解析器不應該以時間來篩選。 使用解析器的查詢會套用一個時間範圍。

使用「關注清單」來依據來源類型篩選

在某些情況下,事件本身不包含允許篩選特定來源類型的資訊。

例如,Infoblox 的 DNS 事件以 Syslog 訊息形式傳送,且難以與其他來源發送的 Syslog 訊息區分。 在這種情況下,解析器依賴於定義相關事件的來源清單。 此清單會保留在 Sources_by_SourceType 關注清單中。

若要在剖析器中使用 ASimSourceType 關注清單,請使用剖析器篩選區段中的 _ASIM_GetSourceBySourceType 函式。 例如,Infoblox DNS 解析器透過包含以下過濾器,限制紀錄只能存取 Infoblox NIOS 來源,確保解析器只處理相關的 Syslog 記錄:

  | 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)

欲了解更多關於函 array_length 式及運算子的 has_any 資訊,請參閱 Kusto 文件:

篩選最佳化

為確保解析器效能,請注意以下過濾建議:

  • 一律篩選內建的欄位,而不是已剖析的欄位。 雖然使用解析過的欄位進行篩選,有時較為容易,但這樣會大幅影響效能。
  • 使用能提供最佳效能的運算子。 特別是 ==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"

Note

解析器不應以時間來篩選,因為使用解析器的查詢本身已經會過濾時間。

解析

查詢選取相關記錄之後,可能需要對其進行剖析。 通常,若多個事件欄位在單一文字欄位中傳達,則需要解析。

執行剖析的 KQL 運算子如下所列 (依效能最佳化排序)。 前者提供最優化的效能,後者則提供最不優化的效能。

運算子/函數 () Description
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 可確保欄位仍以實體欄位的形式受控,且處理欄位效能更高。 例如,以下查詢將來源帳號欄位對應到其正規化後的 ASIM 演員欄位名稱:

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

正規化欄位格式和類型

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

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

例如,原始唯一事件識別碼可能會以整數的形式傳送,但 ASIM 需要值為字串,以確保資料來源之間的廣泛相容性。 因此,指派來源欄位時,應將數值轉換為字串,使用 extendtostring 代替 project-rename,使正規化欄位符合結構字串類型要求:

  | extend EventOriginalUid = tostring(ReportId),

導出欄位與值

擷取後,來源欄位的值可能需要映射到目標結構欄位指定的值集合。 函數 iffcaselookup 有助於將可用資料映射到目標值。

例如,Microsoft DNS 解析器會根據來源特定的事件與回應碼推導出標準化的成功或失敗結果。 解析器根據事件 ID 與回應代碼,使用iff以下陳述指派欄位:EventResult

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

若要對應多個值,請使用 datatable 運算子定義對應,並使用 lookup 來執行對應。 例如,有些來源會報告數字 DNS 回應碼和網路協定,而結構則要求兩者都使用較常用的文字標籤表示。 以下範例示範如何建立查詢表,將數值協定識別碼與 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

請注意,當映射只有兩個可能的值時,查找功能也非常實用且高效。

當映射條件較為複雜時,請結合使用 iffcaselookup。 下列範例示範如何合併 lookupcase。 若找不到查閱值,上述 lookup 範例會將空白值傳回欄位 DnsResponseCodeName 中。 下方的 case 範例會在可用時使用 lookup 作業的結果來擴充它,否則會指定額外的條件。 使用此方法處理未匹配的查詢值,方法是退回到額外條件或預設標籤:

   | extend DnsResponseCodeName = 
      case (
        DnsResponseCodeName != "", DnsResponseCodeName,
        DnsResponseCode between (3841 .. 4095), 'Reserved for Private Use',
        'Unassigned'
      )

Microsoft Sentinel 提供內建的輔助功能,用於常見的查找值。 你不必手動建立 a datatablelookup 來處理已知映射,而是直接用這些函式來填充正規化欄位。 例如, 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 欄位中的值類型。 您可以在 實體描述中找到更多關於類型欄位的資訊。

在大多數情況下,類型也會被賦予一個常數值。 然而,在某些情況下,類型必須根據實際價值來決定。 例如,透過檢查該主機名稱是否包含多個區段,判斷解析後的主機名稱是否為完全限定網域名稱(FQDN):

   DomainType = iif (array_length(SplitHostname) > 1, 'FQDN', '')

Microsoft Sentinel 提供了處理濃縮的實用函數。 例如,使用 _ASIM_ResolveSrcFQDN 輔助函式從欄位推導出正規化的來源主機名稱、網域、網域類型及 FQDN 欄位 Computer 。 以下片段會SrcHostname根據欄位Computer中的值自動填充 、 SrcDomainSrcDomainTypeSrcFQDN 、 和 欄位。

  | invoke _ASIM_ResolveSrcFQDN('Computer')

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

電腦領域 輸出欄位
伺服器1 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 Description 何時用於解析器
project-away 移除欄位。 對於想要從結果集中移除的特定欄位,請使用 project-away。 我們建議不要從結果集中移除未正規化的原始欄位,除非它們造成混淆或體積過大且可能影響效能。
專案 選取先前存在或作為陳述句一部分建立的欄位,並移除所有其他欄位。 不建議用於解析器,因為解析器不應移除未正規化的其他欄位。

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

例如,在解析自訂日誌表時,移除剩餘的來源特定類型欄位(例如帶有 _d_s_b_g 後綴的欄位),使解析器輸出只包含你打算保留的正規化欄位:

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

處理解析變異

Important

不同的變體代表 不同的 事件類型,通常映射到不同的結構,並開發出獨立的解析器

在許多情況下,事件串流中的事件包含需要不同解析邏輯的變體。 若要剖析單一剖析器中的不同變體,請使用條件陳述式 (例如 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. 如果要部署更新,請使用入口網站或 function delete PowerShell 工具 刪除舊版函式。

  4. 請使用 Azure portalPowerShell 部署你的範本。

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

Tip

ARM 範本可以結合不同資源,因此解析器可以與連接器、分析規則或監控清單等多種實用選項同時部署。 例如,您的解析器可以參考與其一起部署的監視名單。

測試剖析器

ASIM 提供測試工具,讓你用來驗證自訂解析器。 話雖如此,解析器是程式碼,有時複雜,建議除了自動化測試外,還會採用標準的品質保證措施,例如程式碼審查。

安裝 ASIM 測試工具

在部署 ASIM 測試工具之前,請確保你有一個 Microsoft Sentinel 工作空間,具備以下功能:

  • 您的解析器已部署。
  • 解析器使用的原始資料表是可取得的。
  • 解析器使用的來源表中包含多樣的相關事件集合。

當你的工作區符合這些需求時,就 部署 ASIM 測試工具 到該工作區。

驗證輸出結構

為了確保你的解析器產生有效的結構,請在 Microsoft Sentinel 日誌頁面執行以下結構測試查詢。 此指令用以驗證解析器的輸出欄位、類型與別名是否符合預期的 ASIM 架構:

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

結果處理方式如下:

錯誤 Action
遺漏強制性欄位 [<Field>] 將此欄位新增至您的解析器。 在許多情況下,這會是導出值或常數值,而非來源已提供的欄位。
缺失欄位 [<欄位>] 是必須的,當必須欄位 [<欄位>] 存在時 將此欄位新增至您的解析器。 在許多情況下,此欄位表示它所指的現有欄位的類型。
遺失欄位 [<Field>],當資料行 [<Field>] 存在時,此欄位為必要欄位 將此欄位新增至您的解析器。 在許多情況下,此欄位表示它所指的現有欄位的類型。
遺失必要別名 [<Field>],其別名對應至現有資料行 [<Field>] 把別名加到你的解析器裡
遺失建議別名 [<Field>],其別名對應至現有資料行 [<Field>] 把別名加到你的解析器裡
遺失選用別名 [<Field>],其別名對應至現有資料行 [<Field>] 把別名加到你的解析器裡
缺少必要別名:[<欄位>] 將缺少的欄位 [<欄位>] 設為別名 此錯誤伴隨著與別名欄位相關的類似錯誤。 修正別名欄位錯誤,並將這個別名加入你的解析器。
欄位 [<Field>] 的類型不匹配。 目前為 [<Type>],應為 [<Type>] 確保正規化欄位的類型正確,通常可藉由使用轉換函式(例如 tostring)來達成。
Info Action
遺漏建議欄位 [<Field>] 請考慮將此欄位新增至您的解析器。
Info Action
缺少建議的別名 [<欄位>],該別名對應至不存在的欄位 [<欄位>] 如果你把別名欄位加到解析器裡,記得也要加上這個別名。
遺失選用別名 [<Field>],其別名對應至不存在的資料行 [<Field>] 如果你把別名欄位加到解析器裡,記得也要加上這個別名。
遺漏選擇性欄位 [<Field>] 雖然經常遺漏選擇性欄位,但值得檢閱清單,以判斷是否可從來源對應任何選擇性欄位。
額外的非正規化欄位 [<Field>] 雖然未正規化的欄位有效,但值得檢閱清單,以判斷是否有任何未正規化值可以對應至選擇性欄位。

Note

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

驗證輸出值

為了確保解析器產生有效值,請使用 ASIM 資料測試器驗證解析器輸出樣本的欄位值,並找出任何錯誤或警告。 請在 Microsoft Sentinel Logs 頁面執行以下查詢:

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

指定結構是可選的。 若未指定架構,則會使用 EventSchema 欄位識別事件應遵守的結構描述。 若事件不包含欄位 EventSchema ,則僅驗證共用欄位。 若以參數形式指定結構,該結構將用於測試所有紀錄。 這對於不設定 EventSchema 欄位的舊式解析器非常有用。

Note

即使未指定結構,函式名稱後仍需使用空括號。

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

結果處理方式如下:

Message Action
(0) 錯誤:欄位 [<欄位>] 類型不符。 目前為 [<Type>],應為 [<Type>] 確保正規化欄位的類型正確,通常可藉由使用轉換函式(例如 tostring)來達成。
(0) 錯誤:欄位 [<Field>] 的值無效 (最多列出 10 個),類型為 [<Logical Type>] 確保解析器正確地將來源欄位對應到輸出欄位。 若映射正確,請更新解析器將來源值轉換成正確的類型、值或格式。 如需每個邏輯類型正確值和格式的詳細資訊,請參閱邏輯類型清單

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

許多訊息也會報告產生該訊息的紀錄數量及其佔總樣本的百分比。 百分比是問題重要性的良好指標。 以建議欄位為例:

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

Note

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

貢獻剖析器

您可能希望將解析器貢獻給主要的 ASIM 發行版。 若被接受,解析器將作為 ASIM 內建解析器提供給所有客戶。

若要貢獻您的剖析器:

記錄已接受的警告

若ASIM測試工具列出的警告被視為對解析器有效,請使用例外部分在解析器YAML檔案中記錄接受的警告。 以下 YAML 範例展示了如何在解析器定義的章節中記錄被接受的 Exceptions 解析器測試警告:

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 檔案中指定的警告應是對應 ASIM 測試器警告訊息的簡短形式,且足夠獨特以識別該特定警告。 該值用於自動測試時匹配 ASIM 測試器警告訊息,並忽略匹配的警告。

範例提交指引

在排除解析器問題及確保未來解析器更新符合較舊範例時,需要樣本資料。 你提交的範例應該包含解析器支援的任何事件變體。 請確定範例事件包含所有可能的事件類型、事件格式和變化,例如代表成功和失敗活動的事件。 也要確保值格式的各種變化都能呈現出來。 例如,如果主機名稱可以表示為 FQDN 或簡單主機名稱,則範例事件應該包含這兩種格式。

若要提交事件範例,請使用下列步驟:

  • Logs 畫面中執行查詢,只會從來源資料表擷取剖析器所選取的事件。 例如,對於 Infoblox DNS 解析器,請使用以下查詢,只取得解析器所處理的 Infoblox NIOS Syslog 紀錄:
    Syslog
    | where ProcessName == "named"
  • 使用 [匯出至 CSV] 選項將結果匯出至名為 <EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv 的檔案,其中 EventProductEventProductEventSchema 是剖析器指派給這些欄位的值。

  • 在螢幕上 Logs 執行 getschema 來源資料表,檢查可用的欄位及其類型。 將這些結構資訊與範例資料一同匯出。 例如,Infoblox DNS 解析器,查詢為:

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

  • 把兩個檔案都放進你的 PR 資料夾 /Sample Data/ASIM裡。 如果檔案已經存在,請在名稱中加入你的 GitHub 帳號,例如: <EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHandle>.csv

測驗結果提交指引

測試結果對於驗證解析器的正確性及理解任何報告的異常非常重要。

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

  • 依照 Test 解析器描述執行解析器測試。

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

  • 把兩個檔案都放進你的 PR 資料夾 /Parsers/ASim<schema>/Tests裡。

了解更多關於 ASIM 解析器:

了解更多關於ASIM的資訊: