java - 使用自定义遥测修复端到端跟踪
问题描述
我有一个基于天蓝色功能的天蓝色应用程序。假设它由名为 A 和 B 的两个应用程序组成,并且 A 和 B 具有以下功能:
A:
- func_A_1
- func_A_2
乙:
- func_B_1
- func_B_2
- func_B_3
应用 A 和 B 通过来自 func_A_2 的 HTTP 帖子连接,该帖子触发 func_B_1。所有其他功能都与服务总线队列相连(A 为 1 -> 2,B 为 1 -> 2 -> 3)。整个应用程序是用 Java 编写的。
目前,我们在应用程序洞察中得到了如下所示的痕迹
func_A_1 -> func_A_2 -> HTTP POST -> func_B_1 -> func_B_2 -> func_B_3
并且请求 id 表看起来像这样(简化)
功能 | 操作 ID | ID | 家长 ID |
---|---|---|---|
func_A_1 | AAA | 1 | AAA |
func_A_2 | AAA | 2 | 1 |
HTTP POST | AAA | 3 | 2 |
func_B_1 | AAA | 4 | 3 |
func_B_2 | AAA | 5 | 4 |
func_B_3 | AAA | 6 | 5 |
并且所有调用都在相同的操作 id 下。这是完美的。但这仅在我们在 Windows 实例上运行应用程序时才有效。由于其他原因,我们不得不更改为 Linux 实例。从文档来看,Linux 上 Java 实例的 HTTP 请求似乎没有被自动跟踪,这意味着我们在两个不同的操作 id 下获得了两个单独的跟踪,如下所示:
func_A_1 -> func_A_2
func_B_1 -> func_B_2 -> func_B_3
并且请求 id 表看起来像这样(简化)
功能 | 操作 ID | ID | 家长 ID |
---|---|---|---|
func_A_1 | AAA | 1 | AAA |
func_A_2 | AAA | 2 | 1 |
func_B_1 | BBB | 3 | BBB |
func_B_2 | BBB | 4 | 3 |
func_B_3 | BBB | 5 | 4 |
作为一种解决方案,我的想法是制作一个自定义遥测来处理丢失的 HTTP POST 跟踪。
从 ExecutionContext 我可以使用 getTraceContext().getTraceparent() 来获取 func_A_2 中的 Id 和操作 Id,因为它具有以下形式:00-AAA-2-00。我的想法是在帖子的 HTTP 标头中发送这些信息。然后在 func_B_1 开始时,我将使用 (parentId = 2, operationId = AAA, id = 3) 创建一个名为 HTTP POST 的自定义遥测,我想这将使它出现在应用程序洞察跟踪中的 func_A_2 下方。但是,我仍想对 (func_B_1 -> func_B_2 -> func_B_3) 链使用天蓝色自动跟踪。这意味着我必须以某种方式将 func_B_1 的 ExecutionContext parentId 和 operationId 更改为 3 和 AAA(并且 azure 有望通过链为我携带新的操作 ID,并为函数 1 到 3 创建新的 ID)。但我找不到任何方法来实现这一点。我尝试使用:
RequestTelemetryContext context = new RequestTelemetryContext()
context.getHttpRequestTelemetry().getContext().getOperation().setId("AAA")
context.getHttpRequestTelemetry().getContext().getOperation().setParentId("2")
ThreadContext.setRequestTelemetryContext(context)
但是,这似乎并没有改变自动生成遥测的 Azure 应用程序见解中的实际 Id。也许我的方法是不可能的。但是,任何可以让我找到解决方案的帮助都将不胜感激。
解决方案
推荐阅读
- postgresql - PostGIS 已安装在 Cloud SQL 中,但找不到 PostGIS_full_version()
- sql - 如何确保我的查询结果是连续的
- c# - Finding the remaining time when increasing a float value over time [Unity]
- reactjs - 模态弹出未居中
- php - 调用数组
- sqlite - Sequelize targetKey 似乎没有对 belongsToMany 生效
- mysql - mysql 语法错误代码 1064 不知道该怎么办
- c++ - 试图解决 gcc 特定的编译错误
- python - ValueError:没有足够的值来解包(预期 8,得到 1)
- java - 我的 xml 代码中有一个错误会停止所有应用程序