Azure 監視器 日誌中的資料會以一組記錄形式儲存在 Log Analytics 工作空間或 Application Insights 應用程式中。 每種資料型態都有一組獨特的欄位。 許多資料型態都有標準欄位,這些欄位在多種類型中都很常見。 本文將描述這些欄位,並提供如何在查詢中使用它們的範例。
Application Insights 中的工作區型應用程式會將其資料儲存至 Log Analytics 工作區,並使用與工作區中其他資料表相同的標準資料行。 傳統應用程式會個別儲存其資料,並具有本文中所指定的不同標準資料行。
下表總結了標準欄位。 經典的 Application Insights 資料表在標示時會使用不同的欄位名稱。
| Column | Description | 適用對象 |
|---|---|---|
TenantId |
Log Analytics 工作區的識別碼。 | Workspace |
TimeGenerated |
紀錄由資料來源建立的日期與時間。 經典的 Application Insights 表格使用 Timestamp。 |
工作區與經典 Application Insights |
_TimeReceived |
記錄被 Azure 監視器 擷取點接收的日期與時間。 | Workspace |
Type |
記錄所取資料表的名稱。 經典的 Application Insights 表格使用 itemType。 |
工作區與經典 Application Insights |
_ItemId |
紀錄的唯一識別碼。 | Workspace |
_ResourceId |
記錄所關聯資源的唯一識別碼。 | Workspace |
_SubscriptionId |
該紀錄所關聯資源的訂閱 ID。 | Workspace |
_IsBillable |
所接收的資料是否可計費。 | Workspace |
_BilledSize |
計費資料的大小(以位元組為單位) | Workspace |
註解
有些標準欄位在 schema 檢視或 Log Analytics 的 IntelliSense 裡都看不到。 除非你在輸出中明確指定欄位,否則它們不會顯示在查詢結果中。
TenantId 欄位
TenantId 資料行保存 Log Analytics 工作區的 ID。
TimeGenerated 欄位
TimeGenerated 欄位包含資料來源建立紀錄的日期與時間。 欲了解更多資訊,請參閱 Azure 監視器 中的日誌資料擷取時間。
TimeGenerated 提供用於依時間進行篩選或總結的通用資料行。 當您在 Azure 入口網站中針對檢視或儀表板選取時間範圍時,就是使用 TimeGenerated 來篩選結果。
支援經典 Application Insights 資源的資料表會使用 Timestamp 欄位,而非 TimeGenerated 欄位。 TimeGenerated 值不能比收到的時間早兩天,也不能超過未來一天。 如果值值超出該範圍,Azure 監視器 會用實際收到的時間替換。
範例
下列查詢會傳回前一週中每天建立的錯誤事件數目。
Event
| where EventLevelName == "Error"
| where TimeGenerated between(startofweek(ago(7days))..endofweek(ago(7days)))
| summarize count() by bin(TimeGenerated, 1day)
| sort by TimeGenerated asc
_TimeReceived 欄
_TimeReceived 資料行包含 Azure 監視器內嵌點在 Azure 雲端中接收到記錄的日期和時間。 這很適合用來識別資料來源與雲端之間的延遲問題。 例如,網路問題會導致從代理程式傳送資料延遲。 如需詳細資料,請參閱 Azure 監視器中的記錄資料內嵌時間。
註解
每次使用時都會計算 _TimeReceived 欄。 此程序會耗用大量資源。 請避免使用此程序來篩選大量記錄。 週期性使用此函數可能會導致查詢執行持續時間增加。
下列查詢會為來自代理程式的事件記錄提供每小時的平均延遲。 這包括從代理程式到雲端的時間,以及記錄可供記錄查詢使用的總時間。
Event
| where TimeGenerated > ago(1d)
| project TimeGenerated, TimeReceived = _TimeReceived, IngestionTime = ingestion_time()
| extend AgentLatency = toreal(datetime_diff('Millisecond',TimeReceived,TimeGenerated)) / 1000
| extend TotalLatency = toreal(datetime_diff('Millisecond',IngestionTime,TimeGenerated)) / 1000
| summarize avg(AgentLatency), avg(TotalLatency) by bin(TimeGenerated,1hr)
類型欄
Type 資料行會保留資料表名稱,而從中擷取的記錄也可視為記錄類型。 此資料行適用於合併多份資料表中記錄的查詢 (例如使用 search 運算子的查詢),可區分不同類型的記錄。
$table 可以用來取代某些查詢中的 Type。
註解
支援傳統 Application Insights 資源的資料表會使用 itemType 資料行,而不是 Type 資料行。
範例
下列查詢會依據類型傳回在過去一小時收集到的記錄數量。
search *
| where TimeGenerated > ago(1h)
| summarize count() by Type
_ItemId 欄
_ItemId 資料行會保存記錄的唯一識別碼。
_ResourceId 欄
_ResourceId 資料行會保存記錄相關聯資源的唯一識別碼。 這會提供給您一個標準資料行以用來只將查詢範圍限定於來自特定資源的記錄,或聯結跨多個資料表的相關資料。
就 Azure 資源而言,_ResourceId 的值為 Azure 資源識別碼 URL。 此欄僅限於 Azure 資源(包括 Azure Arc 資源),或是擷取期間已指出資源識別碼的自訂記錄。
註解
某些資料類型的欄位已包含 Azure 資源識別碼,或者至少包含該識別碼的部分,例如訂用帳戶識別碼。 雖然這些欄位是為了向下相容而保留,但建議使用_ResourceId來進行交叉相關,因為這樣比較一致。
範例
下列是將每一部電腦的效能和事件資料相聯結的查詢。 其中顯示識別碼為 101 且處理器使用率超過 50% 的所有事件。
Perf
| where CounterName == "% User Time" and CounterValue > 50 and _ResourceId != ""
| join kind=inner (
Event
| where EventID == 101
) on _ResourceId
下列是將 AzureActivity 記錄與 SecurityEvent 記錄相聯結的查詢。 顯示使用者在登入這些機器後進行的所有活動操作。
AzureActivity
| where
OperationName in ("Restart Virtual Machine", "Create or Update Virtual Machine", "Delete Virtual Machine")
and ActivityStatus == "Succeeded"
| join kind= leftouter (
SecurityEvent
| where EventID == 4624
| summarize LoggedOnAccounts = makeset(Account) by _ResourceId
) on _ResourceId
下列查詢會剖析每個 Azure 資源群組的 _ResourceId,以及彙總已計費的資料量。
union withsource = tt *
| where _IsBillable == true
| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/"
resourceGroup "/providers/" provider "/" resourceType "/" resourceName
| summarize Bytes=sum(_BilledSize) by resourceGroup | sort by Bytes nulls last
請謹慎使用這些 union withsource=tt * 查詢,因為跨資料型態掃描執行成本高昂。
使用 _SubscriptionId 資料行,一律會比剖析 _ResourceId 資料行來進行擷取更有效率。
_SubscriptionId 欄
_SubscriptionId 資料行會儲存記錄所關聯資源的訂閱識別碼。 這會提供給您一個標準資料行以用來只將查詢範圍限定於來自特定訂用帳戶的記錄,或比較不同的訂用帳戶。
對於Azure資源,_SubscriptionId 的價值是 Azure 資源 ID URL 的訂閱部分。 此欄位僅限於 Azure 資源,包括 Azure Arc 資源,或是在擷取過程中標示訂閱 ID 的自訂日誌。
註解
某些資料類型的欄位已包含 Azure 訂用帳戶識別碼。 雖然這些欄位是為了向下相容而保留,但建議使用_SubscriptionId欄來進行交叉相關,因為這樣比較一致。
範例
下列查詢會檢查特定訂用帳戶電腦的效能資料。
Perf
| where TimeGenerated > ago(24h) and CounterName == "memoryAllocatableBytes"
| where _SubscriptionId == "ebb79bc0-aa86-44a7-8111-cabbe0c43993"
| summarize avgMemoryAllocatableBytes = avg(CounterValue) by Computer
下列查詢會剖析每個 Azure 訂用帳戶的 _ResourceId,以及彙總已計費的資料量。
union withsource = tt *
| where _IsBillable == true
| summarize Bytes=sum(_BilledSize) by _SubscriptionId | sort by Bytes nulls last
如 _ResourceId欄所述,請節制使用 union withsource = tt * 查詢,因為跨資料型態掃描執行成本高昂。
_IsBillable 欄
_IsBillable 欄位指定所擷取的資料是否視為可計費。
_IsBillable 等於false的資料不會產生資料擷取、保留、工作空間複製或歸檔費用。
範例
要取得傳送計費資料型別的電腦清單,請使用以下查詢。 如 _ResourceId欄所述,請節制使用 union withsource = tt * 查詢,因為跨資料型態掃描執行成本高昂。
union withsource = tt *
| where _IsBillable == true
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName
加以延伸,即可傳回每小時傳送計費資料類型的電腦計數:
union withsource = tt *
| where _IsBillable == true
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize dcount(computerName) by bin(TimeGenerated, 1h) | sort by TimeGenerated asc
_BilledSize 欄
如果 _IsBillable 為 true,_BilledSize 欄指定的資料位元組大小會計入 Azure 帳戶的費用。 欲知計算帳單大小的詳細資料,請參閱資料大小計算。
範例
要查看每台電腦所接收的計費事件大小,請使用 _BilledSize 欄位,該欄位以位元組表示大小:
union withsource = tt *
| where _IsBillable == true
| summarize Bytes=sum(_BilledSize) by Computer | sort by Bytes nulls last
若要查看每個訂用帳戶所輸入的可計費事件大小,請使用下列查詢:
union withsource = tt *
| where _IsBillable == true
| summarize Bytes=sum(_BilledSize) by _SubscriptionId | sort by Bytes nulls last
若要查看每個資源群組所攝取的可計費事件大小,請使用下列查詢:
union withsource = tt *
| where _IsBillable == true
| parse _ResourceId with "/subscriptions/" SubscriptionId "/resourcegroups/" ResourceGroupName "/" *
| summarize Bytes=sum(_BilledSize) by _SubscriptionId, ResourceGroupName | sort by Bytes nulls last
若要查看每部電腦所擷取的事件計數,請使用下列查詢:
union withsource = tt *
| summarize count() by Computer | sort by count_ nulls last
若要查看每部電腦所擷取的可計費事件計數,請使用下列查詢:
union withsource = tt *
| where _IsBillable == true
| summarize count() by Computer | sort by count_ nulls last
若要查看特定電腦的可計費資料類型計數,請使用下列查詢:
union withsource = tt *
| where Computer == "computer name"
| where _IsBillable == true
| summarize count() by tt | sort by count_ nulls last
下一步
- 深入了解 Azure 監視器記錄資料的儲存方式。
- 參與撰寫記錄查詢的課程。
- 參與在記錄查詢中聯結資料表的課程。