SpringCloud Gateway 3.x 响应头添加 Skywalking TraceId
在微服务架构中,一次请求可能会被多个服务处理,而每个服务又会产生相应的日志,且每个服务也会有多个实例。在这种情况下,如果系统发生异常,没有 Trace ID,那么在进行日志分析和追踪时就会非常困难,因为我们无法将所有相关的日志信息串联起来。
如果将 Trace ID 添加到响应头中,那么在进行日志分析和追踪时,配合日志收集分析平台,我们就可以通过这个 Trace ID 将所有相关的日志信息串联起来,便于分析和定位问题。
那么如何实现呢?微服务架构下 Api 网关是流量的统一出入口,在 Api 网关配置是最合适的,我们使用的 SpringCloud Gateway 作为微服务的应用网关,同时时 Skywalking 作为链路追踪工具。两者版本如下:
- SpringCloud Gateway 3.1.4
- Skywalking Agent 8.14.0
- 下载并解压 Skywalking Agent,并将 Agent 根目录下的
optional-plugins/apm-spring-webflux-5.x-plugin-8.15.0.jar、optional-plugins/apm-spring-cloud-gateway-3.x-plugin-8.15.0.jar移动至plugins目录下。 - SpringCloud Gateway 添加 pom 依赖如下:
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.14.0</version>
</dependency> <dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-webflux</artifactId>
<version>8.14.0</version>
</dependency>
- SpringCloud Gateway 创建 GloablFilter 拦截器,添加 SKywalking TraceId 至响应头。
@Component
public class PutTraceIdIntoResponseHeaderFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String traceId = WebFluxSkyWalkingOperators.continueTracing(exchange, TraceContext::traceId);
exchange.getResponse().getHeaders().set("x-trace-id", traceId);
return chain.filter(exchange);
}
}
如此,大功告成,调用接口测试即可~~~
原文地址:http://me.xpzzd.com/posts/add-skywalking-traceId-to-springcloud-gateway-response-header/
参考:https://github.com/apache/skywalking/discussions/10686
SpringCloud Gateway 3.x 响应头添加 Skywalking TraceId的更多相关文章
- Tornado输出和响应头
1.输出 再来看看输出`write`,实际上,`write`并没有直接把数据返回给前端,而是先写到缓存区,函数结束之后才会返回到前端,我们验证如下 class FlushHandler(tornado ...
- php下载文件,添加响应头
//下载,添加响应头信息 header('Content-type:application/octet-stream'); header('Content-Disposition:attachment ...
- 【Azure 应用服务】App Service 通过配置web.config来添加请求返回的响应头(Response Header)
问题描述 在Azure App Service上部署了站点,想要在网站的响应头中加一个字段(Cache-Control),并设置为固定值(Cache-Control:no-store) 效果类似于本地 ...
- springcloud zuul 使用zuulfilter 修改请求路径和响应头
最近做项目有一个需求:一个网盘系统,文件存放在分布式文件系统中,之前的文件下载统一走的文件下载服务,现在需要在单文件下载的时候不需要走文件下载服务,而是直接访问文件系统上的路径,响应的时候修改响应头, ...
- 使用springcloud gateway搭建网关(分流,限流,熔断)
Spring Cloud Gateway Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 ...
- http状态码 以及请求响应头相关
1xx消息[编辑] 这一类型的状态码,代表请求已被接受,需要继续处理.这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束.由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非 ...
- 体验SpringCloud Gateway
Spring Cloud Gateway是Spring Cloud技术栈中的网关服务,本文实战构建一个SpringCloud环境,并开发一个SpringCloud Gateway应用,快速体验网关服务 ...
- spring-cloud-kubernetes与SpringCloud Gateway
本文是<spring-cloud-kubernetes实战系列>的第五篇,主要内容是在kubernetes上部署一个SpringCloud Gateway应用,该应用使用了spring-c ...
- SpringCloud gateway (史上最全)
疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 前言 ### 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家 ...
- Zuul 修改 请求头、响应头 (死磕)
疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 前言 Crazy ...
随机推荐
- 【内存管理】CMA内存分配器(Contiguous Memory Allocator)
什么是CMA 参考这两篇博文,写得很好: http://www.wowotech.net/memory_management/cma.html https://www.cnblogs.com/Loye ...
- 磊磊零基础打卡算法:day18 c++模拟哈希表来模拟散列表
5.21 哈希表 Hash表又称为散列表,一般由Hash函数(散列函数)与链表结构共同实现,与离散化思想类似. 一般要求:防止冲突,便于查询 模拟hash表: 拉链法:两个核心操作insert(),f ...
- layui使用OSS上传
1.首先要把aliyun-oss-sdk.js包下载下来,放到指定的目录下面 在要用的页面引入或者在index.html入口文件全局引入: <script src="util/ali ...
- windows10环境下的RabbitMQ安装步骤(图文)(转载)
第一步:下载并安装erlang 原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang. 下载地址:http://www.erlang.or ...
- 关于Spring注解的基础详解(补充上次并不清楚的内容)
注解,需要在.xml文件里面加这么一句话:<context:component-scan base-package=""/>(组件) Component注解 主要用于接 ...
- Eigen 中的 conservativeResize 和 resize 操作
Eigen 中的 conservativeResize 和 resize 操作 对于能够改变大小的动态矩阵,一般会有 resize() 操作. resize() 如果不改变原矩阵的大小,则原矩阵大小和 ...
- Racket while循环
Problem: 1805. 字符串中不同整数的数目 目录 lc题解地址 思路 Code lc题解地址 https://leetcode.cn/problems/number-of-different ...
- Python——基础知识(一)
1. 那么多编程语言,为什么学python 易于学习,是所有编程语言当中最容易学习的 没有最好的语言,只有最合适的语言 2. 反复执行的用例如何提升效率 测试流程回归(回顾) 很多测试用例在不同的测试 ...
- java多线程---4 线程同步介绍及不安全案例说明
java多线程---4 线程同步介绍及不安全案例说明 线程同步 并发: 同一个对象被多个线程同时操作. 处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时候我们就需要线程同步 ...
- CTF-RE-学习记录-汇编
八进制运算 加法表 1+1=2 1+2=3 2+2=4 1+3=4 2+3=5 3+3=6 1+4=5 2+4=6 3+4=7 4+4=10 1+5=6 2+5=7 3+5=8 4+5=11 5+5= ...