使用 Azure 監視器代理程式從文字檔收集記錄
自訂文字記錄 是 資料收集規則 (DCR) 中使用的資料來源其中之一。 使用 Azure 監視器代理程式收集資料 提供建立 DCR 的詳細資料。 本文提供文字記錄類型的其他詳細資料。
許多應用程式和服務會將資訊記錄到文字檔,而不是標準記錄服務,例如 Windows 事件記錄檔或 Syslog。 您可以使用 Azure 監視器代理程式來收集此資料, 並儲存在 Log Analytics 工作區中,以及從其他來源收集的資料。
必要條件
- 您至少擁有參與者權限所在的 Log Analytics 工作區。
- 資料收集端點 (DCE) 位於與 Log Analytics 工作區相同的區域中。 如需詳細資訊,請參閱 如何根據您的部署設定資料收集端點。
- 使用 Azure 監視器代理程式收集資料 中所述的新 DCR 或現有 DCR。
基本作業
下圖顯示從文字檔收集記錄資料的基本作業。
- 代理程式會監看本機磁碟上符合指定名稱模式的任何記錄檔。
- 記錄中的每個項目都會收集並傳送至 Azure 監視器。 傳入資料流會在單一資料行中包含整個記錄項目。
- 如果使用預設轉換,則會將整個記錄項目傳送至目標資料表中的單一資料行。
- 如果使用自訂轉換,記錄項目就可以剖析成目標資料表中的多個資料行。
文字檔需求和最佳做法
Azure 監視器代理程式正在監視的檔案必須符合下列需求:
- 檔案必須儲存在機器的本機磁碟機上,且該磁碟機的受監視目錄中具有 Azure 監視器代理程式。
- 每個記錄都必須以行結尾來劃定。
- 檔案必須使用 ASCII 或 UTF-8 編碼。 不支援其他格式,例如 UTF-16。
- 新記錄應該附加至檔案結尾,而不是覆寫舊記錄。 覆寫會導致資料遺失。
請遵循下列建議,以確保您不會發生資料遺失或效能問題:
- 每天建立新的記錄檔,以便您可以輕鬆地清除舊檔案。
- 持續清除受監視目錄中的記錄檔。 追蹤可能會提升代理程式 CPU 和記憶體使用量的記錄檔。 等候至少 2 天,以便有足夠的時間可以處理所有記錄。
- 請勿將符合檔案掃描模式的檔案重新命名為另一個也符合檔案掃描模式的名稱。 這會導致擷取重複的資料。
- 請勿將符合檔案掃描模式的大型記錄檔重新命名或複製到受監視的目錄。 如果有此必要,請勿每分鐘超過 50 MB。
傳入資料流
注意
現在已提供使用時間戳分隔事件的多行支援。 您必須使用資源管理範本部署,直到入口網站 UI 中新增支持為止。
資料傳入資料流包含下表中的資料行。
資料行 | 類型 | 描述 |
---|---|---|
TimeGenerated |
datetime | 產生記錄的時間。 此值會自動填入記錄新增至 Log Analytics 工作區的時間。 您可以使用轉換來覆寫此值,將 TimeGenerated 設定為另一個值。 |
RawData |
字串 | 單一資料行中的整個記錄項目。 如果您想要將此資料分解成多個資料行,然後再傳送至資料表,您可以使用轉換。 |
FilePath |
字串 | 如果您將此資料行新增至 DCR 中的傳入資料流,則會填入記錄檔的路徑。 此資料行不會自動建立,且無法使用入口網站新增。 您必須手動修改入口網站所建立的 DCR,或使用另一種方法建立 DCR,您可以在其中明確定義傳入資料流。 |
Computer |
字串 | 如果您將此資料行新增至 DCR 中的傳入資料流,即會填入電腦的名稱與記錄檔。 此資料行不會自動建立,且無法使用入口網站新增。 您必須手動修改入口網站所建立的 DCR,或使用另一種方法建立 DCR,您可以在其中明確定義傳入資料流。 |
自訂資料表
您必須先在 Log Analytics 工作區中建立自訂資料表,才能從文字檔收集記錄資料。 資料表結構描述必須符合您收集的資料,或者您必須新增轉換,以確保輸出結構描述符合資料表。
警告
為了避免數據遺失,請務必不要使用 MMA 代理程式目前正在使用的現有自定義記錄數據表。 一旦任何 AMA 代理程式寫入現有的自訂記錄數據表,MMA 代理程式將無法再寫入該資料表。 相反地,您應該為 AMA 代理程式建立一個新的數據表,以確保從一個代理程式順利轉換到下一個代理程式。
例如,您可以使用下列 PowerShell 指令碼來建立具有 RawData
、FilePath
和 Computer
的自訂表格。 您不需要轉換此資料表,因為結構描述符合傳入資料流的預設結構描述。
$tableParams = @'
{
"properties": {
"schema": {
"name": "{TableName}_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "DateTime"
},
{
"name": "RawData",
"type": "String"
},
{
"name": "FilePath",
"type": "String"
},
{
"name": "Computer",
"type": "String"
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
建立文字檔的資料收集規則
建立資料收集規則,如 使用 Azure 監視器代理程式收集資料 中所述。 在 [收集並傳遞] 步驟中,從 [資料來源類型] 下拉式清單中選取 [自訂文字記錄]。
設定 | 描述 |
---|---|
檔案模式 | 識別本機磁碟機上記錄檔的位置和名稱。 針對檔名使用萬用字元,例如,每天使用新名稱建立新檔案時。 您可以輸入以逗號分隔的多個檔案模式。 範例: - C:\Logs\MyLog.txt - C:\Logs\MyLog*.txt - C:\App01\AppLog.txt, C:\App02\AppLog.txt - /var/mylog.log - /var/mylog*.log |
資料表名稱 | Log Analytics 工作區中的目的地資料表名稱。 |
記錄分隔符號 | 目前未使用,但保留供未來使用,允許目前支援的行結尾 (/r/n ) 以外的分隔符號。 |
轉換 | 擷取時間轉換 篩選記錄或格式化目的地資料表的傳入資料。 使用 source 讓傳入的資料保持不變。 |
分隔的記錄檔
許多文字記錄檔都有以逗號等字元分隔的項目。 若要將此資料剖析成不同的資料行,請使用具有 分割函數 的轉換。
例如,請考慮使用下列逗號分隔資料的文字檔。 這些欄位可描述為:Time
、Code
、Severity
、Module
和 Message
。
2024-06-21 19:17:34,1423,Error,Sales,Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,Nightly backup complete.
下列轉換會將資料剖析成不同的資料行。 由於 split
會傳回動態資料,因此您必須使用 tostring
和 toint
等函數,將資料轉換成正確的純量類型。 您也需要為每個符合目標資料表中資料行名稱的項目提供名稱。 請注意,此範例提供 TimeGenerated
值。 如果未提供,則會使用擷取時間。
source | project d = split(RawData,",") | project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])
使用記錄查詢擷取此資料會傳回下列結果。
疑難排解
如果您從文字記錄沒有收集到預期的資料,請執行下列步驟。
- 確認資料正在寫入所收集的記錄檔。
- 確認記錄檔的名稱和位置符合您指定的檔案模式。
- 確認目標資料表的結構描述與傳入資料流相符,或您有能將傳入資料流轉換成正確結構描述的轉換。
- 請參閱 確認作業 以確認代理程式是否運作,以及是否正在接收資料。
下一步
深入了解: