首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表存储(性能计数器等)中删除旧的Windows诊断数据

从表存储(性能计数器等)中删除旧的Windows诊断数据
EN

Stack Overflow用户
提问于 2019-02-05 15:28:14
回答 3查看 2.7K关注 0票数 9

我在Azure上运行了几个Windows,它们被配置为收集性能计数器和事件日志。

所有这些都是在“诊断设置.”中配置的。在Azure Portal中的VM资源上。有一个Windows诊断代理,它收集VM上的数据并将其存储到存储帐户中(在表存储中)。

所有这些收集的数据(性能计数器、度量、日志等)没有任何保留策略,而且似乎没有任何方法来设置。所以它只会永远地积累在存储帐户的表存储中。

这就是我的问题所在--现在这些表中有太多的数据(在我的例子中有几兆字节),为了保存这些数据,花费了很多钱。而且它只会随着时间的推移而不断增加。

相关的存储帐户表如下所示:

  • WADMetrics* (Windows诊断学计量表)
  • WADPerformanceCountersTable (Windows诊断性能计数器表)
  • WASWindowsEventLogsTable (Windows诊断Windows事件日志表)

是否有办法删除这些表中的旧数据,这样就不会破坏任何东西?或者更好的是,是否有某种方法来配置保留策略或设置它,使其不再永远积累?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-05 15:56:05

有没有办法删除这些表中的旧数据,这样它就不会破坏任何东西?

您需要手动完成此操作。它的工作方式是首先查询需要删除的数据,然后一旦得到数据,就会删除它。存储在这些表中的实体的PartitionKey属性实际上表示一个日期/时间值(以滴答加上零,使其成为等长字符串),因此您需要接受from和to date/time值,将它们转换为ticks,将其转换为19个字符长字符串(通过预先设置适当数量的零)并查询数据。一旦在客户端获得数据,就会将delete请求发送回表存储。

为了加快整个过程,你可以做几件事:

  • 查询数据时,使用查询投影只返回PartitionKeyRowKey属性,因为删除只需要这两个属性。
  • 对于删除,可以使用实体批处理事务。这可以大大加快删除操作的速度。
  • 为了更快地删除,您可以在与存储帐户相同的区域中拆分VM。这样你就不用付数据出入口费了。

不久前,我写了一篇博文,你可能会发现它很有帮助:https://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/

或者更好的是,是否有什么方法来配置保留策略或设置它,使它不会永远积累?

不幸的是,至少到今天还没有。有一个保留设置,但这只适用于小气泡。

票数 3
EN

Stack Overflow用户

发布于 2019-07-16 23:08:13

我刚刚发现了这个问题,当时我正在追踪订阅费最高的是什么。

一个有用的工具是Azure存储资源管理器。您可以浏览到一个表,检查它的内容,使用“表统计”按钮来计数表行、多选择和删除行。

对于一个自2016年开始运行的小型VM,我发现WADMetrics表似乎每10天滚动一次,而其他的则不是。一个示例WADMetrics表包含5724个条目。WASWindowsEventLogsTable包含10,022个条目。当WADPerformanceCountersTable数达到500万条时,我取消了它的计数。与VM的VHD相比,存储统计数据的成本更高。

这篇文章总结了有关操作表的PowerShell命令的有用信息。不幸的是,Azure还不支持在表中工作的命令,例如Get(参见本报告)。如果您在本地设置最新的Az PowerShell命令,我认为这是可行的。然后可以使用筛选器进行选择,并使用Remove-AzTableRow删除一些行。在我的例子中,这台机器已经退役,所以我只需要一种方法来删除许多表,而不必单击仪表板中的每一个表。下面是一些可以从下面开始的示例命令:

代码语言:javascript
复制
$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
票数 1
EN

Stack Overflow用户

发布于 2019-11-27 22:14:06

另一种解决方案是编写一个小的C#程序来擦除Windows诊断(WAD)数据。

下面的文章或多或少地给出了一个可以擦除WADMetrics*表和WADDiagnosticInfrastructureLogsTableWADPerformanceCountersTableWADWindowsEventLogsTable中包含的行的方法的开箱即用的解决方案。

使用DeleteOldTables()DeleteOldData()这两种方法,很容易编写一个可以每月执行的小程序来清理WAD数据。请注意,代码使用WindowsAzure.Storage NuGet包,因此需要在项目中安装。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54537785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档