0

我们在 Azure 中运行的 5 个部署中有大约 10 个实例,并记录到 Azure 诊断 (WADLogsTable)。我需要在几分钟内检索一次这些日志,以便由 3rd 方工具在本地进行分析。我已经有一个简单的版本,它从表中读取日志,保存最后一个分区和行键,下次运行查询 PartitionKey >= SavedPartitionKey。问题在于,并非以这种方式检索所有日志:WAD 使用日志缓冲并在 5 分钟内将日志批量存储在表中(每个实例)。记录事件的 RowKey 以部署 ID(即 guid)开头。

  1. 在时间 00:05:30 InstanceA 与 DeploymentId=999... 放置最近 5 分钟的日志 PK RK 消息 00:01:00 999 msg1 00:01:00 999 msg2 00:02:00 999 msg3 00:02: 00 999 味精4 00:05:00 999 味精5
  2. 在 00:06:00 开始传输脚本,获取所有日志,保存 LastPK=00:05:00
  3. 在时间 00:06:30 InstanceB 与 DeploymentId=111... 放置最后 5 分钟的日志 00:02:00 111 msg6 00:03:00 111 msg7 00:05:00 111 msg8 00:06:00 111 msg9
  4. 在 00:07:00 开始传输脚本,获取 PK>=LastPK=00:05:00 的日志,实际上只检索 msg8 和 msg9(丢失 msg6 和 msg7)。

我想到的解决方案是每次 TransferScript 检索最后 6 分钟的所有日志(5 分钟用于 wad 同步 + 1 分钟用于缓冲区),但这会大大增加传输的数据量(如 5 次)+ 需要以某种方式过滤出已经检索到的日志,这可能是有问题的。另外我考虑过添加 Timestamp>LastSeenTimestamp 但我不确定它是否解决了数据量和重复的问题,以及这样我是否不会丢失消息。有任何想法吗?谢谢

4

2 回答 2

1

另一种可能性是在您的查询中包含“DeploymentId”以及“PartitionKey”以获取最后“n”分钟的诊断数据(如果您有此信息可用)。

于 2012-08-03T04:42:14.220 回答
1

传输到第三方工具是否需要实时或“尽快”?您只能传输 5 分钟或更早的数据而不传输小于 5 分钟的数据吗?这将确保您只会传输已完成的分区。

于 2012-08-02T18:25:06.927 回答