我们在 Azure 中运行的 5 个部署中有大约 10 个实例,并记录到 Azure 诊断 (WADLogsTable)。我需要在几分钟内检索一次这些日志,以便由 3rd 方工具在本地进行分析。我已经有一个简单的版本,它从表中读取日志,保存最后一个分区和行键,下次运行查询 PartitionKey >= SavedPartitionKey。问题在于,并非以这种方式检索所有日志:WAD 使用日志缓冲并在 5 分钟内将日志批量存储在表中(每个实例)。记录事件的 RowKey 以部署 ID(即 guid)开头。
- 在时间 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
- 在 00:06:00 开始传输脚本,获取所有日志,保存 LastPK=00:05:00
- 在时间 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
- 在 00:07:00 开始传输脚本,获取 PK>=LastPK=00:05:00 的日志,实际上只检索 msg8 和 msg9(丢失 msg6 和 msg7)。
我想到的解决方案是每次 TransferScript 检索最后 6 分钟的所有日志(5 分钟用于 wad 同步 + 1 分钟用于缓冲区),但这会大大增加传输的数据量(如 5 次)+ 需要以某种方式过滤出已经检索到的日志,这可能是有问题的。另外我考虑过添加 Timestamp>LastSeenTimestamp 但我不确定它是否解决了数据量和重复的问题,以及这样我是否不会丢失消息。有任何想法吗?谢谢