问题标签 [observability]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何在 Asp.Net Core 应用程序中实现可观察性(如 Charity Majors 所述)?
在https://charity.wtf/tag/observability/如何收集和构建您的数据部分中,慈善专业提供了以下方案:
- 在管道的早期初始化一个在代码中随处可访问的“blob”,每个请求都有自己的副本(实际上与
HttpContext
. - 任何希望记录一些信息的代码都会向这个“blob”添加键值对
- 当请求退出时,“blob”作为结构化事件传递给可观察性服务器。
这个方案很有意义,也很优雅。它避免了常规日志的口头腹泻。但是,它也过于简单,因为它忽略了批处理请求,其中一个请求必须处理 N 条记录,这可能会产生 N 组类似的结构化事件,这些事件嵌套在与请求本身相对应的父结构化事件中。在这种情况下,我们可以选择在处理记录后立即发送批处理记录事件,或者在请求结束时将嵌套事件累积在“blob”中发送。无论如何,帖子中都没有讨论这种并发症。
在可能发明轮子之前,我试图弄清楚我们是否准备好使用这种可观察性方案。这是我到目前为止所拥有的:
- 我们正在使用 Azure,它的 Application Insights TrackEvent API 似乎是完美的低级 API。它支持
<Event Name, string-to-string map, string-to-float map>
似乎足够丰富的形式的事件。然后可以在我们喜欢的所有维度上查询收集到的事件。所以,可观察性服务器对我来说不是问题。 - “blob”实现是一个问题。我正在寻找 .Net Core 的 Honeycomb 实现并遇到了这个页面 - https://docs.honeycomb.io/getting-data-in/dotnet/。然而,那里提出的 2 个选项似乎还不够成熟:
- HoneyComb .NET让我们来决定如何处理嵌套事件。
- OpenTelemetry .NET似乎根本不是关于可观察性的,而是关于“可观察性的 3 个支柱”——日志记录、度量和跟踪。根据https://www.infoq.com/news/2019/02/rethinking-observability/不提供可观察性
- Microsoft.Extensions.Logging.ILogger接口似乎提供了一个足够的接口。看起来BeginScope方法明确存在以分隔不同的批次。但它只是一个接口。
所以,我的问题是 Asp.Net Core 是否有一个实现可观察性作为结构化事件,它还以一种或另一种方式考虑嵌套事件,并且可以定制以传递到 Application Insights 存储桶?
我可以详细说明批处理的挑战,但是这个问题已经太长了,所以我停在这里。
web-services - 需要帮助为分布式系统构建正常运行时间仪表板
我有一个产品,我想为其创建一个仪表板,以显示其可用性/正常运行时间随时间的变化并显示任何中断。
具体来说,我正在寻找
- 能够报告有关服务正常运行时间的历史信息
- 提供任何服务中断的详细信息
该产品在一组 linux 服务器上运行,并连接到在单独实例上运行的数据库,我们还有一些运行夜间批处理作业的专用实例。我的系统还依赖一些外部服务为特定客户提供附加功能。Redis 缓存也用于为多个客户缓存数据。
我们将上述所有设置(应用程序服务器、数据库、作业服务器、redis 缓存等)复制到大型客户的专用集群中。小客户被放在其中一个共享集群上以保持低成本。
目前,我们仅在应用服务器上运行健康检查,并在一个简单的 HTML 页面中提供该信息。这是最终用户/客户和支持团队的转到页面。
由于该产品是使用多个系统/服务构建的,因此我们当前的 HTML 页面经常显示系统已启动并运行良好,但可能会遇到其某些组件或外部服务的问题。
当前的健康检查使用简单的 HTTP 请求并查找 200 状态代码,此检查每分钟运行一次,我们将这些数据绘制成一个简单的图表以显示过去 30 天。我们还显示了带有时间戳和手动添加的其他静态信息的中断列表。
我们希望构建一个更强大的解决方案,该解决方案监控的内容远不止 HTTP 端口,并且我们可以在其中获得更多详细信息,例如系统的哪个部分存在问题以及这些问题如何影响系统以及哪些客户受到影响。
感谢任何指导或帮助。我们更喜欢使用开源工具构建解决方案,因为我们没有太多预算。目标是为我已经超负荷的团队成员改善事情。
laravel - Laravel 应用程序中的可观察性
应用程序中可观察性的三个主要支柱;指标、跟踪和日志。我希望我的 laravel 应用程序对这些是“可观察的”。
Elastic、Logstash 和 Kibana 等工具似乎是行业标准,但我似乎无法获得关于如何将它们与 laravel 集成的好的教程,而且我对它们的理解通常是模糊的。
所以,问题是:
laravel 开发者一般使用哪些可观察性工具?如果选项落在 ELK 堆栈上,是否有任何很棒的教程或指南来说明如何做到这一点?Kibana 指南对于像我这样弱智的人来说有点太复杂了。但我愿意在做的时候流几口鼻血——如果那是唯一的方法的话。
elasticsearch - 当所有分片约为 30GB 时,如何对 Elastic“大分片大小”警报进行故障排除?
背景:我有一个简单的(2 节点)弹性云部署,有 3 个主要索引,用于保存我的大部分数据以进行索引和搜索。这些索引中最大的是 ~250GB(我们称之为example-index
),采用 4/1 分片方案产生 8 个分片。如果索引分片超过推荐的 50GB 大小,我设置了一个简单的监控警报来触发。
问题:在我的集群监控中,我看到了一个large shard size
警报。警报设置为每 12 小时通知一次,但每分钟检查一次。它还声称被识别为太大的分片约为 133GB,并且来自example-index
. 实际的警报是这样的:
The following index: example-index has a large shard size of: 132.99GB at April 15, 2021 11:51 AM EDT
故障排除完成:使用开发工具,我手动cat
对索引分片运行查询,并确认每个分片都徘徊在 30GB 左右。查询中列出的任何分片都没有example-index
返回高于 31GB 的分片——完全在合理的容差范围内。
问题:粗略,标题。我该如何解决这种类型的警报?我没有看到或发现此警报是否有任何潜在的潜在原因?或者这只是一个错误?
c# - 如何在.net核心中通过kafka和web api之间的标准开放遥测协议进行消息跟踪
用例
我收到来自第三方 MF 系统的消息到我的 kafka 队列。每条消息都有自己唯一的 id。有 .Net 核心 kafka 消息处理器,它从队列中读取消息并调用多个 Web API。
客观的
我想使用在 kafka 队列上接收到的消息的唯一 ID 来实现端到端系统消息跟踪。[如果相关]在我的堆栈中,我们使用 Serilog 来丰富具有唯一消息 ID 的日志,并开始探索 OpenTelemetry.Net 仪器库。
问题
如何在 Kafak .Net 处理器中将消息的唯一 ID 分配给System.Diagnostics.Activity.TraceID,以便从此 exe 对任何 API 进行的任何 HttpClient 调用都会通过请求标头复制。
或者,如果我以错误的方式处理问题并且已经有针对此类问题的标准解决方案,请告诉我。
java - 千分尺在哪里存储数据?
当我们在生产中使用千分尺和普罗米修斯时,我很怀疑,因为普罗米修斯从千分尺中提取数据,我们只是为普罗米修斯使用远程数据存储,但一些数据也由千分尺存储。现在我的问题是我的服务器是否在生产中运行比千分尺存储数据在运行时不断增加还是在一段时间后自动刷新?意味着千分尺如何在生产中存储数据?
akka - 如何为 Akka 应用程序配置 OpenTelemetry 代理
我正在尝试使用 OpenTelemetry 代理从我用 Scala 编写的 Akka 应用程序导出指标和跟踪,目的是使用OpenSearch中的数据。
我的应用程序的技术堆栈:
- 阿卡 - 2.6.*
- RabbitMQ(amqp 客户端 5.12.*)
- PostgreSQL (jdbc 42.2.*)
我已将 OpenTelemetry 检测运行时依赖项添加到build.sbt
:
我在属性文件中传递 OpenTelemetry 配置:
我的代码中唯一相关的部分是属性文件:
我确实在 OpenSearch 中收到了一些痕迹,但它们是完全不同且不相关的,而我希望它们是相互关联的。例如,在 RabbitMQ 主题上收到一条消息,它会进入演员,后者最终发出 SQL 查询。结果,我可以看到每次执行每个步骤花费了多少时间。
我希望能够关注文档,但我发现 OpenTelemetry 的配置指南目前很少。
更新:
不确定这是否相关,但我收到有关 datapreper 的警告:
next.js - 如何在微应用上下文中集中哨兵配置文件?
我目前正在构建一个应用程序,该应用程序具有多个带有 nextJS 的微应用程序,每个应用程序都具有哨兵集成。
我已将我的哨兵配置集中在所有应用程序使用的专用库中,但在微应用程序构建期间,这两个文件sentry.client.config.js
和sentry.server.config.js
内容如下:
我宁愿避免在我的所有微应用中复制粘贴相同的文件。
有没有办法直接将参数传递给哨兵,而无需在任何不同的微应用中拥有这两个文件。
spring-cloud-sleuth - 分布式跟踪库 - 自定义跟踪 id
作为我们 Spring 应用程序的一部分,我们使用 Spring Sleuth 将 traceid 和 spanid 注入请求中。这通过 MDC 集成巧妙地与 SL4J 一起工作,以传播到日志。
但是遇到了我们的组织没有使用 Sleuth 紧密耦合的 B3 标头的问题。因此,寻找使用可以注入跟踪的“x-trace-id”之类的自定义请求标头的替代方案。
我们的可追溯性仍然是通过像 splunk 这样的集中式日志记录。我们还没有像 zipkin 这样的集中式收集器,因此采样还不相关。所以直接的用例是确保日志可追溯性,一旦我们有一个用于跟踪的中央收集器,希望采样可以开箱即用。
elastic-stack - 正常运行时间监控服务发现(在 Elastic Stack 中)
是否可以在 Elastic Uptime 中对应用程序和服务进行某种发现/自我注册?
这样应用程序就可以注册所需的正常运行时间检查和警报,而不必打扰弹性管理员?