配置 Zipkin 以跟踪 AWS SQS 消息?
Posted
技术标签:
【中文标题】配置 Zipkin 以跟踪 AWS SQS 消息?【英文标题】:Configure Zipkin to trace the AWS SQS messages? 【发布时间】:2020-07-27 05:06:06 【问题描述】:我在 AWS ECS 中运行微服务并监听 AWS SQS 消息。我正在使用 zipkin-aws 将跟踪发送到 AWS Kinesis 并在 S3 中收集。当有任何 REST 操作时,跟踪在 S3 中完美发送和收集。但是当微服务侦听或向 AWS 队列发送消息时,它不会捕获跟踪。任何人都可以帮助配置 zipkin 以收听 SQS 消息。
【问题讨论】:
【参考方案1】:根据 Sleuth 文档,AWS SQS 仅在消费者端“本机”支持:
https://docs.spring.io/spring-cloud-sleuth/docs/current-SNAPSHOT/reference/html/#spring-cloud-aws-messaging-sqs
为了在 AWS SQS 上添加无缝跟踪,我使用了 Brave SQS 工具(又名 SqsMessageTracing)并且不得不添加另一个依赖项:
<dependency>
<groupId>io.zipkin.aws</groupId>
<artifactId>brave-instrumentation-aws-java-sdk-sqs</artifactId>
<version>0.21.2</version>
</dependency>
并具有以下配置:
@Configuration
public class SQSConfig
@Autowired
private Tracing tracing;
@Autowired
private AWSCredentialsProvider awsCredentialsProvider;
@Autowired
private RegionProvider regionProvider;
@Bean
public AmazonSQSAsync amazonSQS()
SqsMessageTracing sqsMessageTracing = SqsMessageTracing.create(tracing);
return AmazonSQSAsyncClientBuilder.standard()
.withRegion(regionProvider.getRegion().getName())
.withCredentials(awsCredentialsProvider)
.withRequestHandlers(sqsMessageTracing.requestHandler())
.build();
@Bean
public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync sqsClient)
QueueMessagingTemplate template = new QueueMessagingTemplate(sqsClient);
template.setMessageConverter(getMappingJackson2MessageConverter());
return template;
这只是因为我不想自己进行 SQS 生产者检测,也不想以编程方式添加跟踪标头。 可以在此处找到有关 Brave 仪器的少量参考:
https://github.com/spring-cloud/spring-cloud-sleuth/issues/1550#issuecomment-589686583
我的 SQS 消息生产者如下所示:
@Component
public class MessageAdapter
@Autowired
private final QueueMessagingTemplate queueMessagingTemplate;
public void sendSqsMessage(Object payload)
HashMap<String, Object> headers = new HashMap<>();
headers.put("message-group-id", UUID.randomUUID().toString());
queueMessagingTemplate.convertAndSend("sqs-queue-1", payload, headers);
最后说明
不需要,但我也排除了
org.springframework.cloud.aws.autoconfigure.context.ContextInstanceDataAutoConfiguration
因为它在应用程序启动时执行 AWS 环境配置扫描,这对我来说不是必需的(并且还引发了冗长的错误日志)
@SpringBootApplication
// Unwanted autoconfiguration, which raises a lengthy warning at startup,
// brought in by Brave AWS SQS instrumentation
@EnableAutoConfiguration(exclude = ContextInstanceDataAutoConfiguration.class)
public class MainSpringBootApplication
public static void main(String[] args)
SpringApplication.run(MainSpringBootApplication.class);
【讨论】:
以上是关于配置 Zipkin 以跟踪 AWS SQS 消息?的主要内容,如果未能解决你的问题,请参考以下文章