Partager via


Exemples de requêtes Azure Resource Graph pour les serveurs avec Azure Arc

Azure Resource Graph est un service Azure qui vous permet d’interroger à grande échelle, ce qui vous aide à régir efficacement votre environnement. Vous créez des requêtes à l’aide du langage de requête Kusto (KQL). Pour plus d’informations, consultez Présentation du langage de requête Azure Resource Graph.

Cet article fournit la liste des exemples de requêtes Azure Resource Graph pour les serveurs avec Azure Arc. Ces requêtes ciblent le microsoft.hybridcompute/machines type de ressource et retournent des informations telles que l’appartenance au domaine, les extensions installées, les versions de l’agent et les détails du système d’exploitation. Vous pouvez exécuter ces requêtes via Azure PowerShell ou Azure CLI, ou dans le portail Azure à l’aide de l’Explorateur Resource Graph. Modifiez les requêtes en fonction de vos besoins.

Conseil / Astuce

Vous pouvez utiliser Microsoft Copilot dans Azure pour créer des requêtes Azure Resource Graph à l’aide du langage naturel. Pour plus d’informations, consultez Obtenir des informations sur les ressources à l’aide de Microsoft Copilot dans Azure.

Exemples de requêtes

Obtenir le nombre et le pourcentage de serveurs avec Arc par domaine

Cette requête synthétise la propriété domainName sur les serveurs avec Azure Arc et utilise un calcul avec bin afin de créer une colonne Pct pour le pourcentage de serveurs avec Arc par domaine.

Resources
| where type == 'microsoft.hybridcompute/machines'
| project domain=tostring(properties.domainName)
| summarize Domains=make_list(domain), TotalMachineCount=sum(1)
| mvexpand EachDomain = Domains
| summarize PerDomainMachineCount = count() by tostring(EachDomain), TotalMachineCount
| extend Pct = 100 * bin(todouble(PerDomainMachineCount) / todouble(TotalMachineCount), 0.001)
az graph query -q "Resources | where type == 'microsoft.hybridcompute/machines' | project domain=tostring(properties.domainName) | summarize Domains=make_list(domain), TotalMachineCount=sum(1) | mvexpand EachDomain = Domains | summarize PerDomainMachineCount = count() by tostring(EachDomain), TotalMachineCount | extend Pct = 100 * bin(todouble(PerDomainMachineCount) / todouble(TotalMachineCount), 0.001)"

Lister toutes les extensions installées sur un serveur avec Azure Arc

Tout d’abord, cette requête utilise project sur le type de ressource de machine hybride pour obtenir l’ID en majuscules (toupper()), obtenir le nom d’ordinateur et le système d’exploitation en cours d’exécution sur la machine. L’obtention de l’ID de ressource en majuscules est un bon moyen de préparer une opération join avec une autre propriété. Ensuite, la requête utilise join avec kind en tant que leftouter pour obtenir les extensions en faisant correspondre une version majuscule de substring de l’identifiant de l’extension. La partie de l’ID avant /extensions/<ExtensionName> ayant le même format que l’ID de machine hybride, nous utilisons cette propriété pour join. summarize est ensuite utilisé avec make_list sur le nom de l’extension de machine virtuelle pour combiner le nom de chaque extension où ID, OSName et ComputerName sont les mêmes dans une propriété de tableau unique. Pour finir, nous effectuons un tri par OSName en minuscules avec asc. Par défaut, order by est décroissant.

Resources
| where type == 'microsoft.hybridcompute/machines'
| project
  id,
  JoinID = toupper(id),
  ComputerName = tostring(properties.osProfile.computerName),
  OSName = tostring(properties.osName)
| join kind=leftouter(
  Resources
  | where type == 'microsoft.hybridcompute/machines/extensions'
  | project
    MachineId = toupper(substring(id, 0, indexof(id, '/extensions'))),
    ExtensionName = name
) on $left.JoinID == $right.MachineId
| summarize Extensions = make_list(ExtensionName) by id, ComputerName, OSName
| order by tolower(OSName) asc
az graph query -q "Resources | where type == 'microsoft.hybridcompute/machines' | project id, JoinID = toupper(id), ComputerName = tostring(properties.osProfile.computerName), OSName = tostring(properties.osName) | join kind=leftouter( Resources | where type == 'microsoft.hybridcompute/machines/extensions' | project  MachineId = toupper(substring(id, 0, indexof(id, '/extensions'))),  ExtensionName = name ) on \$left.JoinID == \$right.MachineId | summarize Extensions = make_list(ExtensionName) by id, ComputerName, OSName | order by tolower(OSName) asc"

Lister les serveurs avec Arc n’exécutant pas la dernière version de l’agent publiée

Cette requête retourne tous les serveurs avec Arc exécutant une version obsolète d’Azure Connected Machine Agent. Les agents dont l’état est Expiré sont exclus des résultats. La requête utilise leftouterjoin pour rassembler les recommandations d’Advisor soulevées sur les agents de machine connectée identifiés comme obsolètes et les ordinateurs hybrides pour filtrer tout agent qui n’a pas communiqué avec Azure sur une période donnée.

AdvisorResources
| where type == 'microsoft.advisor/recommendations'
| where properties.category == 'HighAvailability'
| where properties.shortDescription.solution == 'Upgrade to the latest version of the Azure Connected Machine agent'
| project
    id,
    JoinId = toupper(properties.resourceMetadata.resourceId),
    machineName = tostring(properties.impactedValue),
    agentVersion = tostring(properties.extendedProperties.installedVersion),
    expectedVersion = tostring(properties.extendedProperties.latestVersion)
| join kind=leftouter(
  Resources
  | where type == 'microsoft.hybridcompute/machines'
  | project
    machineId = toupper(id),
    status = tostring (properties.status)
  ) on $left.JoinId == $right.machineId
| where status != 'Expired'
| summarize by id, machineName, agentVersion, expectedVersion
| order by tolower(machineName) asc
az graph query -q "AdvisorResources | where type == 'microsoft.advisor/recommendations' | where properties.category == 'HighAvailability' | where properties.shortDescription.solution == 'Upgrade to the latest version of the Azure Connected Machine agent' | project  id,  JoinId = toupper(properties.resourceMetadata.resourceId),  machineName = tostring(properties.impactedValue),  agentVersion = tostring(properties.extendedProperties.installedVersion),  expectedVersion = tostring(properties.extendedProperties.latestVersion) | join kind=leftouter( Resources | where type == 'microsoft.hybridcompute/machines' | project  machineId = toupper(id),  status = tostring (properties.status) ) on \$left.JoinId == \$right.machineId | where status != 'Expired' | summarize by id, machineName, agentVersion, expectedVersion | order by tolower(machineName) asc"

Répertorier les serveurs avec Arc avec SQL Server, PostgreSQL ou MySQL installés

Cette requête retourne tous les serveurs activés par Arc ayant SQL Server, PostgreSQL ou MySQL installés.

resources
| where type =~ 'microsoft.hybridcompute/machines'
| extend machineId = tolower(tostring(id)), datacenter = iif(isnull(tags.Datacenter), '', tags.Datacenter), status = tostring(properties.status)
| extend mssqlinstalled = coalesce(tobool(properties.detectedProperties.mssqldiscovered),false)
| extend pgsqlinstalled = coalesce(tobool(properties.detectedProperties.pgsqldiscovered),false)
| extend mysqlinstalled = coalesce(tobool(properties.detectedProperties.mysqldiscovered),false)
| extend osSku = properties.osSku, osName = properties.osName, osVersion = properties.osVersion
| extend coreCount = tostring(properties.detectedProperties.logicalCoreCount), totalPhysicalMemoryinGB = tostring(properties.detectedProperties.totalPhysicalMemoryInGigabytes) 
| extend operatingSystem = iif(isnotnull(osSku), osSku, osName)
| where mssqlinstalled or mysqlinstalled or pgsqlinstalled
| project id ,name, type, resourceGroup, subscriptionId, location, kind, osVersion, status, osSku,coreCount,totalPhysicalMemoryinGB,tags, mssqlinstalled, mysqlinstalled, pgsqlinstalled
| sort by (tolower(tostring(name))) asc
az graph query -q "resources | where type =~ 'microsoft.hybridcompute/machines' | extend machineId = tolower(tostring(id)), datacenter = iif(isnull(tags.Datacenter), '', tags.Datacenter), status = tostring(properties.status) | extend mssqlinstalled = coalesce(tobool(properties.detectedProperties.mssqldiscovered),false) | extend pgsqlinstalled = coalesce(tobool(properties.detectedProperties.pgsqldiscovered),false) | extend mysqlinstalled = coalesce(tobool(properties.detectedProperties.mysqldiscovered),false) | extend osSku = properties.osSku, osName = properties.osName, osVersion = properties.osVersion | extend coreCount = tostring(properties.detectedProperties.logicalCoreCount), totalPhysicalMemoryinGB = tostring(properties.detectedProperties.totalPhysicalMemoryInGigabytes)  | extend operatingSystem = iif(isnotnull(osSku), osSku, osName) | where mssqlinstalled or mysqlinstalled or pgsqlinstalled | project id ,name, type, resourceGroup, subscriptionId, location, kind, osVersion, status, osSku,coreCount,totalPhysicalMemoryinGB,tags, mssqlinstalled, mysqlinstalled, pgsqlinstalled | sort by (tolower(tostring(name))) asc"

Étapes suivantes