java - OpenTelemetry:Java 上下文传播似乎不起作用?
问题描述
我编写了一个简单的 HTTP 服务器/客户端,启用了 OTEL Java 代理(v 1.5.3),并且正在使用 @WithSpan 注释。
这是我的客户端处理程序方法:
@WithSpan
private static void handleResponse(HttpResponse<String> r, @SpanAttribute("idx.service.id") String serviceId, @SpanAttribute("idx.service.name") String serviceName) {
Span span = Span.current();
HttpHeaders headers = r.headers();
Attributes eventAttributes = Attributes.of(AttributeKey.stringKey("response"), r.body(), AttributeKey.stringKey("content-type"), headers.firstValue("content-type").orElse("not present"));
span.addEvent("idx.events.response", eventAttributes);
try {
TimeUnit.SECONDS.sleep(1);
}
catch(InterruptedException e) {
System.out.println("...caught sleeping!...");
}
}
我的服务器方法:
@WithSpan
private static void processRequest(@SpanAttribute("idx.service.id") String serviceId, @SpanAttribute("idx.service.name") String serviceName, HttpExchange exchange) throws IOException {
Span span = Span.current();
Attributes eventAttributes = Attributes.of(AttributeKey.stringKey("method"), exchange.getRequestMethod(), AttributeKey.stringKey("ipaddress"), exchange.getRemoteAddress().getAddress().getHostAddress());
span.addEvent("idx.events.request", eventAttributes);
// Show headers which are present to highlight context propagation.
Headers headers = exchange.getRequestHeaders();
for(String key: headers.keySet()) {
System.out.println(key + ":" + headers.getFirst(key));
}
String response = "Hi there!";
exchange.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
try {
TimeUnit.SECONDS.sleep(1);
}
catch(InterruptedException e) {
System.out.println("...caught sleeping!...");
}
}
当我运行服务器并使用客户端调用请求时,我可以看到:
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
[otel.javaagent 2021-09-06 16:44:17:475 +0100] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.5.3
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
Connection:Upgrade, HTTP2-Settings
Http2-settings:AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
Host:localhost:16000
Upgrade:h2c
User-agent:Java-http-client/14.0.1
Traceparent:00-2cf056efcf306b3154193f50106c2e66-91331cd2b373a913-01
Uber-trace-id:2cf056efcf306b3154193f50106c2e66:91331cd2b373a913:0:1
Content-length:0
客户端和服务器上的代理都设置为向 Jaeger 发送跟踪:
# Export traces to Jaeger
otel.traces.exporter=jaeger
otel.exporter.jaeger.endpoint=http://localhost:14250
otel.service.name=idx.platform
# Export frequency (milliseconds)
otel.imr.export.interval=10000
# Set propagator methods
otel.propagators=jaeger,tracecontext,baggage
但是我看不到实际发生的相关性,我只能看到客户端和服务器的两条不同的跟踪。
不应该以某种方式在这里发生相关性吗?道歉,如果这应该以某种方式显而易见,但我错过了一些东西......
解决方案
推荐阅读
- javascript - Chrome/Opera `window.onpopstate` 错误
- c - 如何让两个线程交替执行?
- reactjs - 如何在 JSX 中返回映射数组?
- sql-server - 清除的 SQL Server 表仍保留一些数据
- python - Scrapy spider 无法正确抓取数据
- javascript - simpleMDE:添加以编程方式在光标位置插入文本的功能
- html - 如何在移动时创建标签列表?
- sql - 将 Linq 查询优化到最短的获取时间?
- reactjs - p5 js in react : 期望一个赋值或函数调用,而是看到一个表达式 no-unused-expressions
- corda - 我们可以在进化的同时修改 Corda 状态的参与者列表吗?