【发布时间】:2012-08-02 17:46:25
【问题描述】:
我们在 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 消息 1 00:01:00 999 msg2 00:02:00 999 msg3 00:02:00 999 msg4 00:05:00 999 msg5
- 在 00:06:00 开始传输脚本,获取所有日志,保存 LastPK=00:05:00
- 在时间 00:06:30 InstanceB 与 DeploymentId=111... 放置最近 5 分钟的日志 00:02:00 111 消息6 00:03:00 111 消息7 00:05:00 111 消息8 00:06:00 111 msg9
- 在 00:07:00 开始传输脚本,获取 PK>=LastPK=00:05:00 的日志,实际上只检索 msg8 和 msg9(丢失了 msg6 和 msg7)。
我想到的解决方案是每次 TransferScript 检索过去 6 分钟的所有日志(wad 同步 5 分钟 + 缓冲区 1 分钟),但这会大大增加传输的数据量(比如 5 次)+ 需要以某种方式过滤掉已经检索到的日志,这可能是有问题的。另外我考虑过添加 Timestamp>LastSeenTimestamp 但我不确定它是否解决了数据量和重复的问题,以及这样我是否不会丢失消息。有任何想法吗? 谢谢
【问题讨论】: