java trace 追踪_全链路日志追踪-trace_id方式

全链路日志追踪过程:

nginx---> 网关--->服务A----服务.......

1、nginx相关配置

(1) nginx.conf

# HTTPS server

server {

listen 443 ssl http2;

server_name mp-sit.smartmidea.net;

ssl_protocols TLSv1.1 TLSv1.2;

ssl_certificate smartmidea.net.cer;

ssl_certificate_key smartmidea.net.key;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers on;

include /apps/svr/nginx-1.17.5/conf/log_trace_proc.conf;   //此文件是申城trace_id 、trace_path     具体内容如下

###########

set $trace_id $http_mc_trace_id;

set $trace_path $http_mc_trace_path;

set $curr_path "$msec:nginx:${server_addr}:${server_port}";

if ($trace_id != ''){

set $trace_path "${trace_path}${dollar}${curr_path}";

}

if ($trace_id = '') {

set $trace_id $request_id;              //nginx版本要求(>1.11.0,下图为nginx官方关于$request_id申城唯一标识

set $trace_id "${trace_id}${dollar}${trace_id}";   // ${dollar}=$

set $trace_path "${curr_path}";

}

###########

include /apps/svr/nginx-1.17.5/conf/vhost.conf;

}

#日志格式及通用变量配置

log_format trace_log 'mp-nginx|$trace_id|$trace_path|$remote_addr|'

'$server_addr|$server_port|$http_traceId|$msec|$request_time|'

'$request_method|$request_uri|$status|$request_length|$body_bytes_sent|'

'$http_referer|$http_user_agent|$upstream_addr|$http_host';

access_log /apps/svr/nginx-1.17.5/logs/tracelog-mp-nginx.log trace_log;

}

(2) vhost.conf

location = /service {

proxy_redirect off;

proxy_ignore_client_abort on;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header mc-trace-id $trace_id;

proxy_set_header mc-trace-path $trace_path;    //mc-trace-id   mc-trace-path 在头部转发到对应服务中;

(3) nginx日志位置:

033f498504de638027c797481a8b6050.png

2、服务A获取日志并打印到对应文件夹位置

(1) log4配置文件如下

服务A

/apps/logs/${modelName}

/apps/logs/${modelName}

%d{yyyy-MM-dd HH:mm:ss.SSS} %5p -%X{requestId}- [%15.15t] %-40.40c{1.} : %m%n%xwEx

filePattern="${fileGz}/$${date:yyyy-MM}/${modelName}-info-%d{yyyy-MM-dd}-%i.log.gz">

//info日志ReportLogFilter 过滤掉

filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.${modelName}-error.gz">

filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.${modelName}-report.gz">

(2)ReportLogFilter  过滤器

import org.apache.logging.log4j.Level;

import org.apache.logging.log4j.Marker;

import org.apache.logging.log4j.core.LogEvent;

import org.apache.logging.log4j.core.Logger;

import org.apache.logging.log4j.core.config.plugins.Plugin;

import org.apache.logging.log4j.core.config.plugins.PluginAttribute;

import org.apache.logging.log4j.core.config.plugins.PluginFactory;

import org.apache.logging.log4j.core.filter.AbstractFilter;

import org.apache.logging.log4j.message.Message;

@Plugin(

name = "ReportLogFilter",

category = "Core",

elementType = "filter",

printObject = true

)

public final class ReportLogFilter extends AbstractFilter { // 参照ThresholdFilter

private ReportLogFilter(Result onMatch, Result onMismatch) {

super(onMatch, onMismatch);

}

@Override

public Result filter(Logger logger, Leve

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值