Partager via


Interroger vos sauvegardes à l’aide d’Azure Resource Graph (ARG)

Cet article explique comment interroger des informations de sauvegarde pour vos ressources Azure à l’aide d’Azure Resource Graph (ARG) sans coût supplémentaire. ARG étend Azure Resource Management et vous permet d’explorer les ressources efficacement et à grande échelle sur plusieurs abonnements.

Principaux avantages de l’utilisation d’Azure Resource Graph pour les métadonnées de sauvegarde

Les principaux avantages de l’utilisation d’ARG pour interroger vos métadonnées de sauvegarde sont les suivants :

  • Interrogez les ressources entre les abonnements avec un filtrage avancé, un regroupement et un tri par propriétés de ressource.
  • Accédez aux détails de sauvegarde en temps réel, y compris les travaux de sauvegarde actifs.
  • Combinez les données de sauvegarde avec les informations de ressources Azure associées, telles que les machines virtuelles et les comptes de stockage.

Prise en main

Pour commencer à interroger vos sauvegardes à l’aide du service ARG, procédez comme suit :

  1. Recherchez l’Explorateur Resource Graph dans le portail Azure. Sélectionnez-le pour être redirigé vers l’éditeur de requête ARG.

    Rechercher dans le groupe de ressources Azure

    Le volet gauche affiche toutes les tables (et leurs schémas associés) pouvant être interrogés.

    • La table RecoveryServicesResources contient la plupart des enregistrements liés à la sauvegarde, comme les détails de la tâche et de l’instance de sauvegarde. Et ainsi de suite.
    • La table Ressources contient des informations sur toutes les ressources Azure de niveau supérieur, comme les coffres Recovery Services, les machines virtuelles Azure, les comptes de stockage, etc.

    Tables et schémas associés pouvant être interrogés

  2. Pour explorer les données de l’une de ces tables, écrivez des requêtes Kusto dans l’éditeur de requête et cliquez sur Exécuter la requête.

    Vous pouvez télécharger la sortie de ces requêtes au format CSV à partir de l’Explorateur Resource Graph. Vous pouvez également utiliser ces requêtes dans le service personnalisé Automation à l’aide de n’importe quel client Automation pris en charge par ARG, comme PowerShell, l’interface CLI ou le kit SDK. Vous pouvez également créer des classeurs personnalisés dans le portail Azure à l’aide d’ARG comme source de données.

Notes

  • Les travaux de sauvegarde/restauration des 14 derniers jours sont disponibles et peuvent être interrogés dans ARG. Si vous souhaitez interroger des enregistrements historiques, nous vous recommandons d’utiliser les Journaux Azure Monitor.
  • ARG vous permet d’interroger les ressources pour lesquelles vous disposez des droits RBAC appropriés.

Exemples de requêtes

Voici quelques exemples de requêtes ARG sur vos données de sauvegarde que vous pouvez utiliser dans les automatisations et tableaux de bord personnalisés.

Répertorier toutes les machines virtuelles Azure configurées pour la sauvegarde

RecoveryServicesResources 
| where type in~ ('Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems')
| extend vaultName = case(type =~ 'microsoft.dataprotection/backupVaults/backupInstances',split(split(id, '/Microsoft.DataProtection/backupVaults/')[1],'/')[0],type =~ 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems',split(split(id, '/Microsoft.RecoveryServices/vaults/')[1],'/')[0],'--')
| extend dataSourceType = case(type=~'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems',properties.backupManagementType,type =~ 'microsoft.dataprotection/backupVaults/backupInstances',properties.dataSourceSetInfo.datasourceType,'--')
| extend friendlyName = properties.friendlyName
| extend dsResourceGroup = split(split(properties.dataSourceInfo.resourceID, '/resourceGroups/')[1],'/')[0]
| extend dsSubscription = split(split(properties.dataSourceInfo.resourceID, '/subscriptions/')[1],'/')[0]
| extend lastRestorePoint = properties.lastRecoveryPoint
| extend primaryLocation = properties.dataSourceInfo.resourceLocation
| extend policyName = case(type =~ 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems',properties.policyName, type =~ 'microsoft.dataprotection/backupVaults/backupInstances', properties.policyInfo.name, '--')
| extend protectionState = properties.currentProtectionState
| where protectionState in~ ('ConfiguringProtection','ProtectionConfigured','ConfiguringProtectionFailed','ProtectionStopped','SoftDeleted','ProtectionError')

Répertorier toutes les tâches de sauvegarde sur les serveurs Azure Database pour PostgreSQL au cours de la dernière semaine

RecoveryServicesResources 
| where type in~ ('Microsoft.DataProtection/backupVaults/backupJobs')
| extend vaultName = case(type =~ 'microsoft.dataprotection/backupVaults/backupJobs',properties.vaultName,type =~ 'Microsoft.RecoveryServices/vaults/backupJobs',split(split(id, '/Microsoft.RecoveryServices/vaults/')[1],'/')[0],'--')
| extend friendlyName = case(type =~ 'microsoft.dataprotection/backupVaults/backupJobs',strcat(properties.dataSourceSetName , '/', properties.dataSourceName),type =~ 'Microsoft.RecoveryServices/vaults/backupJobs', properties.entityFriendlyName, '--')
| extend dataSourceType = case(type =~ 'Microsoft.RecoveryServices/vaults/backupJobs',properties.backupManagementType,type =~ 'microsoft.dataprotection/backupVaults/backupJobs',properties.dataSourceType,'--')
| extend backupInstanceName = properties.backupInstanceId
| extend dsResourceGroup = split(split(properties.dataSourceId, '/resourceGroups/')[1],'/')[0]| extend dsSubscription = split(split(properties.dataSourceId, '/subscriptions/')[1],'/')[0]
| extend status = properties.status
| extend dataSourceId = properties.dataSourceId
| extend primaryLocation = properties.dataSourceLocation
| extend jobStatus = case (properties.status == 'Completed' or properties.status == 'CompletedWithWarnings','Succeeded',properties.status == 'Failed','Failed',properties.status == 'InProgress', 'Started', properties.status), operation = case(type =~ 'microsoft.dataprotection/backupVaults/backupJobs' and tolower(properties.operationCategory) =~ 'backup' and properties.isUserTriggered == 'true',strcat('adhoc',properties.operationCategory),type =~ 'microsoft.dataprotection/backupVaults/backupJobs', tolower(properties.operationCategory), type =~ 'Microsoft.RecoveryServices/vaults/backupJobs' and tolower(properties.operation) =~ 'backup' and properties.isUserTriggered == 'true',strcat('adhoc',properties.operation),type =~ 'Microsoft.RecoveryServices/vaults/backupJobs',tolower(properties.operation), '--'),startTime = todatetime(properties.startTime),endTime = properties.endTime, duration = properties.duration
| project id, name, friendlyName, resourceGroup, vaultName, dataSourceType, operation, jobStatus, startTime, duration, backupInstanceName, dsResourceGroup, dsSubscription, status, primaryLocation, dataSourceId
| where (startTime >= ago(7d))

Répertorier toutes les machines virtuelles Azure qui ne sont pas configurées pour la sauvegarde

Resources
| where type in~ ('microsoft.compute/virtualmachines','microsoft.classiccompute/virtualmachines') 
| extend resourceId=tolower(id) 
| join kind = leftouter ( RecoveryServicesResources
| where type == "microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems"
| where properties.backupManagementType == "AzureIaasVM"
| project resourceId = tolower(tostring(properties.sourceResourceId)), backupItemid = id, isBackedUp = isnotempty(id) ) on resourceId 
| extend isProtected = isnotempty(backupItemid)
| where (isProtected == (0))
| project id,name,resourceGroup,location,tags

Liste de toutes les stratégies de sauvegarde utilisées pour les machines virtuelles Azure

RecoveryServicesResources
| where type == 'microsoft.recoveryservices/vaults/backuppolicies'
| extend vaultName = case(type == 'microsoft.recoveryservices/vaults/backuppolicies', split(split(id, 'microsoft.recoveryservices/vaults/')[1],'/')[0],type == 'microsoft.recoveryservices/vaults/backuppolicies', split(split(id, 'microsoft.recoveryservices/vaults/')[1],'/')[0],'--')
| extend datasourceType = case(type == 'microsoft.recoveryservices/vaults/backuppolicies', properties.backupManagementType,type == 'microsoft.dataprotection/backupVaults/backupPolicies',properties.datasourceTypes[0],'--')
| project id,name,vaultName,resourceGroup,properties,datasourceType
| where datasourceType == 'AzureIaasVM'

Répertorier toutes les machines virtuelles associées à une stratégie de sauvegarde donnée

RecoveryServicesResources
| where type == "microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems"
| project propertiesJSON = parse_json(properties)
| where propertiesJSON.backupManagementType == "AzureIaasVM"
| project VMID=propertiesJSON.sourceResourceId, PolicyID=propertiesJSON.policyId
| where PolicyID == "<ARM ID of the given policy>"

Répertorier toutes les stratégies de sauvegarde utilisées pour les serveurs Azure Database pour PostgreSQL

RecoveryServicesResources 
| where type in~ ('Microsoft.DataProtection/BackupVaults/backupPolicies')
| extend vaultName = case(type =~ 'microsoft.dataprotection/backupVaults/backupPolicies', split(split(id, '/Microsoft.DataProtection/backupVaults/')[1],'/')[0],type =~ 'microsoft.recoveryservices/vaults/backupPolicies', split(split(id, '/Microsoft.RecoveryServices/vaults/')[1],'/')[0],'--')
| extend datasourceType = case(type =~ 'Microsoft.RecoveryServices/vaults/backupPolicies', properties.backupManagementType,type =~ 'microsoft.dataprotection/backupVaults/backupPolicies',properties.datasourceTypes[0],'--')
| project id,name,vaultName,resourceGroup,properties,datasourceType
| where (datasourceType in~ ('Microsoft.DBforPostgreSQL/servers/databases'))

Étapes suivantes

En savoir plus sur Azure Resource Graph