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

标签 azure azure-storage azure-table-storage azure-diagnostics retention

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

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

所有收集的数据(性能计数器、指标、日志等)都没有任何保留策略,并且似乎没有任何设置方法。因此它只会永远累积在存储帐户的表存储中。

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

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

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

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

最佳答案

Is there some way how to delete old data in these tables so it wouldn't break anything?

您需要手动执行此操作。其工作方式是,您将首先查询需要删除的数据,然后在获取数据后将其删除。这些表中存储的实体的 PartitionKey 属性实际上表示一个日期/时间值(在刻度中添加零以使其成为相等长度的字符串),因此您需要获取起始和结束日期/时间值,将它们转换为刻度,使其成为 19 个字符长的字符串(通过在前面添加适当数量的零)并查询数据。一旦您在客户端获取到数据,您将向表存储发送删除请求。

为了加快整个过程,您可以执行以下操作:

  • 查询数据时,使用查询投影仅返回 PartitionKeyRowKey 属性,因为删除时只需要这两个属性。
  • 对于删除,您可以使用实体批量事务。这可以大大加快删除操作的速度。
  • 为了加快删除速度,您可以在与存储帐户相同的区域中启动虚拟机。这样您就无需支付数据导出费用。

我前段时间写了一篇博文,您可能会觉得有帮助:https://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/ .

Or even better, is there some way to configure retention policy or set it up so that it doesn't keep accumulating forever?

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

关于azure - 从表存储中删除旧的 Windows Azure 诊断数据(性能计数器等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54537785/

相关文章:

azure - 如何在 Azure Functions 中使用结构化日志记录

asp.net-mvc - "The semaphore timeout period has expired"SQL Azure

firebase - 将 Azure 通知中心与 Firebase 和 iOS(而非 APNS)结合使用

javascript - 在 Azure 中处理多个异步请求?

vb.net - Azure 表,检索数据

无论如何,Azure 管道都不会触发来自 Github 的标签

azure - 关于如何检查 Azure Blob 存储是否存在病毒有什么想法吗?

azure - Set-AzureRmDiagnosticSetting : Exception type: CloudException, 消息:不支持指标类别 'AllMetrics'

azure - 是否有一种安全的方式为用户提供 Azure 存储容器的共享访问签名 token ?

c# - Azure 表存储 - 通过分区键删除实体 REST API