在 Azure 監視器中建立轉換
Azure 監視器中的轉換可讓您在傳入資料儲存在 Log Analytics 工作區之前對其進行篩選或修改。 其會實作為資料收集規則 (DCR) 中的 Kusto 查詢語言 (KQL) 陳述式。 本文提供建立和測試轉換查詢並將其新增至 DCR 的指引。
基本查詢結構
所有轉換查詢都會以 開頭 source
,這是代表輸入數據流的虛擬數據表。 然後,您可以使用任何支援的 KQL 運算子來篩選、修改或新增資料行至數據,就像使用任何其他數據表一樣。 查詢會個別套用至數據源所傳送的每個專案。
查詢的輸出必須符合目標數據表的架構與下列考慮:
- 您可以省略任何不應填入的數據行。 目標數據表中記錄的數據行將會是空的。
- 請務必排除輸出數據表中未包含的任何數據行。 即使數據未儲存,也不會發生錯誤,但您仍需支付額外數據的擷取費用。
- 每個轉換的輸出都必須在名為
TimeGenerated
的類型datetime
的資料行中包含有效的時間戳。 如果您的資料來源未包含這個屬性,您可以使用 或project
在轉換extend
中新增它。
以下是執行數個函式的轉換範例:
source
| where severity == "Critical"
| extend Properties = parse_json(properties)
| project
TimeGenerated = todatetime(["time"]),
Category = category,
StatusDescription = StatusDescription,
EventName = name,
EventId = tostring(Properties.EventId)
注意
如需不同案例的各種範例,請參閱 Azure 監視器 中的數據收集規則 (DCR) 範例和案例。
建立轉換查詢
建立或編輯將包含轉換的 DCR 之前,您必須建立及測試轉換查詢。 您通常會對現有資料或測試資料執行測試查詢來執行此動作。 當您取得想要的結果時,您可以將資料表名稱取代為 source
,並將它貼到 DCR 中,如將轉換新增至 DCR 中所述。
重要
轉換不支援所有 KQL 功能。 如需支援的功能和限制,請參閱 Azure 監視器轉換 中支援的 KQL 功能。
例如,如果您要建立轉換來篩選 Syslog 事件,您可以從下列查詢開始,您可以在 Log Analytics 中執行。
Syslog | where SeverityLevel != 'info'
您可以將此查詢貼到 DCR 中,然後將資料表名稱變更為 source
。
source | where SeverityLevel != 'info'
使用下列其中一個策略將數據用於測試查詢。
- 如果您已經收集想要轉換的數據,您可以使用Log Analytics來撰寫查詢,以視需要篩選或修改數據。 複製查詢文字,並將其貼到 DCR 中。
- 使用 Log Analytics 使用 運算符撰寫查詢
datatable
,以建立代表您傳入數據的範例數據集。 複製不含 運算子的查詢文字,datatable
並將其貼到 DCR 中。 - 使用程式在 Azure 入口網站 中建立新的數據表,並提供範例數據。 使用包含的介面來建立及測試您的轉換查詢。 複製查詢文字並貼到 DCR,或完成程式,然後編輯 DCR 以複製轉換查詢。 如果您不需要新數據表,就可以刪除新數據表。
將轉換新增至 DCR
轉換查詢之後,您可以將它新增至 DCR。 使用 Azure 監視器中建立和編輯資料收集規則 (DCR) 中的指引,使用本節中的資訊建立或編輯 DCR,以在 DCR 定義中包含轉換查詢。
注意
某些數據源會使用 Azure 入口網站 提供方法,以將轉換新增至 DCR。 例如,從虛擬機收集文字可讓您在 Azure 入口網站 中指定轉換查詢。 不過,大部分的數據收集案例目前都需要您直接使用 DCR 定義來新增轉換。 這是本節所述的程式。
轉換查詢是在 DCR 的 [資料流] 區段中的 屬性中指定transformKql
。 這是將數據源與目的地配對的區段。 轉換會套用至數據流的傳入數據流,再傳送至目的地。 它只會套用至該數據流,即使在其他數據流中使用相同的數據流或目的地也一樣。
如果省略 屬性 transformKql
,或如果其值只是 source
,則不會套用任何轉換,而且傳入的數據不會修改傳送至目的地。
重要
轉換查詢必須位於 DCR 的單行上。 如果您要在 Azure 入口網站 中建立轉換,您可以使用多行進行可讀性,而且\n
會包含在每個新行的查詢中。
在下列範例中,沒有 transformKql
屬性,因此傳入的數據會傳送至目的地而不修改。
"dataFlows": [
{
"streams": [
"Microsoft-Syslog"
],
"destinations": [
"centralWorkspace"
]
}
]
在下列範例中, transformKql
具有的簡單查詢 source
,因此傳入的數據會傳送至目的地,而不需要修改。 其功能與上一個範例相同。
"dataFlows": [
{
"streams": [
"Microsoft-Syslog"
],
"transformKql": "source",
"destinations": [
"centralWorkspace"
]
}
]
在下列範例中, transformKql
具有篩選數據的查詢,因此只會將錯誤訊息傳送至目的地。
"dataFlows": [
{
"streams": [
"Microsoft-Syslog"
],
"transformKql": "source | where message has 'error'",
"destinations": [
"centralWorkspace"
]
}
]
建立工作區轉換 DCR
工作區轉換資料收集規則 (DCR) 是一個直接套用至 Log Analytics 工作區的特殊 DCR。 每個工作區只能有一個工作區轉換 DCR,但它可以包含任意數目數據表的轉換。
使用下列其中一種方法,為您的工作區建立工作區轉換 DCR,並在其中新增一或多個轉換。
您可以將轉換新增至支持的數據表,以在 Azure 入口網站 中建立工作區轉換 DCR。
在 Azure 入口網站 的 [Log Analytics 工作區] 功能表上,選取 [數據表]。 按兩下您感興趣的數據表右側,然後選取 [建立轉換]。
如果尚未為此工作區建立工作區轉換 DCR,請選取要建立工作區的選項。 如果已經建立它,則會選取該 DCR。 每個工作區只能有一個工作區轉換 DCR。
選取 [下一步] 以檢視資料表的範例資料。 按兩下 [轉換編輯器 ] 來定義轉換查詢。
然後,您可以編輯並執行轉換查詢,以查看資料表中實際數據的結果。 繼續修改和測試查詢,直到您取得您想要的結果為止。
當您滿意查詢時,請按兩下 [套用 ],然後按兩下 一步 ] 和 [建立 ] 以使用新的轉換儲存 DCR。
優化和監視轉換
轉換會針對使用 DCR 收集的每個記錄執行 KQL 查詢,因此請務必有效率地執行。 轉換運行時間有助於整體 數據擷取延遲,而需要長時間執行的轉換可能會影響數據收集管線的效能,並導致數據遺失。 最佳轉換應該要執行不超過 1 秒。 請參閱 將 Azure 監視器 中的記錄查詢優化,以取得在實作查詢做為轉換之前測試查詢的指引,以及優化未有效率執行的查詢的建議。
重要
如果轉換需要超過 20 秒,您可能會遇到資料遺失的情況。
因為轉換不會以互動方式執行,因此請務必持續監視它們,以確保它們正常執行,而且不會花費太多時間來處理數據。 如需監視轉換健康情況和效能的記錄和計量詳細資料,請參閱在 Azure 監視器中監視 DCR 資料收集並進行疑難排解。 這包括識別 KQL 中發生的任何錯誤,以及識別用來追蹤其執行持續時間的計量。
系統會針對轉換自動收集下列計量,並應定期檢閱,以確認您的轉換仍如預期般執行。 建立 計量警示規則 ,以在其中一個計量超過閾值時自動收到通知。
- 每分鐘記錄轉換持續時間
- 每分鐘記錄轉換錯誤數
啟用 DCR 錯誤記錄 來追蹤轉換或其他查詢中發生的任何錯誤。 建立 記錄警示規則 ,以在寫入此數據表的專案時自動收到通知。
指引
根據資料收集方法,有多個方法可建立轉換。 下表列出建立轉換的不同方法的指導。
資料集合 | 參考 |
---|---|
記錄內嵌 API | 使用 REST API 將資料傳送至 Azure 監視器記錄 (Azure 入口網站) 使用 REST API 將資料傳送至 Azure 監視器記錄 (Resource Manager 範本) |
具有 Azure 監視器代理程式的虛擬機器 | 將轉換新增至 Azure 監視器記錄 |
具有容器深入解析的 Kubernetes 叢集 | 容器見解中的資料轉換 |
Azure 事件中樞 | 教學課程:將事件從 Azure 事件中樞擷取至 Azure 監視器記錄 (公開預覽) |
下一步
- 使用 Azure 監視器代理程式從虛擬機器建立資料收集規則和其關聯。