Support custom trace id in request processing chain #315
This commit is contained in:
@@ -20,6 +20,5 @@
|
||||
<!-- suppress the warn 'No URLs will be polled as dynamic configuration sources.' -->
|
||||
<logger name="com.netflix.config.sources.URLConfigurationSource" level="ERROR"/>
|
||||
<Logger name="we" level="info"/>
|
||||
|
||||
</Loggers>
|
||||
</Configuration>
|
||||
|
||||
@@ -69,6 +69,27 @@ public class SystemConfig {
|
||||
@Value("${route-timeout:0}")
|
||||
private long routeTimeout = 0;
|
||||
|
||||
@Value("${fizz-trace-id.header:X-Trace-Id}")
|
||||
private String fizzTraceIdHeader;
|
||||
|
||||
@Value("${fizz-trace-id.value-strategy:}")
|
||||
private String fizzTraceIdValueStrategy;
|
||||
|
||||
@Value("${fizz-trace-id.value-prefix:}")
|
||||
private String fizzTraceIdValuePrefix;
|
||||
|
||||
public String fizzTraceIdHeader() {
|
||||
return fizzTraceIdHeader;
|
||||
}
|
||||
|
||||
public String fizzTraceIdValueStrategy() {
|
||||
return fizzTraceIdValueStrategy;
|
||||
}
|
||||
|
||||
public String fizzTraceIdValuePrefix() {
|
||||
return fizzTraceIdValuePrefix;
|
||||
}
|
||||
|
||||
public long getRouteTimeout() {
|
||||
return routeTimeout;
|
||||
}
|
||||
@@ -179,8 +200,8 @@ public class SystemConfig {
|
||||
|
||||
@PostConstruct
|
||||
public void afterPropertiesSet() {
|
||||
afterLogResponseBodySet();
|
||||
afterLogHeadersSet();
|
||||
// afterLogResponseBodySet();
|
||||
// afterLogHeadersSet();
|
||||
}
|
||||
|
||||
private void afterLogResponseBodySet() {
|
||||
@@ -193,6 +214,9 @@ public class SystemConfig {
|
||||
Arrays.stream(StringUtils.split(logHeaders, Constants.Symbol.COMMA)).forEach(h -> {
|
||||
logHeaderSet.add(h);
|
||||
});
|
||||
if (!fizzTraceIdHeader.equals("X-Trace-Id")) {
|
||||
logHeaderSet.add(fizzTraceIdHeader);
|
||||
}
|
||||
WebUtils.LOG_HEADER_SET = logHeaderSet;
|
||||
log.info("log header list: " + logHeaderSet.toString());
|
||||
}
|
||||
@@ -216,7 +240,7 @@ public class SystemConfig {
|
||||
this.updateLogResponseBody(logResponseBody);
|
||||
}
|
||||
|
||||
@Value("${log.headers:x}")
|
||||
@Value("${log.headers:}")
|
||||
public void setLogHeaders(String logHeaders) {
|
||||
if (ObjectUtils.nullSafeEquals(this.logHeaders, logHeaders)) {
|
||||
return;
|
||||
|
||||
@@ -138,11 +138,13 @@ public class AggregateFilter implements WebFilter {
|
||||
}
|
||||
|
||||
// traceId
|
||||
/*
|
||||
String tmpTraceId = CommonConstants.TRACE_ID_PREFIX + exchange.getRequest().getId();
|
||||
if (StringUtils.isNotBlank(request.getHeaders().getFirst(CommonConstants.HEADER_TRACE_ID))) {
|
||||
tmpTraceId = request.getHeaders().getFirst(CommonConstants.HEADER_TRACE_ID);
|
||||
}
|
||||
final String traceId = tmpTraceId;
|
||||
*/
|
||||
final String traceId = WebUtils.getTraceId(exchange);
|
||||
LogService.setBizId(traceId);
|
||||
|
||||
LOGGER.debug("matched aggregation api: {}", path);
|
||||
@@ -207,9 +209,9 @@ public class AggregateFilter implements WebFilter {
|
||||
// default content-type
|
||||
serverHttpResponse.getHeaders().add(CommonConstants.HEADER_CONTENT_TYPE, CommonConstants.CONTENT_TYPE_JSON);
|
||||
}
|
||||
List<String> headerTraceIds = serverHttpResponse.getHeaders().get(CommonConstants.HEADER_TRACE_ID);
|
||||
List<String> headerTraceIds = serverHttpResponse.getHeaders().get(systemConfig.fizzTraceIdHeader());
|
||||
if (headerTraceIds == null || !headerTraceIds.contains(traceId)) {
|
||||
serverHttpResponse.getHeaders().add(CommonConstants.HEADER_TRACE_ID, traceId);
|
||||
serverHttpResponse.getHeaders().add(systemConfig.fizzTraceIdHeader(), traceId);
|
||||
}
|
||||
|
||||
long end = System.currentTimeMillis();
|
||||
|
||||
@@ -172,7 +172,7 @@ public class CallbackFilter extends FizzWebFilter {
|
||||
StringBuilder b = ThreadContext.getStringBuilder();
|
||||
b.append(Constants.Symbol.LEFT_BRACE);
|
||||
|
||||
b.append(_id); toJsonStringValue(b, req.getId()); b.append(Constants.Symbol.COMMA);
|
||||
b.append(_id); toJsonStringValue(b, WebUtils.getTraceId(exchange)); b.append(Constants.Symbol.COMMA);
|
||||
b.append(_datetime); b.append(System.currentTimeMillis()); b.append(Constants.Symbol.COMMA);
|
||||
b.append(_origin); toJsonStringValue(b, WebUtils.getOriginIp(exchange)); b.append(Constants.Symbol.COMMA);
|
||||
|
||||
|
||||
@@ -68,30 +68,29 @@ public class FilterExceptionHandlerConfig {
|
||||
return Mono.empty();
|
||||
}
|
||||
}
|
||||
String rid = WebUtils.getTraceId(exchange);
|
||||
if (t instanceof ExecuteScriptException) {
|
||||
ExecuteScriptException ex = (ExecuteScriptException) t;
|
||||
resp.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
|
||||
RespEntity rs = null;
|
||||
String reqId = exchange.getRequest().getId();
|
||||
if (ex.getStepContext() != null && ex.getStepContext().returnContext()) {
|
||||
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), reqId, ex.getStepContext());
|
||||
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid, ex.getStepContext());
|
||||
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(JacksonUtils.writeValueAsString(rs).getBytes())));
|
||||
} else {
|
||||
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), reqId);
|
||||
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid);
|
||||
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(rs.toString().getBytes())));
|
||||
}
|
||||
}
|
||||
if (t instanceof FizzRuntimeException) {
|
||||
FizzRuntimeException ex = (FizzRuntimeException) t;
|
||||
log.error(ex.getMessage(), LogService.BIZ_ID, exchange.getRequest().getId(), ex);
|
||||
log.error(ex.getMessage(), LogService.BIZ_ID, rid, ex);
|
||||
resp.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
|
||||
RespEntity rs = null;
|
||||
String reqId = exchange.getRequest().getId();
|
||||
if (ex.getStepContext() != null && ex.getStepContext().returnContext()) {
|
||||
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), reqId, ex.getStepContext());
|
||||
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid, ex.getStepContext());
|
||||
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(JacksonUtils.writeValueAsString(rs).getBytes())));
|
||||
} else {
|
||||
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), reqId);
|
||||
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid);
|
||||
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(rs.toString().getBytes())));
|
||||
}
|
||||
}
|
||||
@@ -100,8 +99,8 @@ public class FilterExceptionHandlerConfig {
|
||||
if (fc == null) { // t came from flow control filter
|
||||
StringBuilder b = ThreadContext.getStringBuilder();
|
||||
WebUtils.request2stringBuilder(exchange, b);
|
||||
log.error(b.toString(), LogService.BIZ_ID, exchange.getRequest().getId(), t);
|
||||
String s = RespEntity.toJson(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), exchange.getRequest().getId());
|
||||
log.error(b.toString(), LogService.BIZ_ID, rid, t);
|
||||
String s = RespEntity.toJson(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid);
|
||||
resp.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
|
||||
vm = resp.writeWith(Mono.just(resp.bufferFactory().wrap(s.getBytes())));
|
||||
} else {
|
||||
|
||||
@@ -55,7 +55,7 @@ public class FizzLogFilter implements WebFilter {
|
||||
WebUtils.request2stringBuilder(exchange, b);
|
||||
b.append(resp).append(exchange.getResponse().getStatusCode())
|
||||
.append(in) .append(System.currentTimeMillis() - startTime);
|
||||
LOGGER.info(b.toString(), LogService.BIZ_ID, exchange.getRequest().getId());
|
||||
LOGGER.info(b.toString(), LogService.BIZ_ID, WebUtils.getTraceId(exchange));
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@@ -17,11 +17,6 @@
|
||||
|
||||
package we.filter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -33,7 +28,6 @@ import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import org.springframework.web.server.WebFilterChain;
|
||||
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.publisher.SignalType;
|
||||
import we.config.SystemConfig;
|
||||
@@ -47,10 +41,11 @@ import we.stats.IncrRequestResult;
|
||||
import we.stats.ResourceConfig;
|
||||
import we.stats.ratelimit.ResourceRateLimitConfig;
|
||||
import we.stats.ratelimit.ResourceRateLimitConfigService;
|
||||
import we.util.Constants;
|
||||
import we.util.JacksonUtils;
|
||||
import we.util.ThreadContext;
|
||||
import we.util.WebUtils;
|
||||
import we.util.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author hongqiaowei
|
||||
@@ -68,6 +63,8 @@ public class FlowControlFilter extends FizzWebFilter {
|
||||
|
||||
private static final String actuator = "actuator";
|
||||
|
||||
private static final String uuid = "uuid";
|
||||
|
||||
public static final String ADMIN_REQUEST = "$a";
|
||||
|
||||
@Resource
|
||||
@@ -85,6 +82,9 @@ public class FlowControlFilter extends FizzWebFilter {
|
||||
@Resource
|
||||
private AppService appService;
|
||||
|
||||
@Resource
|
||||
private SystemConfig systemConfig;
|
||||
|
||||
@Override
|
||||
public Mono<Void> doFilter(ServerWebExchange exchange, WebFilterChain chain) {
|
||||
|
||||
@@ -111,10 +111,6 @@ public class FlowControlFilter extends FizzWebFilter {
|
||||
return WebUtils.buildJsonDirectResponse(exchange, HttpStatus.FORBIDDEN, null, json);
|
||||
}
|
||||
String app = WebUtils.getAppId(exchange);
|
||||
// if (app != null && !appService.getAppMap().containsKey(app)) {
|
||||
// String json = RespEntity.toJson(HttpStatus.FORBIDDEN.value(), "no app " + app, exchange.getRequest().getId());
|
||||
// return WebUtils.buildJsonDirectResponse(exchange, HttpStatus.FORBIDDEN, null, json);
|
||||
// }
|
||||
path = WebUtils.getClientReqPath(exchange);
|
||||
String ip = WebUtils.getOriginIp(exchange);
|
||||
|
||||
@@ -151,6 +147,7 @@ public class FlowControlFilter extends FizzWebFilter {
|
||||
|
||||
} else {
|
||||
long start = System.currentTimeMillis();
|
||||
setTraceId(exchange);
|
||||
return chain.filter(exchange).doFinally(s -> {
|
||||
long rt = System.currentTimeMillis() - start;
|
||||
if (s == SignalType.ON_ERROR || exchange.getResponse().getStatusCode().is5xxServerError()) {
|
||||
@@ -162,9 +159,27 @@ public class FlowControlFilter extends FizzWebFilter {
|
||||
}
|
||||
}
|
||||
|
||||
setTraceId(exchange);
|
||||
return chain.filter(exchange);
|
||||
}
|
||||
|
||||
private void setTraceId(ServerWebExchange exchange) {
|
||||
String traceId = exchange.getRequest().getHeaders().getFirst(systemConfig.fizzTraceIdHeader());
|
||||
if (StringUtils.isBlank(traceId)) {
|
||||
if (StringUtils.isBlank(systemConfig.fizzTraceIdValueStrategy())) {
|
||||
traceId = exchange.getRequest().getId();
|
||||
} else if (systemConfig.fizzTraceIdValueStrategy().equals(uuid)) {
|
||||
traceId = UUIDUtil.getUUID();
|
||||
} else {
|
||||
throw Utils.runtimeExceptionWithoutStack("unsupported " + systemConfig.fizzTraceIdValueStrategy() + " trace id value strategy!");
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(systemConfig.fizzTraceIdValuePrefix())) {
|
||||
traceId = systemConfig.fizzTraceIdValuePrefix() + traceId;
|
||||
}
|
||||
exchange.getAttributes().put(WebUtils.TRACE_ID, traceId);
|
||||
}
|
||||
|
||||
private List<ResourceConfig> getResourceConfigItselfAndParents(ResourceConfig rc, List<ResourceConfig> rcs) {
|
||||
boolean check = false;
|
||||
String rcId = rc.getResourceId();
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.springframework.web.reactive.function.client.ClientResponse;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import org.springframework.web.server.WebFilterChain;
|
||||
import reactor.core.publisher.Mono;
|
||||
import we.config.SystemConfig;
|
||||
import we.constants.CommonConstants;
|
||||
import we.flume.clients.log4j2appender.LogService;
|
||||
import we.legacy.RespEntity;
|
||||
@@ -67,6 +68,9 @@ public class RouteFilter extends FizzWebFilter {
|
||||
@Resource
|
||||
private ApacheDubboGenericService dubboGenericService;
|
||||
|
||||
@Resource
|
||||
private SystemConfig systemConfig;
|
||||
|
||||
@Override
|
||||
public Mono<Void> doFilter(ServerWebExchange exchange, WebFilterChain chain) {
|
||||
|
||||
@@ -77,7 +81,7 @@ public class RouteFilter extends FizzWebFilter {
|
||||
Mono<Void> resp = WebUtils.getDirectResponse(exchange);
|
||||
if (resp == null) { // should not reach here
|
||||
ServerHttpRequest clientReq = exchange.getRequest();
|
||||
String rid = clientReq.getId();
|
||||
String rid = WebUtils.getTraceId(exchange);
|
||||
String msg = pfr.id + " fail";
|
||||
if (pfr.cause == null) {
|
||||
log.error(msg, LogService.BIZ_ID, rid);
|
||||
@@ -94,7 +98,7 @@ public class RouteFilter extends FizzWebFilter {
|
||||
private Mono<Void> doFilter0(ServerWebExchange exchange, WebFilterChain chain) {
|
||||
|
||||
ServerHttpRequest req = exchange.getRequest();
|
||||
String rid = req.getId();
|
||||
String rid = WebUtils.getTraceId(exchange);
|
||||
|
||||
// ApiConfig ac = WebUtils.getApiConfig(exchange);
|
||||
Route route = WebUtils.getRoute(exchange);
|
||||
@@ -133,7 +137,7 @@ public class RouteFilter extends FizzWebFilter {
|
||||
|
||||
private Mono<Void> send(ServerWebExchange exchange, HttpMethod method, String service, String relativeUri, HttpHeaders hdrs) {
|
||||
ServerHttpRequest clientReq = exchange.getRequest();
|
||||
return fizzWebClient.send2service(clientReq.getId(), method, service, relativeUri, hdrs, clientReq.getBody()).flatMap(genServerResponse(exchange));
|
||||
return fizzWebClient.send2service(WebUtils.getTraceId(exchange), method, service, relativeUri, hdrs, clientReq.getBody()).flatMap(genServerResponse(exchange));
|
||||
}
|
||||
|
||||
private Function<ClientResponse, Mono<? extends Void>> genServerResponse(ServerWebExchange exchange) {
|
||||
@@ -160,7 +164,7 @@ public class RouteFilter extends FizzWebFilter {
|
||||
);
|
||||
if (log.isDebugEnabled()) {
|
||||
StringBuilder b = ThreadContext.getStringBuilder();
|
||||
String rid = exchange.getRequest().getId();
|
||||
String rid = WebUtils.getTraceId(exchange);
|
||||
WebUtils.response2stringBuilder(rid, remoteResp, b);
|
||||
log.debug(b.toString(), LogService.BIZ_ID, rid);
|
||||
}
|
||||
@@ -208,7 +212,7 @@ public class RouteFilter extends FizzWebFilter {
|
||||
}
|
||||
declaration.setTimeout(t);
|
||||
|
||||
Map<String, String> attachments = Collections.singletonMap(CommonConstants.HEADER_TRACE_ID, WebUtils.getTraceId(exchange));
|
||||
Map<String, String> attachments = Collections.singletonMap(systemConfig.fizzTraceIdHeader(), WebUtils.getTraceId(exchange));
|
||||
return dubboGenericService.send(parameters, declaration, attachments);
|
||||
}
|
||||
)
|
||||
@@ -225,7 +229,7 @@ public class RouteFilter extends FizzWebFilter {
|
||||
if (ls[0] != null) {
|
||||
b.append('\n').append(ls[0]);
|
||||
}
|
||||
log.error(b.toString(), LogService.BIZ_ID, exchange.getRequest().getId(), t);
|
||||
log.error(b.toString(), LogService.BIZ_ID, WebUtils.getTraceId(exchange), t);
|
||||
}
|
||||
)
|
||||
;
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.springframework.web.server.ServerWebExchange;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
import we.config.SystemConfig;
|
||||
import we.constants.CommonConstants;
|
||||
import we.fizz.input.Input;
|
||||
import we.flume.clients.log4j2appender.LogService;
|
||||
@@ -54,6 +55,9 @@ public class AggregateService {
|
||||
@Resource
|
||||
private ConfigLoader aggregateResourceLoader;
|
||||
|
||||
@Resource
|
||||
private SystemConfig systemConfig;
|
||||
|
||||
public Mono<AggregateResult> request(String traceId, String clientReqPathPrefix, String method, String service, String path, MultiValueMap<String, String> queryParams,
|
||||
HttpHeaders headers, String body) {
|
||||
|
||||
@@ -114,9 +118,9 @@ public class AggregateService {
|
||||
// defalut content-type
|
||||
clientResp.getHeaders().add("Content-Type", "application/json; charset=UTF-8");
|
||||
}
|
||||
List<String> headerTraceIds = clientResp.getHeaders().get(CommonConstants.HEADER_TRACE_ID);
|
||||
List<String> headerTraceIds = clientResp.getHeaders().get(systemConfig.fizzTraceIdHeader());
|
||||
if (headerTraceIds == null || !headerTraceIds.contains(traceId)) {
|
||||
clientResp.getHeaders().add(CommonConstants.HEADER_TRACE_ID, traceId);
|
||||
clientResp.getHeaders().add(systemConfig.fizzTraceIdHeader(), traceId);
|
||||
}
|
||||
// long end = System.currentTimeMillis();
|
||||
// pipeline.getStepContext().addElapsedTime("总耗时", end - start);
|
||||
|
||||
@@ -29,6 +29,8 @@ import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import reactor.core.publisher.Mono;
|
||||
import we.FizzAppContext;
|
||||
import we.config.SystemConfig;
|
||||
import we.constants.CommonConstants;
|
||||
import we.exception.ExecuteScriptException;
|
||||
import we.fizz.StepContext;
|
||||
@@ -79,7 +81,12 @@ public class DubboInput extends RPCInput {
|
||||
contextAttachment = new HashMap<String, String>(attachments);
|
||||
}
|
||||
if (inputContext.getStepContext() != null && inputContext.getStepContext().getTraceId() != null) {
|
||||
contextAttachment.put(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
|
||||
if (FizzAppContext.appContext == null) {
|
||||
contextAttachment.put(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
|
||||
} else {
|
||||
SystemConfig systemConfig = FizzAppContext.appContext.getBean(SystemConfig.class);
|
||||
contextAttachment.put(systemConfig.fizzTraceIdHeader(), inputContext.getStepContext().getTraceId());
|
||||
}
|
||||
}
|
||||
|
||||
Mono<Object> proxyResponse = proxy.send(body, declaration, contextAttachment);
|
||||
|
||||
@@ -24,6 +24,8 @@ import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import reactor.core.publisher.Mono;
|
||||
import we.FizzAppContext;
|
||||
import we.config.SystemConfig;
|
||||
import we.constants.CommonConstants;
|
||||
import we.exception.ExecuteScriptException;
|
||||
import we.fizz.StepContext;
|
||||
@@ -72,7 +74,12 @@ public class GrpcInput extends RPCInput implements IInput {
|
||||
contextAttachment = new HashMap<String, Object>(attachments);
|
||||
}
|
||||
if (inputContext.getStepContext() != null && inputContext.getStepContext().getTraceId() != null) {
|
||||
contextAttachment.put(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
|
||||
if (FizzAppContext.appContext == null) {
|
||||
contextAttachment.put(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
|
||||
} else {
|
||||
SystemConfig systemConfig = FizzAppContext.appContext.getBean(SystemConfig.class);
|
||||
contextAttachment.put(systemConfig.fizzTraceIdHeader(), inputContext.getStepContext().getTraceId());
|
||||
}
|
||||
}
|
||||
|
||||
Mono<Object> proxyResponse = proxy.send(JSON.toJSONString(body), declaration, contextAttachment);
|
||||
|
||||
@@ -360,7 +360,7 @@ public class RequestInput extends RPCInput implements IInput{
|
||||
}
|
||||
|
||||
headers.remove(CommonConstants.HEADER_CONTENT_LENGTH);
|
||||
headers.add(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
|
||||
headers.add(systemConfig.fizzTraceIdHeader(), inputContext.getStepContext().getTraceId());
|
||||
request.put("headers", MapUtil.headerToHashMap(headers));
|
||||
|
||||
Object body = null;
|
||||
|
||||
@@ -52,7 +52,7 @@ public abstract class PluginFilter implements FizzPluginFilter {
|
||||
public Mono<Void> filter(ServerWebExchange exchange, Map<String, Object> config, String fixedConfig) {
|
||||
FilterResult pfr = WebUtils.getPrevFilterResult(exchange);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(this + ": " + pfr.id + " execute " + (pfr.success ? "success" : "fail"), LogService.BIZ_ID, exchange.getRequest().getId());
|
||||
log.debug(this + ": " + pfr.id + " execute " + (pfr.success ? "success" : "fail"), LogService.BIZ_ID, WebUtils.getTraceId(exchange));
|
||||
}
|
||||
if (pfr.success) {
|
||||
return doFilter(exchange, config, fixedConfig);
|
||||
|
||||
@@ -289,7 +289,7 @@ public class ApiConfigService {
|
||||
public Mono<Object> canAccess(ServerWebExchange exchange) {
|
||||
ServerHttpRequest req = exchange.getRequest();
|
||||
HttpHeaders hdrs = req.getHeaders();
|
||||
LogService.setBizId(req.getId());
|
||||
LogService.setBizId(WebUtils.getTraceId(exchange));
|
||||
return canAccess(exchange, WebUtils.getAppId(exchange), WebUtils.getOriginIp(exchange), getTimestamp(hdrs), getSign(hdrs),
|
||||
WebUtils.getClientService(exchange), req.getMethod(), WebUtils.getClientReqPath(exchange));
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ public class AuthPluginFilter extends PluginFilter {
|
||||
return apiConfigService.canAccess(exchange).flatMap(
|
||||
r -> {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("req auth: " + r, LogService.BIZ_ID, exchange.getRequest().getId());
|
||||
log.debug("req auth: " + r, LogService.BIZ_ID, WebUtils.getTraceId(exchange));
|
||||
}
|
||||
Map<String, Object> data = Collections.singletonMap(RESULT, r);
|
||||
return WebUtils.transmitSuccessFilterResultAndEmptyMono(exchange, AUTH_PLUGIN_FILTER, data);
|
||||
|
||||
@@ -31,6 +31,7 @@ import we.plugin.FizzPluginFilterChain;
|
||||
import we.spring.http.server.reactive.ext.FizzServerHttpRequestDecorator;
|
||||
import we.spring.web.server.ext.FizzServerWebExchangeDecorator;
|
||||
import we.util.NettyDataBufferUtils;
|
||||
import we.util.WebUtils;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -69,7 +70,8 @@ public class RequestBodyPlugin implements FizzPluginFilter {
|
||||
newExchange = new FizzServerWebExchangeDecorator(mutatedExchange);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(req.getId() + " request is decorated", LogService.BIZ_ID, req.getId());
|
||||
String traceId = WebUtils.getTraceId(exchange);
|
||||
log.debug(traceId + " request is decorated", LogService.BIZ_ID, traceId);
|
||||
}
|
||||
return FizzPluginFilterChain.next(newExchange);
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ public class CallbackService {
|
||||
|
||||
public Mono<Void> requestBackends(ServerWebExchange exchange, HttpHeaders headers, DataBuffer body, CallbackConfig cc, Map<String, ServiceInstance> service2instMap) {
|
||||
ServerHttpRequest req = exchange.getRequest();
|
||||
String reqId = req.getId();
|
||||
String reqId = WebUtils.getTraceId(exchange);
|
||||
HttpMethod method = req.getMethod();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("service2instMap: " + JacksonUtils.writeValueAsString(service2instMap), LogService.BIZ_ID, reqId);
|
||||
@@ -153,7 +153,7 @@ public class CallbackService {
|
||||
StringBuilder b = ThreadContext.getStringBuilder();
|
||||
WebUtils.request2stringBuilder(exchange, b);
|
||||
b.append(Constants.Symbol.LINE_SEPARATOR).append(callback).append(Constants.Symbol.LINE_SEPARATOR);
|
||||
String id = exchange.getRequest().getId();
|
||||
String id = WebUtils.getTraceId(exchange);
|
||||
WebUtils.request2stringBuilder(id, method, r.service + Constants.Symbol.FORWARD_SLASH + r.path, headers, body, b);
|
||||
log.error(b.toString(), LogService.BIZ_ID, id, t);
|
||||
}
|
||||
@@ -195,7 +195,7 @@ public class CallbackService {
|
||||
);
|
||||
if (log.isDebugEnabled()) {
|
||||
StringBuilder b = ThreadContext.getStringBuilder();
|
||||
String rid = exchange.getRequest().getId();
|
||||
String rid = WebUtils.getTraceId(exchange);
|
||||
WebUtils.response2stringBuilder(rid, remoteResp, b);
|
||||
log.debug(b.toString(), LogService.BIZ_ID, rid);
|
||||
}
|
||||
|
||||
@@ -76,14 +76,14 @@ public abstract class WebUtils {
|
||||
|
||||
private static final String clientRequestQuery = "@crq";
|
||||
|
||||
private static final String traceId = "traceId";
|
||||
|
||||
private static String gatewayPrefix = SystemConfig.DEFAULT_GATEWAY_PREFIX;
|
||||
|
||||
private static List<String> appHeaders = Stream.of("fizz-appid").collect(Collectors.toList());
|
||||
|
||||
private static final String app = "app";
|
||||
|
||||
public static final String TRACE_ID = "@traid";
|
||||
|
||||
public static final String BACKEND_SERVICE = "@bs";
|
||||
|
||||
public static final String FILTER_CONTEXT = "@fc";
|
||||
@@ -417,7 +417,7 @@ public abstract class WebUtils {
|
||||
|
||||
public static void request2stringBuilder(ServerWebExchange exchange, StringBuilder b) {
|
||||
ServerHttpRequest req = exchange.getRequest();
|
||||
request2stringBuilder(req.getId(), req.getMethod(), req.getURI().toString(), req.getHeaders(), null, b);
|
||||
request2stringBuilder(WebUtils.getTraceId(exchange), req.getMethod(), req.getURI().toString(), req.getHeaders(), null, b);
|
||||
}
|
||||
|
||||
public static void request2stringBuilder(String reqId, HttpMethod method, String uri, HttpHeaders headers, Object body, StringBuilder b) {
|
||||
@@ -470,7 +470,7 @@ public abstract class WebUtils {
|
||||
// }
|
||||
// );
|
||||
// }
|
||||
String rid = exchange.getRequest().getId();
|
||||
String rid = getTraceId(exchange);
|
||||
// Schedulers.parallel().schedule(() -> {
|
||||
StringBuilder b = ThreadContext.getStringBuilder();
|
||||
request2stringBuilder(exchange, b);
|
||||
@@ -524,7 +524,7 @@ public abstract class WebUtils {
|
||||
@Deprecated
|
||||
public static Mono<Void> responseErrorAndBindContext(ServerWebExchange exchange, String filter, HttpStatus httpStatus) {
|
||||
ServerHttpResponse response = exchange.getResponse();
|
||||
String rid = exchange.getRequest().getId();
|
||||
String rid = getTraceId(exchange);
|
||||
StringBuilder b = ThreadContext.getStringBuilder();
|
||||
request2stringBuilder(exchange, b);
|
||||
b.append(Constants.Symbol.LINE_SEPARATOR);
|
||||
@@ -538,7 +538,7 @@ public abstract class WebUtils {
|
||||
public static Mono<Void> responseErrorAndBindContext(ServerWebExchange exchange, String filter, HttpStatus httpStatus,
|
||||
HttpHeaders headers, String content) {
|
||||
ServerHttpResponse response = exchange.getResponse();
|
||||
String rid = exchange.getRequest().getId();
|
||||
String rid = getTraceId(exchange);
|
||||
StringBuilder b = ThreadContext.getStringBuilder();
|
||||
request2stringBuilder(exchange, b);
|
||||
b.append(Constants.Symbol.LINE_SEPARATOR);
|
||||
@@ -571,15 +571,9 @@ public abstract class WebUtils {
|
||||
}
|
||||
|
||||
public static String getTraceId(ServerWebExchange exchange) {
|
||||
String id = exchange.getAttribute(traceId);
|
||||
String id = exchange.getAttribute(TRACE_ID);
|
||||
if (id == null) {
|
||||
ServerHttpRequest request = exchange.getRequest();
|
||||
String v = request.getHeaders().getFirst(CommonConstants.HEADER_TRACE_ID);
|
||||
if (StringUtils.isNotBlank(v)) {
|
||||
id = v;
|
||||
} else {
|
||||
id = CommonConstants.TRACE_ID_PREFIX + request.getId();
|
||||
}
|
||||
id = exchange.getRequest().getId();
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user