Удалите старые данные диагностики Windows Azure из хранилища таблиц (счетчики производительности и т. Д.)

У меня есть несколько виртуальных машин Windows, работающих в Azure, которые настроены для сбора счетчиков производительности и журналов событий.

Все это настраивается в разделе «Параметры диагностики ...» ресурса виртуальной машины на портале Azure. Существует агент диагностики Windows Azure, который собирает эти данные на виртуальной машине и сохраняет их в учетной записи хранения (внутри хранилища таблиц).

Все эти собранные данные (счетчики производительности, показатели, журналы и т. Д.) Не имеют какой-либо политики хранения, и похоже, нет никакого способа ее настроить. Таким образом, он просто накапливается в хранилище таблиц учетной записи хранения навсегда.

Вот где моя проблема - сейчас в этих таблицах слишком много данных (несколько терабайт в моем случае), и просто их хранение стоит больших денег. И со временем он будет только увеличиваться.

Соответствующие таблицы учетной записи хранения представляют собой такие таблицы, как:

  • WADMetrics* (Таблица показателей диагностики Windows Azure)
  • WADPerformanceCountersTable (Таблица счетчиков производительности диагностики Windows Azure)
  • WASWindowsEventLogsTable (Таблица журналов событий Windows для диагностики Windows Azure)

Есть ли способ как удалить старые данные в этих таблицах, чтобы ничего не сломалось? Или, что еще лучше, есть какой-нибудь способ настроить политику хранения или настроить ее так, чтобы она не накапливалась вечно?


person Tom Pažourek    schedule 05.02.2019    source источник


Ответы (3)


Есть ли способ удалить старые данные в этих таблицах, чтобы они ничего не сломали?

Вам нужно будет сделать это вручную. Это будет работать следующим образом: вы сначала запросите данные, которые необходимо удалить, а затем, как только вы получите данные, вы удалите их. Атрибут PartitionKey сущностей, хранящихся в этих таблицах, на самом деле представляет собой значение даты / времени (в тиках с добавлением нулей, чтобы сделать его строкой одинаковой длины), поэтому вам нужно будет взять значения даты / времени от и до, преобразовать их в тики, сделайте это строкой длиной 19 символов (добавив соответствующее количество нулей в начале) и запросите данные. Как только вы получите данные на стороне клиента, вы отправите запрос на удаление обратно в хранилище таблиц.

Чтобы ускорить весь процесс, вы можете сделать несколько вещей:

  • При запросе данных используйте проекцию запроса, чтобы вернуть только атрибуты PartitionKey и RowKey, поскольку для удаления необходимы только эти два атрибута.
  • Для удаления вы можете использовать пакетную транзакцию объекта. Это может значительно ускорить операцию удаления.
  • Для более быстрого удаления вы можете развернуть виртуальную машину в том же регионе, что и ваша учетная запись хранения. Таким образом, вы не платите за исходящие данные.

Некоторое время назад я написал в блоге сообщение, которое может оказаться полезным: https://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/.

Или, что еще лучше, есть ли способ настроить политику хранения или настроить ее так, чтобы она не накапливалась вечно?

К сожалению, нет, по крайней мере, на сегодняшний день. Есть параметр хранения, но он только для больших двоичных объектов.

person Gaurav Mantri    schedule 05.02.2019
comment
Большое спасибо за ответ! Есть ли какие-нибудь программные инструменты, которые могут помочь с удалением? Я мог бы написать свой собственный, используя ваши инструкции, но я раньше не использовал API хранилища таблиц, поэтому я ищу ярлыки, если они есть. Я ожидал, что это обычная проблема для всех, кто использует виртуальные машины Azure, но я не смог найти ни много людей с такой же проблемой, ни готовых решений. - person Tom Pažourek; 06.02.2019
comment
Раньше у нас был инструмент (Azure Management Studio) только для этого, но недавно мы отказались от него. У нас есть еще один инструмент (Cerebrata Cerulean), с помощью которого вы можете сделать то же самое, хотя и немного сложнее. Пожалуйста, свяжитесь со мной (gmantri at cerebrata dot com) наедине, и я помогу вам. - person Gaurav Mantri; 06.02.2019

Только что столкнулся с этой проблемой, когда отслеживал, что больше всего стоит в подписке.

Одним из полезных инструментов является обозреватель хранилища Azure. Вы можете перейти к таблице, проверить ее содержимое, использовать кнопку «Статистика таблицы» для подсчета строк таблицы, множественного выбора и удаления строк.

Для одной небольшой виртуальной машины, которая работает с 2016 года, я обнаружил, что таблицы WADMetrics обновляются каждые 10 дней, а другие - нет. Образец таблицы WADMetrics содержал 5724 записи. WASWindowsEventLogsTable содержал 10 022 записи. Я отменил подсчет WADPerformanceCountersTable, когда он достиг 5 миллионов записей. Хранение статистики стоит дороже, чем виртуальный жесткий диск виртуальной машины.

Эта статья обобщает полезную информацию о командах PowerShell для управления таблицами. К сожалению, Azure Cloud Shell еще не поддерживает команды для работы внутри таблицы, например Get-AzTableRow (см. этот отчет). Я предполагаю, что это сработает, если вы настроите последние команды Az PowerShell локально. Затем вы можете выбрать фильтр и использовать Remove-AzTableRow для удаления некоторых строк. В моем случае машина была списана, поэтому мне просто нужен был способ удалить множество таблиц, не нажимая на каждую из них на панели инструментов. Вот несколько примеров команд, с которых можно начать:

$location = "uswest"
$resourceGroup = "myRG"
$storageAccountName = "myData"
$storageAccount = get-AzStorageAccount -ResourceGroupName $resourceGroup -Name $storageAccountName
$ctx = $storageAccount.Context
# List all tables in storage account
Get-AzStorageTable -Context $ctx
# Count the WADMetrics tables
(Get-AzStorageTable -Context $ctx -Name "WADMetrics*").count
# Count the WADMetrics tables with "2018" in their name
(Get-AzStorageTable -Context $ctx -Name "WADMetrics*2018*").count
# Remove all WADMetrics tables with "2018" in their name without confirmation, then re-count 
# Only Get- supports wilcards, so pipe to Remove-AzStorageTable command
Get-AzStorageTable -Context $ctx -Name "WADMetrics*2018*" | Remove-AzStorageTable -Force
(Get-AzStorageTable -Context $ctx -Name "WADMetrics*2018*").count
# Remove the big tables. Confirmation takes a long time, so suppress it.
Remove-AzStorageTable -Context $ctx -Name "WADWindowsEventLogsTable" -Force
Remove-AzStorageTable -Context $ctx -Name "WADPerformanceCountersTable" -Force

# The following do NOT work in Azure Cloud Shell as of 07/16/2019.  See 
# https://github.com/MicrosoftDocs/azure-docs/issues/28608

# Count the rows in WADWindowsEventLogsTable
$tableName = "WADWindowsEventLogsTable"
$cloudTable = (Get-AzStorageTable -Context $ctx -Name $tableName).CloudTable
$cloudTableResults = Get-AzTableRow -table $cloudTable -columnName "RowKey"
$cloudTableResults.count
person Mark Berry    schedule 16.07.2019

Другое решение - написать небольшую программу на C # для удаления данных диагностики Windows Azure (WAD).

В следующей статье вы найдете более или менее готовое решение для методов, которые могут стереть как WADMetrics* таблицы, так и строки, содержащиеся в WADDiagnosticInfrastructureLogsTable, WADPerformanceCountersTable и WADWindowsEventLogsTable

Используя два метода DeleteOldTables() и DeleteOldData(), легко написать небольшую программу, которая может выполняться ежемесячно для очистки данных WAD. Обратите внимание, что в коде используется пакет NuGet WindowsAzure.Storage, поэтому его необходимо установить в вашем проекте.

https://mysharepointlearnings.wordpress.com/2019/08/20/managing-azure-vm-diagnostics-data-in-table-storage/

person Kim K.    schedule 27.11.2019