Az Azure-erőforrások felfedezése a Resource Graph használatávalExplore your Azure resources with Resource Graph

Az Azure Resource Graph lehetővé teszi az Azure-erőforrások gyors és méretezhető feltárását és felderítését.Azure Resource Graph provides the ability to explore and discover your Azure resources quickly and at scale. Gyors válaszokra tervezve, nagyszerű módszer a környezet megismerésére és az Azure-erőforrásokkal kapcsolatos tulajdonságaira is.Engineered for fast responses, it's a great way to learn about your environment and also about the properties that exist on your Azure resources.

A virtuális gépek megismeréseExplore virtual machines

Az Azure-ban egy közös erőforrás egy virtuális gép.A common resource in Azure is a virtual machine. Erőforrástípusként a virtuális gépek számos olyan tulajdonsággal rendelkeznek, amely lekérdezhető.As a resource type, virtual machines have many properties that can be queried. Minden tulajdonság egy beállítást biztosít a keresett erőforrás szűréséhez vagy megkereséséhez.Each property provides an option for filtering or finding exactly the resource you're looking for.

Virtuális gépek felderítéseVirtual machine discovery

Kezdjük egy egyszerű lekérdezéssel, amely egyetlen virtuális gépet kap a környezetből, és megtekintheti a visszaadott tulajdonságokat.Let's start with a simple query to get a single VM from our environment and look at the properties returned.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| limit 1
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | limit 1"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | limit 1" | ConvertTo-Json -Depth 100

Megjegyzés

A Azure PowerShell Search-AzGraph parancsmag alapértelmezés szerint egy pscustomobject formájában kapja ad vissza.The Azure PowerShell Search-AzGraph cmdlet returns a PSCustomObject by default. Ahhoz, hogy a kimenet ugyanúgy nézzen ki, mint amit az Azure CLI ad vissza, a ConvertTo-Json rendszer a parancsmagot használja.To have the output look the same as what is returned by Azure CLI, the ConvertTo-Json cmdlet is used. A mélység alapértelmezett értéke 2.The default value for Depth is 2. A 100 értékre állításával az összes visszaadott szintet át kell alakítani.Setting it to 100 should convert all returned levels.

A JSON-eredmények a következő példához hasonló módon vannak strukturálva:The JSON results are structured similar to the following example:

[
  {
    "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/ContosoVM1",
    "kind": "",
    "location": "westus2",
    "managedBy": "",
    "name": "ContosoVM1",
    "plan": {},
    "properties": {
      "hardwareProfile": {
        "vmSize": "Standard_B2s"
      },
      "networkProfile": {
        "networkInterfaces": [
          {
            "id": "/subscriptions/<subscriptionId>/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/contosovm1535",
            "resourceGroup": "MyResourceGroup"
          }
        ]
      },
      "osProfile": {
        "adminUsername": "localAdmin",
        "computerName": "ContosoVM1",
        "secrets": [],
        "windowsConfiguration": {
          "enableAutomaticUpdates": true,
          "provisionVMAgent": true
        }
      },
      "provisioningState": "Succeeded",
      "storageProfile": {
        "dataDisks": [],
        "imageReference": {
          "offer": "WindowsServer",
          "publisher": "MicrosoftWindowsServer",
          "sku": "2016-Datacenter",
          "version": "latest"
        },
        "osDisk": {
          "caching": "ReadWrite",
          "createOption": "FromImage",
          "diskSizeGB": 127,
          "managedDisk": {
            "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
            "resourceGroup": "MyResourceGroup",
            "storageAccountType": "Premium_LRS"
          },
          "name": "ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
          "osType": "Windows"
        }
      },
      "vmId": "bbb9b451-6dc7-4117-bec5-c971eb1118c6"
    },
    "resourceGroup": "MyResourceGroup",
    "sku": {},
    "subscriptionId": "<subscriptionId>",
    "tags": {},
    "type": "microsoft.compute/virtualmachines"
  }
]

A tulajdonságok további információkat is közölnek a virtuális gép erőforrásával kapcsolatban.The properties tell us additional information about the virtual machine resource itself. Ezek a tulajdonságok többek között a következők: operációs rendszer, lemezek, címkék és az erőforráscsoport és az előfizetés, amely a tagja.These properties include: operating system, disks, tags, and the resource group and subscription it's a member of.

Virtuális gépek hely szerintVirtual machines by location

A Virtual Machines erőforrással kapcsolatos tudnivalókat a Location (hely ) tulajdonság használatával számítjuk fel.Taking what we learned about the virtual machines resource, let's use the location property to count all virtual machines by location. A lekérdezés frissítéséhez el fogjuk távolítani a korlátot, és összegezjük a hely értékeinek számát.To update the query, we'll remove the limit and summarize the count of location values.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| summarize count() by location
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | summarize count() by location"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | summarize count() by location"

A JSON-eredmények a következő példához hasonló módon vannak strukturálva:The JSON results are structured similar to the following example:

[
  {
    "count_": 386,
    "location": "eastus"
  },
  {
    "count_": 215,
    "location": "southcentralus"
  },
  {
    "count_": 59,
    "location": "westus"
  }
]

Most láthatjuk, hogy hány virtuális gép van az egyes Azure-régiókban.We can now see how many virtual machines we have in each Azure region.

Virtuális gépek SKU szerintVirtual machines by SKU

Lépjen vissza az eredeti virtuális gép tulajdonságaiba, és próbálja meg megkeresni az összes olyan virtuális gépet, amelynek az SKU mérete Standard_B2s.Going back to the original virtual machine properties, let's try to find all the virtual machines that have a SKU size of Standard_B2s. A visszaadott JSON-t láthatjuk, hogy az a Properties. hardwareprofile. vmsize fájlban van tárolva.Looking at the JSON returned, we see that it's stored in properties.hardwareprofile.vmsize. A lekérdezés frissítésével megkeresheti az összes olyan virtuális gépet, amely megfelel az adott méretnek, és csak a virtuális gép és a régió nevét adja vissza.We'll update the query to find all VMs that match this size and return just the name of the VM and region.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines' and properties.hardwareProfile.vmSize == 'Standard_B2s'
| project name, resourceGroup
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' and properties.hardwareProfile.vmSize == 'Standard_B2s' | project name, resourceGroup"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' and properties.hardwareProfile.vmSize == 'Standard_B2s' | project name, resourceGroup"

Prémium szintű felügyelt lemezekhez csatlakoztatott virtuális gépekVirtual machines connected to premium-managed disks

A Standard_B2s virtuális gépekhez csatolt prémium szintű felügyelt lemezek részleteinek beszerzéséhez kiterjesztjük a lekérdezést, hogy visszaállítsa a felügyelt lemezek erőforrás-azonosítóját.To get the details of premium-managed disks that are attached to these Standard_B2s virtual machines, we expand the query to return the resource ID of those managed disks.

Resources
| where type =~ 'Microsoft.Compute/virtualmachines' and properties.hardwareProfile.vmSize == 'Standard_B2s'
| extend disk = properties.storageProfile.osDisk.managedDisk
| where disk.storageAccountType == 'Premium_LRS'
| project disk.id
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualmachines' and properties.hardwareProfile.vmSize == 'Standard_B2s' | extend disk = properties.storageProfile.osDisk.managedDisk | where disk.storageAccountType == 'Premium_LRS' | project disk.id"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualmachines' and properties.hardwareProfile.vmSize == 'Standard_B2s' | extend disk = properties.storageProfile.osDisk.managedDisk | where disk.storageAccountType == 'Premium_LRS' | project disk.id"

Az eredmény a lemez-azonosítók listája.The result is a list of disk IDs.

Felügyelt lemezek felderítéseManaged disk discovery

Az előző lekérdezés első rekordjával megvizsgáljuk az első virtuális géphez csatolt felügyelt lemezen található tulajdonságokat.With the first record from the previous query, we'll explore the properties that exist on the managed disk that was attached to the first virtual machine. A frissített lekérdezés a lemez AZONOSÍTÓját használja, és megváltoztatja a típust.The updated query uses the disk ID and changes the type.

Példa az előző lekérdezés kimenetére például:Example output from the previous query for example:

[
  {
    "disk_id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166"
  }
]
Resources
| where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'

A lekérdezés futtatása előtt honnan tudtuk, hogy a típusnak most a Microsoft. számítás/lemezek?Before running the query, how did we know the type should now be Microsoft.Compute/disks? Ha megtekinti a teljes azonosítót, a /providers/Microsoft.Compute/Disks/ a karakterlánc részeként fog megjelenni.If you look at the full ID, you'll see /providers/Microsoft.Compute/disks/ as part of the string. Ez a karakterlánc-kódrészlet a keresendő típussal kapcsolatos célzást nyújt.This string fragment gives you a hint as to what type to search for. Alternatív módszerként a korlátot a típus alapján távolíthatja el, ehelyett csak az azonosító mező alapján kereshet.An alternative method would be to remove the limit by type and instead only search by the ID field. Mivel az azonosító egyedi, a rendszer csak egy rekordot ad vissza, és a Type (típus ) tulajdonsága ezt a részletet adja meg.As the ID is unique, only one record would be returned and the type property on it provides that detail.

Megjegyzés

Ahhoz, hogy ez a példa működjön, a saját környezetből származó eredménnyel kell helyettesítenie az azonosító mezőt.For this example to work, you must replace the ID field with a result from your own environment.

az graph query -q "Resources | where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'"

A JSON-eredmények a következő példához hasonló módon vannak strukturálva:The JSON results are structured similar to the following example:

[
  {
    "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
    "kind": "",
    "location": "westus2",
    "managedBy": "",
    "name": "ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
    "plan": {},
    "properties": {
      "creationData": {
        "createOption": "Empty"
      },
      "diskSizeGB": 127,
      "diskState": "ActiveSAS",
      "provisioningState": "Succeeded",
      "timeCreated": "2018-09-14T12:17:32.2570000Z"
    },
    "resourceGroup": "MyResourceGroup",
    "sku": {
      "name": "Premium_LRS",
      "tier": "Premium"
    },
    "subscriptionId": "<subscriptionId>",
    "tags": {
      "environment": "prod"
    },
    "type": "microsoft.compute/disks"
  }
]

A virtuális gépek megismerése nyilvános IP-címek kereséséhezExplore virtual machines to find public IP addresses

Ez a lekérdezés először megkeresi és tárolja a virtuális gépekhez csatlakozó összes hálózati adapter (NIC) erőforrását.This set of queries first finds and stores all the network interfaces (NIC) resources connected to virtual machines. Ezután a lekérdezések a hálózati adapterek listájának használatával keresik meg a nyilvános IP-címekhez tartozó IP-címek erőforrásait, és tárolják ezeket az értékeket.Then the queries use the list of NICs to find each IP address resource that is a public IP address and store those values. Végül a lekérdezések megadják a nyilvános IP-címek listáját.Finally, the queries provide a list of the public IP addresses.

# Use Resource Graph to get all NICs and store in the 'nics.txt' file
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project nic = tostring(properties['networkProfile']['networkInterfaces'][0]['id']) | where isnotempty(nic) | distinct nic | limit 20" --output table | tail -n +3 > nics.txt

# Review the output of the query stored in 'nics.txt'
cat nics.txt
# Use Resource Graph to get all NICs and store in the $nics variable
$nics = Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project nic = tostring(properties['networkProfile']['networkInterfaces'][0]['id']) | where isnotempty(nic) | distinct nic | limit 20"

# Review the output of the query stored in the variable
$nics.nic

A következő lekérdezésben a fájl (Azure CLI) vagy a változó (Azure PowerShell) segítségével lekérheti a kapcsolódó hálózati adapterek erőforrásait, és megtudhatja, hogy van-e nyilvános IP-cím a hálózati ADAPTERhez csatlakoztatva.Use the file (Azure CLI) or variable (Azure PowerShell) in the next query to get the related network interface resources details where there's a public IP address attached to the NIC.

# Use Resource Graph with the 'nics.txt' file to get all related public IP addresses and store in 'publicIp.txt' file
az graph query -q="Resources | where type =~ 'Microsoft.Network/networkInterfaces' | where id in ('$(awk -vORS="','" '{print $0}' nics.txt | sed 's/,$//')') | project publicIp = tostring(properties['ipConfigurations'][0]['properties']['publicIPAddress']['id']) | where isnotempty(publicIp) | distinct publicIp" --output table | tail -n +3 > ips.txt

# Review the output of the query stored in 'ips.txt'
cat ips.txt
# Use Resource Graph  with the $nics variable to get all related public IP addresses and store in $ips variable
$ips = Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Network/networkInterfaces' | where id in ('$($nics.nic -join "','")') | project publicIp = tostring(properties['ipConfigurations'][0]['properties']['publicIPAddress']['id']) | where isnotempty(publicIp) | distinct publicIp"

# Review the output of the query stored in the variable
$ips.publicIp

Végül a fájlban (az Azure CLI-ben) vagy a változóban (Azure PowerShell) tárolt nyilvános IP-cím-erőforrások listáját használja a tényleges nyilvános IP-cím lekéréséhez a kapcsolódó objektumból és a megjelenítésből.Last, use the list of public IP address resources stored in the file (Azure CLI) or variable (Azure PowerShell) to get the actual public IP address from the related object and display.

# Use Resource Graph with the 'ips.txt' file to get the IP address of the public IP address resources
az graph query -q="Resources | where type =~ 'Microsoft.Network/publicIPAddresses' | where id in ('$(awk -vORS="','" '{print $0}' ips.txt | sed 's/,$//')') | project ip = tostring(properties['ipAddress']) | where isnotempty(ip) | distinct ip" --output table
# Use Resource Graph with the $ips variable to get the IP address of the public IP address resources
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' | where id in ('$($ips.publicIp -join "','")') | project ip = tostring(properties['ipAddress']) | where isnotempty(ip) | distinct ip"

Ha szeretné megtudni, hogyan hajthatja végre ezeket a lépéseket egyetlen lekérdezésben az join operátorral, tekintse meg a virtuális gépek listázása hálózati interfésszel és nyilvános IP- címmel című mintát.To see how to accomplish these steps in a single query with the join operator, see the List virtual machines with their network interface and public IP sample.

Következő lépésekNext steps