Один из самых важных аспектов работы с нагрузками в Azure – это контроль расходов. Это можно сделать, отслеживая использование ресурсов с помощью подробного отчета об использовании Azure. В этой статье вы узнаете, как создать сценарий PowerShell для удобного запроса использования ресурсов Azure и расходов по всем вашим ресурсам Azure по дате.
Ресурсы в Azure постоянно увеличивают ваш счет разными способами. Хотя вы можете видеть использование ресурсов через веб-портал, это ограничено. Но с помощью нескольких командлетов PowerShell вы можете создать удобный отчет, который даст вам общую картину того, какое использование (и, следовательно, расходы) у ваших ресурсов Azure.
Эта статья была создана на основе видео на YouTube от TechSnips. Если вы предпочитаете более визуальный подход, посмотрите видео. В противном случае продолжайте чтение!
Загрузка отчетов через центр учетной записи Azure
Вы можете загрузить множество различных отчетов об использовании из Центра учетной записи Azure. Центр учетной записи Azure – это веб-портал, который позволяет просматривать историю цикла оплаты, загружать счета и видеть обзор вашей подписки Azure.
Хотя вы можете загрузить отчеты об использовании Azure через Центр учетной записи Azure, нет возможности выбрать диапазон дат. Вы не можете ограничить использование в заданном диапазоне дат, потому что даты фиксированы и совпадают с вашим циклом оплаты.
Ниже приведен пример периода оплаты и ссылки для загрузки отчетов об использовании.

Внутри этих отчетов об использовании содержится много другой информации, которая вам может не понадобиться.
Возможно, вам нужны отчеты об использовании за последние 60 дней. Чтобы получить эту информацию с помощью Центра учетной записи Azure, вам придется загрузить отчеты об использовании хотя бы за три цикла оплаты, чтобы охватить все необходимые даты.
После загрузки отчетов вам придется удалить лишние данные. Затем вам нужно будет найти способ объединить эти данные как-то. Нет, спасибо! Это слишком много накладных расходов.
С помощью PowerShell вы можете создать переиспользуемый сценарий, функцию или модуль для получения отчетов о использовании ресурсов Azure. Эти отчеты можно запускать вручную с помощью нескольких строк команд или запланировать их выполнение для автоматизации.
Предварительные требования
Это статья-инструкция. Чтобы следовать инструкциям, вам потребуется выполнить несколько предварительных действий.
- Windows 10 или более поздняя версия.
- Windows PowerShell v5.1
- A script editor, like Notepad++ or an Integrated Scripting Environment (ISE) like Windows PowerShell ISE and Visual Studio Code.
- Подписка Azure.
- Модуль Azure PowerShell. Последняя версия на момент написания этого сообщения – 2.6.0. Этот модуль должен быть установлен на вашем компьютере. Если у вас его еще нет, вы можете установить его с помощью PowerShellGet
- Установленное соединение с Azure с помощью командлета Connect-AzAccount
Как получить данные об использовании ресурсов
Перед созданием скрипта давайте сначала обсудим основы, используя Get-UsageAggregates
cmdlet. Это командлет, который позволяет извлекать использование ресурсов Azure по диапазону дат, метрикам, таким как почасовое или ежедневное, и многому другому. Командлет Get-UsageAggregates
является основным командлетом, который выполняет основную часть магии, которую вы будете изучать в этой статье.
Чтобы продемонстрировать командлет Get-UsageAggregates
, предположим, что вам нужно найти использование ресурсов Azure с 1 апреля 2019 года по 12 сентября 2019 года. Ту же самую технику можно использовать для любого диапазона дат. Ниже вы увидите фрагмент кода для поиска данных использования на основе этих дат.
Parameter | Value | Usage Explanation |
ReportStartTime | 04-01-19 | This is the oldest date you want to retrieve.
(Месяц День Год) |
ReportEndTime | 09-12-19 | This is the latest date you want to retrieve.
(Месяц День Год) |
AggregationGranularity | Hourly | The granularity of data to return. Valid values are “Daily” and “Hourly” |
ShowDetails | $True | Indicates whether the instance-level details are expanded |
Если данные возвращаются, вы должны получить результаты, аналогичные этому скриншоту ниже. Вы можете увидеть, что фактические данные использования хранятся в свойстве UsageAggregations
.

Работа с разбиением на страницы в Get-UsageAggregates
В вышеприведенном разделе необходимо учитывать, что команда может вернуть много тысяч объектов, особенно для длинных диапазонов дат. Чтобы не перегрузить API, команда Get-UsageAggregates
возвращает только максимум 1000 результатов. Если вы сохранили переменную $usageData
, как описано в предыдущем разделе, вы можете подтвердить это, выполнив следующую команду $usageData.UsageAggregations.count
.
Что, если результатов больше 1000? Вам придется выполнить немного больше работы.
При анализе возвращаемых свойств Get-UsageAggregates
вы заметите свойство с именем ContinuationToken
как показано ниже. Вы можете видеть, что этот токен представляет собой длинную строку символов.

ContinuationToken
является указателем на следующий набор результатов. Это свойство действует как закладка, чтобы знать, с какой страницы получить следующую партию результатов.
Для демонстрации получите последний элемент в предыдущем результате, используя $usageData.UsageAggregations[-1]
, как показано ниже. Обратите внимание на времена Usage Start
и Usage End
.

Теперь передайте те же параметры команде Get-UsageAggregates
еще раз. Но на этот раз используйте параметр ContinuationToken
и значение свойства ContinuationToken
, возвращенное ранее. Ниже вы можете видеть пример того, как это сделать.
Теперь получите последний элемент в массиве свойства UsageAggregations
с помощью $usageData.UsageAggregations[-1]
. Сравните его с предыдущим результатом, чтобы подтвердить, что новые результаты отличаются.
Сравнение должно быть похоже на то, что вы видите ниже. Обратите внимание, что диапазоны дат разделены на 7 дней. Используя ContinuationToken
, вы получили вторую страницу результатов.


Построение функции отчетности об использовании ресурсов Azure
Вы должны знать, как работает постраничное отображение и как использовать свойство и параметр ContinuationToken
. Но что, если нужно получить десятки или даже сотни тысяч результатов? Вручную использовать токен в таком случае не сработает.
Давайте создадим сценарий PowerShell, который будет обрабатывать эту требование постраничного отображения для нас и позволит нам некоторую дополнительную гибкость. Этот сценарий позволит вам указывать свои собственные параметры и обрабатывать требование постраничного отображения. Кроме того, он даст вам гибкость для расширения его в будущем для выполнения других задач, если это потребуется.
Создание параметров
Сначала создайте функциональную основу. Ниже вы можете увидеть пример функции с именем Get-AzureUsage
. У этой функции три параметра, которые могут показаться вам знакомыми.
Ранее эти параметры определялись в самой командлете Get-UsageAggregates
. Теперь вы создаете “оберточную” функцию, которая будет передавать значения этому командлету.
Ниже приведена таблица, предоставляющая дополнительную информацию о всех этих параметрах.
Parameter | Usage |
FromTime | This is a mandatory parameter that accepts a DateTime value. The value represents the oldest date of the report. |
ToTime | This is a mandatory parameter that accepts a DateTime value. The value represents the latest date of the report. |
Interval | This is a non-empty parameter that accepts two possible values: ‘Daily’ and ‘Hourly’. The default value is Daily. This represents the granularity of the report to return. |
Запрос использования ресурсов
После создания функции и определения всех параметров пришло время заполнить остальную часть функции.
Ниже приведен оставшийся код функции Get-AzureUsage
. Обратите внимание на комментарии, чтобы глубже понять, что делает код.
Готовый скрипт (копируется/вставляется)
Собрав параметры и функциональный код вместе, вы получите готовый скрипт, как показано ниже. Теперь вы можете скопировать его в свой собственный скрипт или непосредственно в консоль PowerShell для тестирования.
Запрос использования ресурсов с помощью нашей функции
Пришло время проверить функцию. Вставьте код выше в скрипт и выполните его в текущей сессии PowerShell или скопируйте код непосредственно в сеанс PowerShell.
Совет: Если вы используете PowerShell ISE или Visual Studio Code, вы можете выделить код, который хотите импортировать, и нажать F8. В противном случае проще скопировать и вставить код в сеанс PowerShell.
Теперь запустите функцию, указав значения для FromTime
, ToTime
и интервал, в котором вы хотите видеть результаты. Ниже приведен пример вызова этой функции.
После запуска вы увидите подробные сообщения, если выбрали параметр Verbose
. Как видно из приведенного ниже примера, количество отчетов о использовании составляет 4 659. Вы также заметите, что функция запустила функцию Get-UsageAggregates
четыре раза, получая следующую страницу результатов каждый раз. Функция смогла сделать это, потому что использовала правильное значение ContinuationToken
для каждого вызова.

Фильтрация отчета
На данном этапе отчет содержит все сведения об использовании всех доступных типов ресурсов. Но вы можете отфильтровать отчет, чтобы отобразить только нужный ресурс. Для этого вы можете либо расширить функцию, чтобы добавить эту функциональность, либо передать вывод другим командам PowerShell через конвейер.
Вывод от функции Get-Azure
возвращает все типы ресурсов, но включает свойство с именем MeterCategory
. Это свойство определяет тип ресурса, который представляет данная строка. Например, чтобы получить только отчеты об использовании виртуальных машин Azure, вы можете сгруппировать все объекты с MeterCategory
равным Virtual Machines
с помощью командлета Group-Object
.
Командлет Group-Object
вернет количество строк в выводе в свойстве Count
. Затем, ограничивая вывод только свойствами Count
и Name
(значение для MeterCategory
), вы можете увидеть, сколько строк отчетов об использовании существует для всех типов ресурсов Azure.
Как вы можете видеть на скриншоте ниже, в отчете есть 768 записей для Виртуальных машин.

Чтобы продолжить идею фильтрации, вы также можете использовать вычисляемые свойства для создания более дружественного вывода, как показано ниже.
При выполнении фрагмента кода вы должны увидеть вывод, аналогичный показанному ниже.

Идеи для расширения отчета
Используя код из этой статьи, вы можете расширить функциональность созданного инструмента различными способами.
Вы можете экспортировать вывод в CSV файл и обрабатывать данные в Excel или создать HTML отчет, используя ConvertTo-HTML или модуль PowerShell EnhancedHTML2.
Зайдите еще дальше и добавьте также уведомление по электронной почте с помощью командлета Send-MailMessage. Мир у вас в кармане!
Вывод
В этом посте вы узнали, как получить отчеты о использовании ресурсов из Azure. Вы также узнали, как создать пользовательскую функцию PowerShell для автоматизации процесса и использовать эту функцию для обработки вывода.
В следующий раз, когда вы будете удивлены неожиданно высоким счетом от Azure, у вас не будет оправдания! Создайте себе функцию PowerShell для запроса использования ресурсов Azure в любое время, чтобы следить за этим счетом.
Дополнительная информация
Source:
https://adamtheautomator.com/azure-detailed-usage-report/