共用方式為


使用 Logstash 透過 DCR 型 API 串流管線轉換的記錄

重要

使用 Logstash 輸出外掛程式搭配資料收集規則 (DCR) 的資料擷取目前為公開預覽狀態。 此功能已推出但不提供服務等級協定。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

Microsoft Sentinel 的新 Logstash 輸出外掛程式支援透過資料收集規則 (DCR) 的管線轉換和進階設定。 外掛程式會將任何類型的記錄從外部資料源轉送至 Log Analytics 中的自訂或標準資料表,或 Microsoft Sentinel。

在本文中,您將瞭解如何設定新的 Logstash 外掛程式,以使用 DCR 將資料串流至 Log Analytics 或 Microsoft Sentinel,並完全控制輸出結構描述。 了解如何部署外掛程式

注意

舊版的 Logstash 外掛程式可讓您經由資料收集 API 透過 Logstash 連線資料來源。

使用新的外掛程式,您可以:

  • 控制資料行名稱和類型的設定。
  • 執行擷取時轉換,例如篩選或擴充。
  • 將自訂記錄內嵌至自訂資料表,或將 Syslog 輸入資料流內嵌至 Log Analytics Syslog 資料表。

僅限擷取到自訂記錄擷取支援的標準資料表

若要深入了解如何使用 Logstash 資料收集引擎,請參閱開始使用 Logstash

概觀

架構和背景

Logstash 結構的圖表。

Logstash 引擎由三個元件組成:

  • 輸入外掛程式:來自各種來源的自訂資料收集。
  • 篩選外掛程式:根據指定的準則操作和正規化資料。
  • 輸出外掛程式:自訂將已收集和處理的資料傳送到各種目的地。

注意

  • Microsoft 僅支援這裡討論的 Microsoft Sentinel 提供的 Logstash 輸出外掛程式。 目前的外掛程式名為 microsoft-sentinel-log-analytics-logstash-output-plugin,v1.1.0。 您可以針對輸出外掛程式的任何問題開啟支援票證

  • Microsoft 不支援 Microsoft Sentinel 的第三方 Logstash 輸出外掛程式,或任何類型的任何其他 Logstash 外掛程式或元件。

  • 如需外掛程式的 Logstash 版本支援,請參閱先決條件

Logstash 的 Microsoft Sentinel 輸出外掛程式會使用 Log Analytics 記錄擷取 API,將 JSON 格式的資料傳送至 Log Analytics 工作區。 資料會內嵌至自訂記錄或標準資料表。

在 Logstash 中部署 Microsoft Sentinel 輸出外掛程式

若要設定外掛程式,請遵循下列步驟

  1. 檢閱必要條件
  2. 安裝外掛程式
  3. 建立範例檔案
  4. 建立必要的 DCR 相關資源
  5. 設定 Logstash 設定檔
  6. 重新啟動 Logstash
  7. 檢視 Microsoft Sentinel 中的傳入記錄
  8. 監視輸出外掛程式稽核記錄

必要條件

  • 安裝支援的 Logstash 版本。 外掛程式支援下列 Logstash 版本:

    • 7.0 - 7.17.13
    • 8.0 - 8.9
    • 8.11 - 8.13

    注意

    如果您使用 Logstash 8,建議您在管線中停用 ECS

  • 確認您至少擁有 Log Analytics 工作區的參與者權限。

  • 確認您有權在工作區中建立 DCR 物件。

安裝外掛程式

Logstash 集合中提供 Microsoft Sentinel 輸出外掛程式。

建立範例檔案

在本節中,您會在下列其中一個案例中建立範例檔案:

建立自訂記錄的範例檔案

在此案例中,您會設定 Logstash 輸入外掛程式,將事件傳送至 Microsoft Sentinel。 在此範例中,我們使用產生器輸入外掛程式來模擬事件。 您可以使用任何其他輸入外掛程式。

在此範例中,Logstash 設定檔如下所示:

input {
      generator {
            lines => [
                 "This is a test log message"
            ]
           count => 10
      }
}
  1. 將下列輸出外掛程式設定複製到您的 Logstash 設定檔。

    output {
        microsoft-sentinel-log-analytics-logstash-output-plugin {
          create_sample_file => true
          sample_file_path => "<enter the path to the file in which the sample data will be written>" #for example: "c:\\temp" (for windows) or "/tmp" for Linux. 
        }
    }
    
  2. 若要確定參考的檔案路徑在建立範例檔案之前已存在,請啟動 Logstash。

    此外掛程式會將十筆記錄寫入至設定路徑中名為 sampleFile<epoch seconds>.json 的範例檔案。 例如:c:\temp\sampleFile1648453501.json。 以下是此外掛程式所建立範例檔案的一部分:

    [
            {
                "host": "logstashMachine",
                "sequence": 0,
                "message": "This is a test log message",
                "ls_timestamp": "2022-03-28T17:45:01.690Z",
                "ls_version": "1"
            },
            {
                "host": "logstashMachine",
                "sequence": 1
        ...
    
        ]    
    

    此外掛程式會自動將這些屬性新增至每筆記錄:

    • ls_timestamp:從輸入外掛程式收到記錄的時間
    • ls_version:Logstash 管線版本。

    您可以在建立 DCR時移除這些欄位。

建立範例檔案以將記錄擷取到 Syslog 資料表

在此案例中,您會設定 Logstash 輸入外掛程式,將 syslog 事件傳送至 Microsoft Sentinel。

  1. 如果您尚未將 syslog 訊息轉送至 Logstash 電腦,您可以使用記錄器命令來產生訊息。 例如 (適用於 Linux):

    logger -p local4.warn --rfc3164 --tcp -t CEF: "0|Microsoft|Device|cef-test|example|data|1|here is some more data for the example" -P 514 -d -n 127.0.0.1
    Here is an example for the Logstash input plugin:
    input {
         syslog {
             port => 514
        }
    }
    
  2. 將下列輸出外掛程式設定複製到您的 Logstash 設定檔。

    output {
        microsoft-sentinel-log-analytics-logstash-output-plugin {
          create_sample_file => true
          sample_file_path => "<enter the path to the file in which the sample data will be written>" #for example: "c:\\temp" (for windows) or "/tmp" for Linux. 
        }
    }
    
  3. 若要確定檔案路徑在建立範例檔案之前已存在,請啟動 Logstash。

    此外掛程式會將十筆記錄寫入至設定路徑中名為 sampleFile<epoch seconds>.json 的範例檔案。 例如:c:\temp\sampleFile1648453501.json。 以下是此外掛程式所建立範例檔案的一部分:

    [
        	{
        		"logsource": "logstashMachine",
        		"facility": 20,
        		"severity_label": "Warning",
        		"severity": 4,
        		"timestamp": "Apr  7 08:26:04",
        		"program": "CEF:",
        		"host": "127.0.0.1",
        		"facility_label": "local4",
        		"priority": 164,
        		"message": 0|Microsoft|Device|cef-test|example|data|1|here is some more data for the example",
        		"ls_timestamp": "2022-04-07T08:26:04.000Z",
        		"ls_version": "1"
        	}
    ]    
    
    

    此外掛程式會自動將這些屬性新增至每筆記錄:

    • ls_timestamp:從輸入外掛程式收到記錄的時間
    • ls_version:Logstash 管線版本。

    您可以在建立 DCR時移除這些欄位。

建立必要的 DCR 資源

若要設定 Microsoft Sentinel DCR 型 Logstash 外掛程式,您必須先建立 DCR 相關資源。

在本節中,您會在下列其中一個案例中建立要用於 DCR 的資源:

建立 DCR 資源以擷取到自訂資料表

若要將資料擷取到自訂資料表,請遵循下列步驟 (根據使用 REST API (Azure 入口網站) 將資料傳送至 Azure 監視器記錄教學課程):

  1. 請檢閱必要條件

  2. 設定應用程式

  3. 新增自訂記錄資料表

  4. 使用您在上一節中建立的範例檔案剖析和篩選範例資料

  5. 從 DCR 收集資訊

  6. 將權限指派給 DCR

    略過「傳送範例資料」步驟。

如果您遇到任何問題,請參閱疑難排解步驟

建立 DCR 資源以擷取到標準資料表

若要將資料擷取到標準資料表 (例如 Syslog 或 CommonSecurityLog),您可以運用使用 REST API (Resource Manager 範本) 將資料傳送至 Azure 監視器記錄教學課程中的程序。 雖然此教學課程說明如何將資料擷取到自訂資料表,但您可以輕鬆地調整程序,將資料擷取到標準資料表。 下列步驟指出步驟中的相關變更。

  1. 請檢閱必要條件

  2. 收集工作區詳細資料

  3. 設定應用程式

    略過「在 Log Analytics 工作區中建立新資料表」步驟。 將資料擷取到標準資料表時,由於 Log Analytics 中已定義該資料表,因此不需要執行此步驟。

  4. 建立 DCR。 在此步驟中:

    • 提供您在上一節中建立的範例檔案
    • 使用您建立的範例檔案來定義 streamDeclarations 屬性。 範例檔案中的每個欄位都應該有一個具有相同名稱和適當類型的對應資料行 (請參閱下列範例)。
    • outputStream 屬性值設定為標準資料表 (而不是自訂資料表) 的名稱。 不同於自訂資料表,標準資料表名稱不會以 _CL 結尾。
    • 資料表名稱的開頭應該是 Microsoft-,而不是 Custom-。 在我們的範例中,outputStream 屬性值為 Microsoft-Syslog
  5. 將權限指派給 DCR

    略過「傳送範例資料」步驟。

如果您遇到任何問題,請參閱疑難排解步驟

範例:將資料擷取到 Syslog 資料表的 DCR

請注意:

  • streamDeclarations 資料行名稱和類型應該與範例檔案欄位相同,但您不需要指定所有欄位。 例如,在下列 DCR 中,會從 streamDeclarations 資料行省略 PRItypels_version 欄位。
  • dataflows 屬性會將輸入轉換成 Syslog 資料表格式,並將 outputStream 設定為 Microsoft-Syslog
{
	"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
	"contentVersion": "1.0.0.0",
	"parameters": {
		"dataCollectionRuleName": {
			"type": "String",
			"metadata": {
				"description": "Specifies the name of the Data Collection Rule to create."
			}
		},
		"location": {
			"defaultValue": "westus2",
			"allowedValues": [
				"westus2",
				"eastus2",
				"eastus2euap"
			],
			"type": "String",
			"metadata": {
				"description": "Specifies the location in which to create the Data Collection Rule."
			}
		},
        "location": {
            "defaultValue": "[resourceGroup().location]", 
            "type": "String", 
            "metadata": {
                "description": "Specifies the location in which to create the Data Collection Rule." 
            } 
        },
		"workspaceResourceId": {
			"type": "String",
			"metadata": {
				"description": "Specifies the Azure resource ID of the Log Analytics workspace to use."
			}
		}
	},
	"resources": [
		{
			"type": "Microsoft.Insights/dataCollectionRules",
			"apiVersion": "2021-09-01-preview",
			"name": "[parameters('dataCollectionRuleName')]",
			"location": "[parameters('location')]",
			"properties": {
				"streamDeclarations": {
					"Custom-SyslogStream": {
						"columns": [
							{
                        "name": "ls_timestamp",
                        "type": "datetime"
                    },	{
                        "name": "timestamp",
                        "type": "datetime"
                    },
                    {
                        "name": "message",
                        "type": "string"
                    }, 
					{
                        "name": "facility_label",
                        "type": "string"
                    },
					{
                        "name": "severity_label",
                        "type": "string"
                    },
                    {
                        "name": "host",
                        "type": "string"
                    },
                    {
                        "name": "logsource",
                        "type": "string"
                    }
	]
				      }
				},
				"destinations": {
					"logAnalytics": [
						{
							"workspaceResourceId": "[parameters('workspaceResourceId')]",
							"name": "clv2ws1"
						}
					]
				},
				"dataFlows": [
					{
					"streams": [
						"Custom-SyslogStream"
					],
					"destinations": [
						"clv2ws1"
					],
					"transformKql": "source | project TimeGenerated = ls_timestamp, EventTime = todatetime(timestamp), Computer = logsource, HostName = logsource, HostIP = host, SyslogMessage = message, Facility = facility_label, SeverityLevel = severity_label",
						"outputStream": "Microsoft-Syslog"
					}
				]
			}
		}
	],
	"outputs": {
		"dataCollectionRuleId": {
			"type": "String",
			"value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
		}
	}
}

設定 Logstash 設定檔

若要設定 Logstash 設定檔,將記錄擷取到自訂資料表,請擷取下列值:

欄位 擷取方式
client_app_Id 根據您在本節中使用的教學課程,當您建立 DCR 資源時,您在步驟 3 中建立的 Application (client) ID 值。
client_app_secret 根據您在本節中使用的教學課程,當您建立 DCR 資源時,您在步驟 5 中建立的 Application (client) ID 值。
tenant_id 您的訂閱租用戶識別碼。 您可以在 [首頁]>[Microsoft Entra ID]>[概觀]>[基本資訊] 中找到租用戶識別碼。
data_collection_endpoint 根據您在本節中使用的教學課程,當您建立 DCR 資源時,步驟 3 中 logsIngestion URI 的值。
dcr_immutable_id 根據您在本節中使用的教學課程,當您建立 DCR 資源時,步驟 6 中 DCR immutableId 的值。
dcr_stream_name 針對自訂資料表,請遵循建立 DCR 資源的步驟 6 所述,前往 DCR 的 JSON 檢視,然後複製 dataFlows>streams 屬性。 請參閱下列範例中的 dcr_stream_name

針對標準資料表,此值為 Custom-SyslogStream

擷取必要值之後:

  1. 將您在上一個步驟所建立 Logstash 設定檔的輸出區段取代為下列範例。
  2. 將下列範例中的預留位置字串取代為您擷取的值。
  3. 請務必將 create_sample_file 屬性變更為 false

選用設定

欄位 描述 預設值
azure_cloud 用來指定正在使用的 Azure 雲端名稱,可用的值為:AzureCloudAzureChinaCloudAzureUSGovernment AzureCloud
key_names 字串的陣列。 如果您想要將資料行的子集傳送至 Log Analytics,請提供此欄位。 無 (欄位空白)
plugin_flush_interval 定義將兩則訊息傳送至 Log Analytics 之間的最大時間差異 (秒)。 5
retransmission_time 設定傳送失敗後重新傳輸訊息的時間量 (秒)。 10
compress_data 當此欄位為 True 時,事件資料會先進行壓縮,再使用此 API。 建議用於高輸送量管線。 False
proxy 指定要用於所有 API 呼叫的 Proxy URL。 無 (欄位空白)
proxy_aad 指定要用於 API 呼叫 Microsoft Entra ID 的 Proxy URL。 與「proxy」相同的值 (欄位是空的)
proxy_endpoint 指定要用於 API 呼叫資料收集端點的 Proxy URL。 與「proxy」相同的值 (欄位是空的)

範例:輸出外掛程式設定區段

output {
    microsoft-sentinel-log-analytics-logstash-output-plugin {
      client_app_Id => "<enter your client_app_id value here>"
      client_app_secret => "<enter your client_app_secret value here>"
      tenant_id => "<enter your tenant id here> "
      data_collection_endpoint => "<enter your logsIngestion URI here> "
      dcr_immutable_id => "<enter your DCR immutableId here> "
      dcr_stream_name => "<enter your stream name here> "
      create_sample_file=> false
      sample_file_path => "c:\\temp"
      proxy => "http://proxy.example.com"
    }
}

若要設定 Microsoft Sentinel Logstash 輸出外掛程式的其他參數,請參閱輸出外掛程式的讀我檔案。

注意

基於安全性考量,建議您不要在 Logstash 設定檔中隱含指出 client_app_Idclient_app_secrettenant_iddata_collection_endpointdcr_immutable_id 屬性。 建議您將此敏感性資訊儲存在 Logstash 金鑰儲存區中。

重新啟動 Logstash

請重新啟動已更新輸出外掛程式設定的 Logstash,並根據您的 DCR 設定查看資料是否已擷取到正確的資料表。

在 Microsoft Sentinel 中檢視傳入記錄

  1. 驗證訊息正傳送至輸出外掛程式。

  2. 從 Microsoft Sentinel 導覽功能表,按一下 [記錄]。 在 [資料表] 標題下,展開 [自訂記錄] 類別。 尋找並按一下您在組態中指定的資料表的名稱 (具有 _CL 尾碼)。

    記錄隱藏自訂記錄的螢幕擷取畫面。

  3. 若要查看資料表中的記錄,請使用資料表名稱作為結構描述來查詢資料表。

    記錄隱藏自訂記錄查詢的螢幕擷取畫面。

監視輸出外掛程式稽核記錄

若要監視 Microsoft Sentinel 輸出外掛程式的連線和活動,請啟用適當的 Logstash 記錄檔。 如需記錄檔位置,請參閱 Logstash 目錄配置文件。

如果您在此記錄檔中沒有看到任何資料,請在本機產生並傳送一些事件 (透過輸入和篩選外掛程式),以確定輸出外掛程式正在接收資料。 Microsoft Sentinel 將僅支援與輸出外掛程式相關的問題。

網路安全性

定義網路設定,並啟用 Microsoft Sentinel Logstash 輸出外掛程式的網路隔離。

虛擬網路服務標籤

Microsoft Sentinel 輸出外掛程式支援 Azure 虛擬網路服務標籤。 需要 AzureMonitorAzureActiveDirectory 標籤。

Azure 虛擬網路服務標籤可用來定義 網路安全性群組Azure 防火牆 和使用者定義路由的網路存取控制。 建立安全性規則和路由時,請以服務標籤取代特定的 IP 位址。 針對無法使用 Azure 虛擬網路服務標籤的案例,以下提供防火牆需求。

防火牆需求

下表列出無法使用 Azure 虛擬網路服務標籤之案例的防火牆需求。

雲端 端點 目標 連接埠 方向 略過 HTTPS 檢查
Azure Commercial https://login.microsoftonline.com 授權伺服器 (Microsoft 身分識別平台) 連接埠 443 出埠 Yes
Azure Commercial https://<data collection endpoint name>.<Azure cloud region>.ingest.monitor.azure.com 資料收集端點 連接埠 443 出埠 Yes
Azure Government https://login.microsoftonline.us 授權伺服器 (Microsoft 身分識別平台) 連接埠 443 出埠 Yes
Azure Government 將上述 '.com' 取代為 '.us' 資料收集端點 連接埠 443 出埠 Yes
由 21Vianet 營運的 Microsoft Azure https://login.chinacloudapi.cn 授權伺服器 (Microsoft 身分識別平台) 連接埠 443 出埠 Yes
由 21Vianet 營運的 Microsoft Azure 將上述 '.com' 取代為 '.cn' 資料收集端點 連接埠 443 出埠 Yes

限制

  • 僅限擷取到自訂記錄擷取支援的標準資料表
  • streamDeclarations 屬性中輸入資料流的資料行必須以字母開頭。 如果資料行以其他字元開頭 (例如 @_),則作業會失敗。
  • 需要 TimeGenerated 日期時間欄位。 您必須在 KQL 轉換中包含此欄位。
  • 針對其他可能的問題,請檢閱教學課程中的疑難排解一節。

下一步

在本文中,您已了解如何使用 Logstash 將外部資料來源連線到 Microsoft Sentinel。 若要深入了解 Microsoft Sentinel,請參閱下列文章: