我有多个在 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 个字符长的字符串(通过在前面添加适当数量的零)并查询数据。一旦您在客户端获取到数据,您将向表存储发送删除请求。
为了加快整个过程,您可以执行以下操作:
- 查询数据时,使用查询投影仅返回
PartitionKey
和RowKey
属性,因为删除时只需要这两个属性。 - 对于删除,您可以使用实体批量事务。这可以大大加快删除操作的速度。
- 为了加快删除速度,您可以在与存储帐户相同的区域中启动虚拟机。这样您就无需支付数据导出费用。
我前段时间写了一篇博文,您可能会觉得有帮助: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/