在 Azure 監視器中跨多個工作區和應用程式建立記錄查詢

Azure 監視器記錄支援查詢相同資源群組、另一個資源群組或其他訂用帳戶中的多個 Log Analytics 工作區和 Application Insights 應用程式。 這讓您對資料能有全系統的檢視。

如果您透過 Azure Lighthouse 管理其他 Azure Active Directory (Azure AD) 租用戶中的訂用帳戶,您可以在查詢中加入在這些客戶租用戶中建立的 Log Analytics 工作區

查詢儲存在多個工作區和應用程式中的資料,有兩種方法:

  1. 明確指定工作區和應用程式詳細資訊。 本文會詳述這項技巧。
  2. 隱含使用資源內容查詢。 在特定資源、資源群組或訂用帳戶環境中查詢時,將從內含這些資源資料的所有工作區,擷取相關資料。 不會擷取儲存在應用程式中的 Application Insights 資料。

重要事項

如果您使用以工作區為基礎的 Application Insights 資源,遙測會與所有其他記錄資料一起儲存在 Log Analytics 工作區中。 使用 workspace() 運算式撰寫查詢,其中包括多個工作區中的應用程式。 針對相同工作區中的多個應用程式,您不需要跨工作區查詢。

跨資源查詢限制

  • 單一查詢中可加入的 Application Insights 資源和 Log Analytics 工作區數量上限為 100 個。
  • 記錄警示中的跨資源查詢僅在目前的 scheduledQueryRules API 中受到支援。 如果您使用舊版 Log Analytics 警示 API,則必須切換至目前的 API
  • 跨資源的參考,例如另一個工作區,應該明確且無法參數化。 如需範例,請參閱 識別工作區資源

跨 Log Analytics 工作區和從 Application Insights 查詢

若要在查詢中參考另一個工作區,請使用 workspace 識別項,而若要查詢來自 Application Insights 的應用程式,請使用 app 識別項。

識別工作區資源

下列範例示範對 Log Analytics 工作區的查詢,從名為 contosoretail-it 工作區上的 Update 資料表,傳回記錄彙總計數。

您可以下列數種方式之一來完成識別工作區:

  • 資源名稱 - 是人類看得懂的工作區名稱,有時稱為「元件名稱」

    重要事項

    由於應用程式和工作區名稱並非唯一,因此這個識別碼可能語意模糊。 建議參考依限定名稱、工作區識別碼或 Azure 資源識別碼。

    workspace("contosoretail-it").Update | count

  • 限定名稱 - 是工作區的「全名」,由訂用帳戶名稱、資源群組及元件名稱所組成,格式如下:subscriptionName/resourceGroup/componentName

    workspace('contoso/contosoretail/contosoretail-it').Update | count

    注意

    由於 Azure 訂用帳戶名稱並非唯一,因此這個識別碼可能語意模糊。

  • 工作區識別碼 - 工作區識別碼是指派給每個工作區的唯一、不可變識別碼,會以全域唯一識別碼 (GUID) 來表示。

    workspace("b459b4u5-912x-46d5-9cb1-p43069212nb4").Update | count

  • Azure 資源識別碼 – Azure 定義的工作區唯一身分識別。 當資源名稱語意模糊時,您可以使用資源識別碼。 就工作區而言,格式為:/subscriptions/subscriptionId/resourcegroups/resourceGroup/providers/microsoft.OperationalInsights/workspaces/componentName

    例如:

    workspace("/subscriptions/e427519-5645-8x4e-1v67-3b84b59a1985/resourcegroups/ContosoAzureHQ/providers/Microsoft.OperationalInsights/workspaces/contosoretail-it").Update | count
    

識別應用程式

下列範例會傳回對 Application Insights 中名為 fabrikamapp 的應用程式所進行要求的彙總計數。

在 Application Insights 中識別應用程式可以使用 app(Identifier) 運算式來完成。 Identifier 引數會使用下列其中之一指定應用程式:

  • 資源名稱 - 是人類看得懂的應用程式名稱,有時稱為「元件名稱」

    app("fabrikamapp")

    注意

    以名稱來識別應用程式時,會假設該名稱在所有可存取的訂用帳戶中是唯一的。 如果您有多個應用程式具有該指定名稱,查詢就會因為語意模糊而失敗。 在此情況下,您必須使用其中一種其他識別碼。

  • 限定名稱 - 是應用程式的「完整名稱」,由訂用帳戶名稱、資源群組及元件名稱所組成,格式如下:subscriptionName/resourceGroup/componentName

    app("AI-Prototype/Fabrikam/fabrikamapp").requests | count

    注意

    由於 Azure 訂用帳戶名稱並非唯一,因此這個識別碼可能語意模糊。

  • 識別碼 - 應用程式的應用程式 GUID。

    app("b459b4f6-912x-46d5-9cb1-b43069212ab4").requests | count

  • Azure 資源識別碼 – Azure 定義的應用程式唯一身分識別。 當資源名稱語意模糊時,您可以使用資源識別碼。 格式為:/subscriptions/subscriptionId/resourcegroups/resourceGroup/providers/microsoft.OperationalInsights/components/componentName

    例如:

    app("/subscriptions/b459b4f6-912x-46d5-9cb1-b43069212ab4/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp").requests | count
    

跨多個資源執行查詢

您可以查詢任何資源執行個體的多個資源,這些資源執行個體可以是合併的工作區和應用程式。

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

union Update, workspace("contosoretail-it").Update, workspace("b459b4u5-912x-46d5-9cb1-p43069212nb4").Update
| where TimeGenerated >= ago(1h)
| where UpdateState == "Needed"
| summarize dcount(Computer) by Classification

使用多個資源的跨資源查詢

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

建立參考 Application Insights 資源範圍的查詢,如下所示。 withsource= SourceApp 命令會新增一個資料行,此資料行可指定傳送記錄的應用程式名稱。 將查詢儲存為函式,且別名為 applicationsScoping

// crossResource function that scopes my Application Insights resources
union withsource= SourceApp
app('Contoso-app1').requests, 
app('Contoso-app2').requests,
app('Contoso-app3').requests,
app('Contoso-app4').requests,
app('Contoso-app5').requests

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

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

注意

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

時間圖

後續步驟