diff --git a/README.md b/README.md index 0b8e7a0..cfb04a2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,23 @@ -# Azure-VM-Diagnostics-Pruning -This repo has a script that automates mass pruning of old Azure VM Diagnostic Metrics data in Azure Table Storage. +# Azure VM Diagnostic Metric Pruning +This repo has a script that automates mass pruning of old Azure VM Diagnostic Metrics data in Azure Table Storage. Across a fleet of VMs that are running for multiple years, diagnostic metrics can consume significant table storage capacity. This script is targeted at clearing a year's-worth of those metrics at a time for a particular storage account. + +I have personally run this against a storage account used by a single VM and cleared almost 300 GB of storage from metrics that I no longer need to store. + +**Prerequisites:** + +1. Tenant ID +2. Subscription ID +3. Resource Group Name +4. Storage Account Name + +![screenshot01](./images/screen01.png) +![screenshot02](./images/screen02.png) +![screenshot03](./images/screen03.png) + +## Contributing + +Contributions are welcome, please submit an issue or PR! + +## Disclaimer + +This script is provided as-is without any warranty or support. Use this script at your own risk. I am not responsible for any damages or data loss that may occur as a result of running this script. Before running this script, make sure to read and understand the code, and test it in a non-production environment. diff --git a/images/screen01.png b/images/screen01.png new file mode 100644 index 0000000..d99ec0c Binary files /dev/null and b/images/screen01.png differ diff --git a/images/screen02.png b/images/screen02.png new file mode 100644 index 0000000..cfa6516 Binary files /dev/null and b/images/screen02.png differ diff --git a/images/screen03.png b/images/screen03.png new file mode 100644 index 0000000..6100b28 Binary files /dev/null and b/images/screen03.png differ diff --git a/tableMetricsMaintenance.ps1 b/tableMetricsMaintenance.ps1 new file mode 100644 index 0000000..8df26f2 --- /dev/null +++ b/tableMetricsMaintenance.ps1 @@ -0,0 +1,38 @@ +## Set information & Connect +$TenantId = Read-Host -Prompt "Input the primary tenant ID" +$SubscriptionId = Read-Host -Prompt "Input the primary subscription ID" +Connect-AzAccount +Set-AzContext -Tenant $TenantId -Subscription $SubscriptionId + +$resourceGroup = Read-Host -Prompt "Resource Group Name" +$storageAccountName = Read-Host -Prompt "Storage Account Name" +$storageAccount = get-AzStorageAccount -ResourceGroupName $resourceGroup -Name $storageAccountName +$ctx = $storageAccount.Context + +# List & Count all tables & capacity in context +Get-AzStorageTable -Context $ctx +Write-Host "Total tables in this storage account:" +(Get-AzStorageTable -Context $ctx -Name "WADMetrics*").count + +# Filter the results by year and retrieve count +$year = Read-Host -Prompt "Filter by year (e.g. 2018)" +$year = "WADMetrics*" + $year + "*" +$tables = Get-AzStorageTable -Context $ctx -Name $year +$count = $tables.Count +Write-Host "Total tables when filtering by specified year: $count" + +# Prompt the user to continue with deletion or cancel +Write-Host "Do you want to remove all of the table entries for the specified year? Press 'y' to continue, otherwise press 'n' to cancel this script." -ForegroundColor Yellow +$key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") +if ($key.Character -eq "y") { + Write-Host "Continuing with script..." -ForegroundColor Green +} +else { + Write-Host "Cancelling script..." -ForegroundColor Red + return +} + +# Remove all WADMetrics tables with the year in their name without confirmation, then re-count +$deletedTables = Get-AzStorageTable -Context $ctx -Name $year +$deletedTables | Remove-AzStorageTable -Force +Write-Host "Total tables after deleting specified year: $count" \ No newline at end of file