最近收到個需求,想看一下Azure虛擬機建立的記錄,詳細瞭解最近雲上都有什麼新增的資源,這其實也是個比較正常的需求,隨着雲的使用愈來愈普遍,不少企業早已不知足於簡單的用雲,而是更聚焦在如何把雲用好上,更核心的一點是愈來愈多的企業開始關注雲上的cost問題,所以資源使用的合理性愈來愈是企業關注的一個重點
ide
迴歸主題,那麼如何在Azure實現這個需求呢,其實在資源組的deployment記錄中是能夠找到VM的建立記錄的,可是這種方式收集到的信息很零散,咱們也不可能每一個資源組都去一個個查看,整理這些信息,那麼有什麼好的辦法呢?
3d
其實咱們能夠直接經過Azure的PowerShell解決這個問題,只須要編寫一個簡單的腳本就能夠了,首先運行如下命令,獲取到Azure近三個月的全部log日誌
$logs = Get-AzureRmLog -ResourceProvider Microsoft.Compute -StartTime (Get-Date).AddDays(-90) -Maxrecord 100000
foreach($log in $logs) { if(($log.OperationName.Value -eq 'Microsoft.Compute/virtualMachines/write') -and ($log.SubStatus.Value -eq 'Created')) { Write-Output "$($log.caller) created vm $($log.Id.split("/")[8]) at $($log.EventTimestamp) in Resource Group $($log.ResourceGroupName)" } }
這樣就能看到VM建立的記錄了!orm
那麼若是想把這些信息彙總到Excel裏呢?能夠經過如下的代碼便可!
blog
[pscustomobject[]]$VMObjects = $null foreach ($log in $logs) { if (($log.OperationName.Value -eq 'Microsoft.Compute/virtualMachines/write') -and ($log.SubStatus.Value -eq 'Created')) { Write-Output "$($log.caller) created vm $($log.Id.split("/")[8]) at $($log.EventTimestamp) in Resource Group $($log.ResourceGroupName)" $VMObject = New-Object -TypeName psobject $VMObject | Add-Member -MemberType NoteProperty -Name SubscriptionName -Value $SubscriptionName $VMObject | Add-Member -MemberType NoteProperty -Name SubscriptionID -Value $SubscriptionID $VMObject | Add-Member -MemberType NoteProperty -Name ResourceGroup -Value $log.ResourceGroupName $VMObject | Add-Member -MemberType NoteProperty -Name VMName -Value $log.Id.split("/")[8] $VMObject | Add-Member -MemberType NoteProperty -Name Time -Value $log.EventTimestamp $VMObjects += $VMObject } } $OutputPath="C:\vm.csv" $VMObjects | Export-Csv -NoTypeInformation -LiteralPath $OutputPath
最後要說的是,這種方法只能收集到90天之內的日誌,由於Azure平臺開放給用戶的最長時間的log就是90天ip