Azure VM Disk IOPs report with Disk details
Logan
0
Reputation points
Hi,
I'm trying to fetch the IOPs report of the Azure VMs disk with some additional information such as Disk assigned letter, Disk Name, Disk size, Disk size utilization, Read Iops, Write IOPs & etc.. I've the query created but the problem is the results are duplicated multiple times. I tried to do diff join function but still the same.
Any help here is much appreciated, thank you!
// Summarize the disk data (only one row per disk/resource)
let DiskData =
arg("").Resources
| where type == "microsoft.compute/disks"
| project
diskName = name,
diskSizeGB = properties.diskSizeGB,
resourceGroup,
location,
OSType = properties.osType,
DiskType = sku.name,
_ResourceId = tolower(managedBy),
Throughput = properties.diskMBpsReadWrite,
IOPSReadWrite = properties.diskIOPSReadWrite,
AppName = tags.applicationName
| where DiskType contains "Premium";
// Summarize InsightsMetrics data (only one row per Computer/Disk combination)
let MetricsData =
InsightsMetrics
| where Name == "FreeSpaceMB"
| extend Tags = parse_json(Tags)
| extend
Disk = tostring(Tags["vm.azm.ms/mountId"])
,
diskSizeMB = toreal(Tags["vm.azm.ms/diskSizeMB"])
| summarize arg_max(TimeGenerated, *) by Computer, Disk, DiskResourceId = tolower(_ResourceId)
| extend DisksizeinGB = round(diskSizeMB / 1024, 2)
| extend AvailablespaceinGB = round(Val / 1024, 2)
| extend UsedSpaceinGB = round(DisksizeinGB - AvailablespaceinGB, 2)
| extend DiskUtilizationPercentage = round((UsedSpaceinGB / DisksizeinGB) * 100, 2)
| project
Computer,
Disk,
DiskResourceId,
DisksizeinGB,
AvailablespaceinGB,
UsedSpaceinGB,
DiskUtilizationPercentage;
//Summarize InisghtMetrics data for Read IOPS
let ReadIops =
InsightsMetrics
| where Origin == "vm.azm.ms"
and Namespace == "LogicalDisk"
| where Name == "ReadsPerSecond"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize max(Val) by Computer, Disk, _ResourceId, bin(TimeGenerated, 30d)
| project
TimeGenerated,
Computer,
Disk,
ReadIOPSMax = max_Val,
ReadIOPSResID = _ResourceId;
//Summarize InsightMetrics data for Write IOPS
let WriteIops =
InsightsMetrics
| where Origin == "vm.azm.ms"
and Namespace == "LogicalDisk"
| where Name == "WritesPerSecond"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize max(Val) by Computer, Disk, _ResourceId, bin(TimeGenerated, 30d)
| project
TimeGenerated,
Computer,
Disk,
WriteIOPSMax = max_Val,
WriteIOPSResID = _ResourceId;
// Join DiskData with MetricsData
let DiskMetrics = DiskData
| join kind=inner (MetricsData) on $left._ResourceId == $right.DiskResourceId
| project
Computer,
AppName,
resourceGroup,
location,
OSType,
DiskType,
diskName,
Disk,
DisksizeinGB,
diskSizeGB,
Throughput,
IOPSReadWrite,
AvailablespaceinGB,
UsedSpaceinGB,
DiskUtilizationPercentage;
// Join DiskMetrics with ReadIops
let DiskMetricsWithReadIOPS = DiskMetrics
| join kind=inner (ReadIops) on $left.Disk == $right.Disk and $left.Computer == $right.Computer
| project
diskName,
diskSizeGB,
resourceGroup,
location,
OSType,
DiskType,
Throughput,
IOPSReadWrite,
Computer,
AppName,
Disk,
DisksizeinGB,
AvailablespaceinGB,
UsedSpaceinGB,
DiskUtilizationPercentage,
ReadIOPSMax;
// Join DiskMetricsWithReadIOPS with WriteIops
let FinalDiskSummary = DiskMetricsWithReadIOPS
| join kind=inner (WriteIops) on $left.Disk == $right.Disk and $left.Computer == $right.Computer
| project
Computer,
AppName,
resourceGroup,
location,
OSType,
DiskType,
diskName,
diskSizeGB,
Disk,
DisksizeinGB,
AvailablespaceinGB,
UsedSpaceinGB,
DiskUtilizationPercentage,
Throughput,
IOPSReadWrite,
ReadIOPSMax,
WriteIOPSMax;
// Output the final summarized table
FinalDiskSummary
Azure Monitor
Azure Monitor
An Azure service that is used to collect, analyze, and act on telemetry data from Azure and on-premises environments.
3,579 questions
Sign in to answer