英文:
Configure Multiple JaegerGrpcSpanExporter to spring boot application
问题
我尝试配置多个JaegerGrpcExpanExporter
(在Open-Telemetry框架中提供),以满足以下用例:
一个带有服务名称"controller"的JaegerGrpcExpanExporter
,
一个带有服务名称"service"的JaegerGrpcExpanExporter
,
一个带有服务名称"util"的JaegerGrpcExpanExporter
,
并将它们注册到OpenTelemetrySdk
。
带有"controller"类型的跨度应该导出到配置为"controller"服务名称的导出器,而不是导出到其他地方,类似的过程也适用于util和service。
但实际行为与预期不符,即带有"controller"、"service"和"util"的跨度已导出到并行注册的所有JaegerGrpcExpanExporter
。
以下是我的配置,您能否提供任何建议来实现相同效果。
public BatchSpansProcessor getJaegerSpanProcessor(String serviceName) {
return BatchSpansProcessor.newBuilder(
JaegerGrpcSpanExporter.newBuilder().setServiceName(serviceName). setChannel(ManagedChannelBuilder.forAddress(localhost,14250).usePlaintext(). build()
).build();
}
public void addJaegereProcessorToSdk(){
String[] serviceName={"controller", "service", "util"};
TracerSdkProvider tracerSdkProvider=OpenTelemetrySdk.getTracerProvider;
for(String service:serviceName)
tracerSdkProvider.addSpanProcessor(getJaegerSpanProcessor(service));
}
英文:
I tried to configure multiple JaegerGrpcExpanExporter
(provided in Open-Telemetry framework) in my application to fulfill below use case:
JaegerGrpcExpanExporter
with service name "controller",
JaegerGrpcExpanExporter
with service name "service" and JaegerGrpcExpanExporter
with service name "util" and registered them to OpenTelemetrySdk
.
The spans with kind 'controller' should export to exporter configured with "controller" service name not to others, similar process should be followed for util and service.
But it is not behaving as expected, i.e. spans with "controller", "service" and "util" has been exported to all the JaegerGrpcExpanExporter
registered in parallel.
Below is my configuration, Do you provide me any suggestion to achieve the same.
public BatchSpansProcessor getJaegerSpanProcessor(String serviceName) {
return BatchSpansProcessor.newBuilder(
JaegerGrpcSpanExporter.newBuilder().setServiceName(serviceName). setChannel(ManagedChannelBuilder.forAddress(localhost,14250).usePlaintext(). build()
).build();
}
public void addJaegereProcessorToSdk(){
String[] serviceName={"controller", "service", "util"};
TracerSdkProvider tracerSdkProvider=OpenTelemetrySdk.getTracerProvider;
for(String service:serviceName)
tracerSdkProvider.addSpanProcessor(getJaegerSpanProcessor(service));
}
答案1
得分: 0
由提供程序生成的任何跨度将被导出到所有已注册的导出程序。您可以使用多个提供程序,每个提供程序都有单独的Jaeger导出程序。我不确定Jaeger是否已经支持由OpenTelemetry资源覆盖的服务名称,但那将是最佳选项(并且只使用一个提供程序)。
英文:
Any spans generated by a provider will be exported to all registered exporters. You could use multiple providers, each with a separate Jaeger exporter. I'm not sure if Jaeger supports the service name being overwritten by OpenTelemetry Resources yet, but that would be the best option (and to only have a single provider).
专注分享java语言的经验与见解,让所有开发者获益!
评论