微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Asp.Net Core 应用程序中实现可观察性如 Charity Majors 所述?

如何解决如何在 Asp.Net Core 应用程序中实现可观察性如 Charity Majors 所述?

https://charity.wtf/tag/observability/ 部分的如何收集和构建您的数据慈善专业提供以下方案:

  1. 在管道早期初始化一个可在代码中随处访问的“blob”,每个请求都有自己的副本(实际上绑定到 HttpContext
  2. 任何希望记录一些信息的代码都会向这个“blob”添加键值对
  3. 当请求退出时,“blob”作为结构化事件传送到可观察性服务器。

这个方案很有道理,也很优雅。它避免了常规日志的口头腹泻。然而,它也过于简单化,因为它忽略了批处理请求,其中一个请求必须处理 N 条记录,这可能会产生 N 组类似的结构化事件嵌套在与请求本身对应的父结构化事件中。在这种情况下,我们可以选择在处理记录后立即发送批处理记录事件,或者在请求结束时在要发送的“blob”中累积嵌套事件。在任何情况下,帖子中都不会讨论这种并发症。

在可能发明轮子之前,我想弄清楚我们是否已经准备好使用这种可观察性方案。这是我目前所拥有的:

  1. 我们正在使用 Azure 及其 Application Insights TrackEvent API 作为低级 API 似乎是完美的。它支持 <Event Name,string-to-string map,string-to-float map> 形式的事件,这似乎足够丰富。然后可以在所有维度上查询收集到的事件,无论我们喜欢它。所以,可观察性服务器对我来说不是问题。
  2. “blob”实现是一个问题。我正在寻找 .Net Core 的 Honeycomb 实现并遇到了这个页面 - https://docs.honeycomb.io/getting-data-in/dotnet/。然而,那里提出的 2 个选项似乎还不够成熟:
  3. Microsoft.Extensions.Logging.ILogger 界面似乎提供了足够的界面。看起来 BeginScope 方法明确存在以分隔不同的批次。但它只是一个界面。

所以,我的问题是,Asp.Net Core 是否有一个实现作为结构化事件的可观察性,它也以一种或另一种方式考虑了嵌套事件,并且可以自定义以提供给 Application Insights 存储桶?

我可以详细说明批处理的挑战,但这个问题已经太长了,所以我就到此为止了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?