我第一次使用Spring Boot,正在为我的应用程序设置分布式跟踪。我已经将Spring Cloud Slueth添加到我的应用程序中,当调用我的endpoint时,我可以看到生成的跨度和跟踪,但是我很难让它与Aws Sdk 2. x集成(使用Dynamo异步客户端)。我有几个关于集成的问题:
@Component
@Log4j2
public class AwsExecutionInterceptor implements ExecutionInterceptor {
public static final String CLIENT_CALL_SPAN = "ClientCallSpan";
public static final ExecutionAttribute<Span> ATTRIBUTE = new ExecutionAttribute<>(
CLIENT_CALL_SPAN);
private final Tracer tracer;
@Autowired
public AwsExecutionInterceptor(Tracer tracer) {
this.tracer = tracer;
}
@Override
public void beforeExecution(Context.BeforeExecution context, ExecutionAttributes executionAttributes) {
Span clientCallSpan = this.tracer.nextSpan().name("clientCall").start();
log.info("Starting new span");
executionAttributes.putAttribute(ATTRIBUTE, clientCallSpan);
}
@Override
public void afterExecution(Context.AfterExecution context, ExecutionAttributes executionAttributes) {
Span span = executionAttributes.getAttribute(ATTRIBUTE);
span.end();
log.info("Span closed");
}
}
public class AwsExecutorConfig {
@Bean("AwsClientExecutor")
public Executor executor() {
ThreadPoolExecutor executor = new ThreadPoolExecutor(50, 50,
10, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(10_000));
executor.allowCoreThreadTimeOut(true);
return executor;
}
}
@Autowired
public DynamoConfig(AwsExecutionInterceptor executionInterceptor,
@Qualifier("AwsClientExecutor") Executor executor) {
@Bean(destroyMethod = "close")
public DynamoDbAsyncClient dynamoDbAsyncClient() {
var builder = DynamoDbAsyncClient.builder();
builder.overrideConfiguration(
ClientOverrideConfiguration.builder()
.addExecutionInterceptor(executionInterceptor).build());
builder.asyncConfiguration(
b -> b.advancedOption(SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR,
executor));
return builder.build();
}
}
有了这个,我可以从sdk中看到如下日志,
2021-07-20 10:26:04.369 DEBUG [,c9ae653fd2254266,c9ae653fd2254266] 2873 --- [pool-2-thread-5] s.a.a.m.internal.DefaultMetricCollector : Collected metrics records: MetricCollection(...)
但其他日志没有任何痕迹,例如:
2021-07-20 10:26:04.360 DEBUG [,,] 2873 --- [tyEventLoop-0-2] software.amazon.awssdk.request : Received successful response: 200
2021-07-20 10:26:04.361 TRACE [,,] 2873 --- [tyEventLoop-0-2] software.amazon.awssdk.request : Parsing service response JSON.
2021-07-20 10:26:04.361 DEBUG [,,] 2873 --- [tyEventLoop-0-2] software.amazon.awssdk.requestId : x-amzn-RequestId : af0d9968-3202-480f-9e3c-8312ae6963c8
2021-07-20 10:26:04.361 DEBUG [,,] 2873 --- [tyEventLoop-0-2] software.amazon.awssdk.requestId : x-amz-id-2 : not available
2021-07-20 10:26:04.367 TRACE [,,] 2873 --- [tyEventLoop-0-2] software.amazon.awssdk.request : Done parsing service response.
spring cloud sleuth文档提到了与Netty Http客户端的集成,但我不确定如何使用AWS SDK实现这一点。如果您有任何帮助,我们将不胜感激
这是一个非常复杂的问题,让我试着给你一些背景知识,并解释你能做什么/寻找什么。
Spring Cloud Sleuth是对分布式跟踪库(如OpenZipkin的Brave)的抽象。这意味着您可以使用Sleuth的API来检测代码,并且可以在后台更改跟踪库。这也意味着您可以使用自己选择的跟踪库的内置工具(例如,您可以使用Sleuth为代码提供工具,但也可以添加Brave的MySQL工具,这两种工具将协同工作)。
(Brave不是唯一一个由Sleuth支持的追踪库。Sleuth也有OTel支持,但其中一个还不是GA,所以我们不建议在生产中使用。)
由于上述原因,您可以在以下几个地方查看仪器支持:
我建议您使用Sleuth API来插入代码,在这里您可以找到如何创建和结束跨度。如您所见,如果您想为第三方库提供仪器,这可能会很棘手,但您可以做以下几件事:
日志集成通常是通过将跟踪数据放入MDC来实现的,跟踪数据通常是通过html" target="_blank">线程本地传播的。因此,如果您在执行过程中更改线程,您的跟踪数据就会丢失,进入线程池就像从头开始一个全新的跨度(没有父跨度)。幸运的是,Sleuth有一个解决方案,您需要将您的执行器
包装到Sleuth提供的组件中,Sleuth将为您将上下文传播到您的线程池中,请参见:线程池支持
请检查文档中的HttpClient部分,它需要是一个bean,以便Sleuth可以对其进行检测。
我刚开始使用Nutch 1.11和Solr 5.3.1。 我想用Nutch抓取数据,然后用Solr索引并准备搜索。 希望通过新的自动模式特性,我可以将自己设置为restful,但是,我得到了以下错误(从日志文件复制): 我记得这个 与url有关,但我仔细检查了我使用的url,我认为它是正确的。 错误消息:
问题内容: 我正在使用最新的稳定Spring版本()。 将Hibernate从5.1升级到5.2,并将依赖项更改为适当的hibernate文档后:https : //github.com/hibernate/hibernate- orm/wiki/Migration-Guide—5.2 我没有收到任何编译错误,但是我的所有测试都因以下堆栈跟踪而失败: 问题答案: 中增加了支持,其稳定版本将于下周推
问题内容: 据我了解,Windows和OS X方面的Qt和GTK只是本地GUI库的包装,就像OS X围绕Cocoa的包装和Windows Win32的包装一样。但是,我的问题是,它们如何与Linux集成?桌面环境开发人员是否必须为Qt或GTK实现特殊的库,或者它如何工作?我环顾四周,但找不到真正的答案。 问题答案: 在Linux(台式机和笔记本电脑)上,X11服务器通常会显示图形屏幕(至少在201
0.9.2 新版功能. 这些函数提高了初始化 Django 配置中环境变量的效率,运行后即可从 Django 项目或者 Django 本身中提取环境变量,而不需要每次使用 fabfile 时都亲自设置环境变量,或者使用 manage.py 插件。 目前,这些函数仅支持 Fabric 和 fabfile 以及它能引用到的 Django 库交互。听起来限制了你的使用,其实不然。在下面的例子中,你可以像
我是新点燃的。 步骤1:我在两个VM(ubuntu)中安装了Ignite 2.6.0,在一个VM中启动了节点。下面有COMAND。bin/ignite.sh examples/config/example-ignite.xml 步骤2:我的所有配置都在example-default.xml中 步骤3:在其他VM中执行包含datagrid逻辑的client.jar(该VM既是客户机也是节点)。 步骤
问题内容: 我正在尝试将Lucene与EclipseLink结合使用,并想知道那里是否有任何好的集成库?我已经看过太阳耀斑,看起来像石灰,它可以满足我的要求,但是它已经过时了(尽管我使用的是EclipseLink的较旧版本,但我使用的是Lucene 4.10)这可能有用,但是我找不到任何文档,有关如何使用它的示例或教程。 任何建议将不胜感激(我也不相信我们也可以切换到Hibernate) 提前致谢