在 Azure 監視器中跨 Log Analytics 工作區、應用程式和資源查詢數據

有兩種方式可從多個工作區、應用程式和資源查詢數據:

本文說明如何使用 workspace()app()resource() 表示式,從多個 Log Analytics 工作區、應用程式和資源查詢數據。

如果您透過 Azure Lighthouse 管理其他 Microsoft Entra 租使用者的訂用帳戶,您可以在 查詢中包含那些客戶租 使用者中建立的 Log Analytics 工作區。

重要

如果您使用 以工作區為基礎的 Application Insights 資源,遙測會與所有其他記錄數據一起儲存在 Log Analytics 工作區中。 workspace()使用表達式從多個工作區中的應用程式查詢數據。 您不需要跨工作區查詢,即可從相同工作區中的多個應用程式查詢數據。

需要的權限

  • 例如,您必須具有Microsoft.OperationalInsights/workspaces/query/*/read您查詢的Log Analytics工作區許可權,例如Log Analytics讀取器內建角色所提供的許可權。
  • 若要儲存查詢,您必須具有microsoft.operationalinsights/querypacks/queries/action想要儲存查詢的查詢套件許可權,例如Log Analytics 參與者內建角色所提供的查詢套件。

限制

  • 跨資源和跨服務查詢不支援其定義包含其他跨工作區或跨服務表達式的參數化函式和函式,包括 adx()arg()resource()workspace()app()
  • 您可以在單一查詢中包含最多 100 個 Log Analytics 工作區或傳統 Application Insights 資源。
  • 跨大量資源進行查詢可能會大幅降低查詢的速度。
  • 記錄搜尋警示中的跨資源查詢只有在目前的 scheduledQueryRules API 中才支援。 如果您使用舊版Log Analytics警示 API,則必須 切換至目前的 API
  • 跨資源的參考,例如另一個工作區,應該明確且無法參數化。

使用函式跨工作區、應用程式和資源進行查詢

本節說明如何使用函式搭配和不使用函式來查詢工作區、應用程式和資源。

不使用函式的查詢

您可以從任何資源實例查詢多個資源。 這些資源可以是結合工作區和應用程式。

跨三個工作區的查詢範例:

union 
  Update, 
  workspace("00000000-0000-0000-0000-000000000001").Update, 
  workspace("00000000-0000-0000-0000-000000000002").Update
| where TimeGenerated >= ago(1h)
| where UpdateState == "Needed"
| summarize dcount(Computer) by Classification

如需聯集、where 和 summarize 運算子的詳細資訊,請參閱等位運算子、where 運算子summarize 運算子

使用函式進行查詢

當您使用跨資源查詢來讓多個 Log Analytics 工作區和 Application Insights 元件的數據相互關聯時,查詢可能會變得複雜且難以維護。 您應該使用 Azure 監視器記錄查詢 中的函式,將查詢邏輯與查詢資源的範圍區隔開。 這個方法可簡化查詢結構。 下列範例示範如何監視多個 Application Insights 元件,並以應用程式名稱將失敗的要求計數可視化。

建立類似下列範例的查詢,參考 Application Insights 元件的範圍。 命令 withsource= SourceApp 會新增資料行,指定傳送記錄的應用程式名稱。 將查詢儲存為具有別名 applicationsScoping的函式。

// crossResource function that scopes my Application Insights components
union withsource= SourceApp
app('00000000-0000-0000-0000-000000000000').requests, 
app('00000000-0000-0000-0000-000000000001').requests,
app('00000000-0000-0000-0000-000000000002').requests,
app('00000000-0000-0000-0000-000000000003').requests,
app('00000000-0000-0000-0000-000000000004').requests

您現在可以 在跨資源查詢中使用此函式 ,例如下列範例。 函式別名 applicationsScoping 會從所有定義的應用程式傳回要求數據表的聯集。 然後查詢會篩選失敗的要求,並依應用程式將趨勢可視化。 在此範例中,運算符 parse 是選擇性的。 它會從屬性擷 SourceApp 取應用程式名稱。

applicationsScoping 
| where timestamp > ago(12h)
| where success == 'False'
| parse SourceApp with * '(' applicationId ')' * 
| summarize count() by applicationId, bin(timestamp, 1h) 
| render timechart

注意

此方法無法與記錄搜尋警示搭配使用,因為警示規則資源的存取驗證,包括工作區和應用程式,是在警示建立期間執行。 不支援在建立警示之後,將新的資源新增至函式。 如果您想要在記錄搜尋警示中使用函式來進行資源範圍界定,您必須在入口網站中編輯警示規則,或使用 Azure Resource Manager 範本來更新限定範圍的資源。 或者,您可以在記錄搜尋警示查詢中包含資源清單。

使用 workspace() 跨 Log Analytics 工作區進行查詢

workspace()使用 表達式,從相同資源群組、另一個資源群組或其他訂用帳戶中的特定工作區擷取數據。 您可以使用此表示式在 Application Insights 查詢中包含記錄數據,以及查詢記錄查詢中多個工作區的數據。

語法

workspace(Identifier)

引數

*Identifier*:使用下表中的其中一種格式來識別工作區。

識別碼 描述 範例
識別碼 工作區的 GUID workspace(“000000000-0000-0000-0000-00000000000000”)
Azure 資源識別碼 Azure 資源的標識碼 workspace(“/subscriptions/00000000-0000-0000-0000-00000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail”)

範例

workspace("00000000-0000-0000-0000-000000000000").Update | count
workspace("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail").Event | count
union 
( workspace("00000000-0000-0000-0000-000000000000").Heartbeat | where Computer == "myComputer"),
(app("00000000-0000-0000-0000-000000000000").requests | where cloud_RoleInstance == "myRoleInstance")
| count  
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat), (app("00000000-0000-0000-0000-000000000000").requests) | where TimeGenerated between(todatetime("2023-03-08 15:00:00") .. todatetime("2023-04-08 15:05:00"))

使用 app 跨傳統 Application Insights 應用程式進行查詢()

app使用 表達式,從相同資源群組、另一個資源群組或其他訂用帳戶中的特定傳統 Application Insights 資源擷取數據。 如果您使用 以工作區為基礎的 Application Insights 資源,遙測會與所有其他記錄數據一起儲存在 Log Analytics 工作區中。 workspace()使用表達式從多個工作區中的應用程式查詢數據。 您不需要跨工作區查詢,即可從相同工作區中的多個應用程式查詢數據。

語法

app(Identifier)

引數

*Identifier*:使用下表中的其中一種格式來識別應用程式。

識別碼 描述 範例
識別碼 應用程式的 GUID app(“00000000-0000-0000-0000-0000000000000”)
Azure 資源識別碼 Azure 資源的標識碼 app(“/subscriptions/00000000-0000-0000-0000-00000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp”)

範例

app("00000000-0000-0000-0000-000000000000").requests | count
app("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp").requests | count
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat | where Computer == "myComputer"),
(app("00000000-0000-0000-0000-000000000000").requests | where cloud_RoleInstance == "myColumnInstance")
| count  
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat), (app("00000000-0000-0000-0000-000000000000").requests)
| where TimeGenerated between(todatetime("2023-03-08 15:00:00") .. todatetime("2023-04-08 15:05:00"))

使用 resource() 將資源之間的數據相互關聯

表達式resource用於範圍設定為資源的 Azure 監視器查詢中,以從其他資源擷取數據。

語法

resource(Identifier)

引數

*Identifier*:識別要從中相互關聯數據的資源、資源群組或訂用帳戶。

識別碼 描述 範例
資源 包含資源的數據。 resource(“/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm”)
資源群組或訂用帳戶 包含資源的數據及其包含的所有資源。 resource(“/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxx/resourcesgroups/myresourcegroup)

範例

union (Heartbeat),(resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm").Heartbeat) | summarize count() by _ResourceId, TenantId
union (Heartbeat),(resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup).Heartbeat) | summarize count() by _ResourceId, TenantId

下一步

如需記錄查詢的概觀,以及 Azure 監視器記錄數據的結構化方式,請參閱 分析 Azure 監視器 中的記錄數據。