Interroger des données parmi des espaces de travail, des applications et des ressources Log Analytics dans Azure Monitor

Il existe deux façons d’interroger des données à partir de plusieurs espaces de travail, applications et ressources :

  • Spécifiez explicitement l’espace de travail, l’application ou les informations de ressource à l’aide des espaces workspace(), app() ou resource(), comme décrit dans cet article.
  • Implicitement, en utilisant des requêtes de contexte de ressource. Lorsque vous interrogez dans le contexte d’une ressource, d’un groupe de ressources ou d’un abonnement spécifiques, la requête récupère les données pertinentes de tous les espaces de travail contenant des données pour ces ressources. Les requêtes de contexte de ressource ne récupèrent pas de données à partir de ressources Application Insights classiques.

Cet article explique comment utiliser les expressions workspace(), app()et resource() pour interroger des données à partir de plusieurs espaces de travail, applications et ressources Log Analytics.

Si vous gérez des abonnements dans d’autres locataires Microsoft Entra via Azure Lighthouse, vous pouvez inclure dans vos requêtes des espaces de travail Log Analytics créés dans ces locataires clients.

Important

Si vous utilisez une ressource Application Insights basée sur un espace de travail, les données de télémétrie sont stockées dans un espace de travail Log Analytics avec toutes les autres données de journal. Utilisez l’expression workspace() pour interroger des données à partir d’applications dans plusieurs espaces de travail. Vous n’avez pas besoin de requête entre espaces de travail pour interroger des données de plusieurs applications dans le même espace de travail.

Autorisations requises

  • Vous devez disposer d’autorisations Microsoft.OperationalInsights/workspaces/query/*/read dans les espaces de travail Log Analytics que vous interrogez, comme fourni par le rôle intégré de Lecteur Log Analytics, par exemple.
  • Pour enregistrer une requête, vous devez disposer des autorisations microsoft.operationalinsights/querypacks/queries/action pour le pack de requêtes dans lequel vous souhaitez l’enregistrer, comme indiqué par le rôle intégré du Contributeur Log Analytics, par exemple.

Limites

  • Les requêtes entre ressources et entre services ne prennent pas en charge les fonctions paramétrables et les fonctions dont la définition inclut d’autres expressions entre espaces de travail ou entre services, notamment adx(), arg(), resource(), workspace() et app().
  • Vous pouvez inclure jusqu’à 100 espace de travail Log Analytics ou ressources Application Insights dans une requête unique.
  • L’interrogation d’un grand nombre de ressources peut ralentir considérablement la requête.
  • Les requêtes entre ressources dans les alertes de recherche dans les journaux sont uniquement prises en charge dans l’API scheduledQueryRules. Si vous utilisez l’API Log Analytics Alerts héritée, vous devez basculer sur l’API actuelle.
  • Les références aux ressources croisées, comme un autre espace de travail, doivent être explicites et ne peuvent pas être paramétrisées.

Interroger parmi les espaces de travail, les applications et les ressources à l’aide de fonctions

Cette section explique comment interroger des espaces de travail, des applications et des ressources à l’aide de fonctions avec et sans utiliser de fonction.

Requête sans fonction

Vous pouvez interroger plusieurs ressources depuis l’une de vos instances de ressource. Ces ressources peuvent être des espaces de travail et des applications combinés.

Exemple de requête sur trois espaces de travail :

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

Pour plus d’informations sur les opérateurs union, where et summarize, consultez opérateur union, opérateur whereet opérateur summarize.

Requête avec fonction

Quand vous utilisez une requête inter-ressources pour mettre en corrélation des données provenant de plusieurs espaces de travail Log Analytics et composants Application Insights, la requête peut devenir complexe et difficile à gérer. Vous devez utiliser des fonctions de requête de journal Azure Monitor pour séparer la logique de la requête de l’étendue des ressources de la requête. Cette méthode simplifie la structure de votre requête. L’exemple suivant montre comment superviser plusieurs composants Application Insights et visualiser le nombre de ressources ayant échoué par nom d’application.

Créez une requête semblable à l’exemple suivant qui fait référence à l’étendue des composants Application Insights. La commande withsource= SourceApp ajoute une colonne qui désigne le nom de l’application ayant envoyé le journal. Enregistrez cette requête en tant que fonction avec l’alias 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

Vous pouvez à présent utiliser cette fonction dans une requête inter-ressources, comme dans l’exemple suivant. L’alias de fonction applicationsScoping retourne l’union de la table requests à partir de toutes les applications définies. Ensuite, la requête filtre les demandes ayant échoué et permet de visualiser les tendances par application. L’opérateur parse est facultatif dans cet exemple. Il extrait le nom de l’application de la propriété SourceApp.

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

Remarque

Cette méthode ne peut pas être utilisée avec les alertes de recherche dans les journaux, car la validation d’accès des ressources de règle d’alerte, notamment les espaces de travail et les applications, s’effectue au moment de la création de l’alerte. L’ajout de nouvelles ressources à la fonction après la création de l’alerte n’est pas pris en charge. Si vous préférez utiliser la fonction pour déterminer l’étendue des ressources dans les alertes de recherche dans les journaux, vous devez modifier la règle d’alerte dans le portail ou en utilisant un modèle Azure Resource Manager pour mettre à jour les ressources incluses dans l’étendue. Vous pouvez également inclure la liste des ressources dans la requête d’alerte de recherche dans les journaux.

Interroger des espaces de travail Log Analytics à l’aide de workspace()

Utilisez l’expression workspace(), afin de récupérer des données à partir d’un espace de travail spécifique du même groupe de ressources, d’un autre groupe de ressources ou d’un autre abonnement. Vous pouvez utiliser cette expression pour inclure des données de journal dans une requête Application Insights et pour interroger des données de plusieurs espaces de travail dans une requête de journal.

Syntaxe

workspace(Identificateur)

Arguments

*Identifier* : permet d’identifier l’espace de travail en utilisant l’un des formats du tableau suivant.

Identificateur Description Exemple
id GUID de l’espace de travail espace de travail (« 00000000-0000-0000-0000-000000000000 »)
ID de la ressource Azure Identificateur de la ressource Azure espace de travail (« /subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail »)

Exemples

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"))

Interroger des applications Application Insights classiques à l’aide d’app()

Utilisez l’expression app pour récupérer des données à partir d’une ressource Application Insights classique du même groupe de ressources, d’un autre groupe de ressources ou d’un autre abonnement. Si vous utilisez une ressource Application Insights basée sur un espace de travail, les données de télémétrie sont stockées dans un espace de travail Log Analytics avec toutes les autres données de journal. Utilisez l’expression workspace() pour interroger des données à partir d’applications dans plusieurs espaces de travail. Vous n’avez pas besoin de requête entre espaces de travail pour interroger des données de plusieurs applications dans le même espace de travail.

Syntaxe

app(Identificateur)

Arguments

*Identifier* : permet d’identifier l’application à l’aide de l’un des formats du tableau ci-dessous.

Identificateur Description Exemple
id GUID de l’application app (« 00000000-0000-0000-0000-000000000000 »)
ID de la ressource Azure Identificateur de la ressource Azure app (« /subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp »)

Exemples

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"))

Mettre en corrélation les données entre les ressources à l’aide de resource()

L’expression resource est utilisée dans une requête Azure Monitor limitée à une ressource pour récupérer des données d’autres ressources.

Syntaxe

resource(Identificateur)

Arguments

*Identifier* : permet d’identifier la ressource, le groupe de ressources ou l’abonnement à partir duquel mettre les données en corrélation.

Identificateur Description Exemple
Ressource Inclut des données relatives à la ressource. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm")
Groupe de ressources ou abonnement Inclut des données relatives à la ressource et à toutes les ressources qu’il contient. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup)

Exemples

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

Étapes suivantes

Pour une vue d’ensemble des requêtes de journal et de la manière dont les données de journal d’Azure Monitor sont structurées, voir Analyser les données de journal dans Azure Monitor.