【问题标题】:Retrieving Azure Diagnostics logs检索 Azure 诊断日志
【发布时间】:2012-08-02 17:46:25
【问题描述】:

我们在 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 消息 1 00:01:00 999 msg2 00:02:00 999 msg3 00:02:00 999 msg4 00:05:00 999 msg5
  2. 在 00:06:00 开始传输脚本,获取所有日志,保存 LastPK=00:05:00
  3. 在时间 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
  4. 在 00:07:00 开始传输脚本,获取 PK>=LastPK=00:05:00 的日志,实际上只检索 msg8 和 msg9(丢失了 msg6 和 msg7)。

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

【问题讨论】:

    标签: azure azure-diagnostics


    【解决方案1】:

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

    【讨论】:

    • 这是一个选项。唯一有问题的问题可能是 azure 存储和拉取日志的主机之间的时间同步。谢谢
    【解决方案2】:

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

    【讨论】:

    • DeploymentId 和 InstanceId 实际上是相同的部署实例之间也存在时间问题。谢谢,这是一个选择。
    • 您可以做的是创建一个包含部署 ID 和最后获取的 PartitionKey 值的字典,并定期循环遍历该集合并获取数据(同时使用 PartitionKey 和部署 ID)。如果您获取特定部署 ID 的数据,请更新 PartitionKey 的值,否则保持原样。
    猜你喜欢
    • 2019-02-21
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多