【问题标题】:Workaround for Application Insights POST time propertyApplication Insights POST 时间属性的解决方法
【发布时间】:2023-03-19 13:22:01
【问题描述】:

我正在尝试将数据从 Arduino 发布到 Application Insights。现在,payload 需要一个 time 属性,如下所示:

{
    "time": "2017-06-02T07:55:29.585Z",
    "iKey": "61c75aec-xxxx-xxxx-xxxx-xxxxxxxxx",
    "name": "Microsoft.ApplicationInsights.61c75aecae11483ba126665023ea73be.Event",
    "tags": {
        "ai.device.id": "Arduino Uno",
        ...blah...
}

这个小东西没有实时时钟,所以我的时间戳会很飘。我试图省略该属性,但 App Insights API 抱怨并且不会获取数据 -

"message": "109: Field 'time' on type 'Envelope' is required
but missing or empty. Expected: string, Actual: undefined"

发送一个空的time 属性也不会削减它。

这里是否有解决方法来告诉 App Insights 在收到的负载上使用自己的时间戳?

【问题讨论】:

  • 我知道这是一个非常间接的解决方法,但是您可以使用一些基于网络的时钟来获取当前时间来填充这里吗?这一切都取决于您在做什么以及该解决方案需要有多可靠。由于有时存在一些限制,物联网的时钟是一个难题(与某些加密货币相同)!
  • 问题是即使我实现了它,我也不能相信它,如果它决定在 NTP 同步之间倒退怎么办,听起来很疯狂,但 Arduinos 上的时间是研究论文材料:) 我宁愿让另一端盖章。
  • 我建议将其作为 AI 用户语音上的一个项目提交:feedback.azure.com/forums/357324-application-insights/filters/…,因为我在那里看不到任何东西。 (如果没有指定,我们不会自动填写该字段,我有点惊讶。我可以假设为什么我们可能不想要,但你应该提交它)

标签: azure azure-application-insights


【解决方案1】:

目前,是的,时间戳是必需的,没有特定于 Application Insights 的好的解决方法。现在,您必须在允许的 AI 时间窗口(现在是 48 小时前)内使用某个有效日期。

如果您有一个不可靠的时钟,并且您希望所有事件在一个设备上保持相对顺序,您总是可以选择一个起始时间戳,并确保所有后续事件的时间都比第一个事件晚(a第一个时间戳+一些偏移量?)那么至少事件序列是可靠的,如果确切的时间不是。

它已在内部提出,也许可以做到。如果我得到任何进一步的细节,我会更新这个帖子。

【讨论】:

    【解决方案2】:

    此外,如果您可以发送任何让 AI 接受的时间(2 天前或 1 天前),您可以在 Analytics 查询中使用 ingestion_time() 方法。赞this

    requests | extend delta = (ingestion_time() - timestamp) / 1s | summarize avg(delta), percentile(delta, 99) by bin(timestamp, 10m) | render areachart kind=unstacked

    【讨论】:

      【解决方案3】:

      我在当前日期前一天插入,它开始为我工作。

      【讨论】:

      • 这里的想法是在摄取时自动添加时间戳。当然,您可以指定自己的时间戳,但如果您的设备没有计时功能,则不能这样做。
      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2019-09-08
      相关资源
      最近更新 更多