jlog/运行说明.md
2021-12-28 12:22:27 +08:00

5.3 KiB
Raw Blame History

安装概要

Worker运行脚本示例

export JAVA_OPTS = -Xms25096m -Xmx25096m -Xmn16096m -XX:MetaspaceSize=256m -Xss256K -XX:+UseG1GC -XX:ParallelGCThreads=8 -Duser.timezone=Asia/Shanghai
export MYSQL_HOST = test
export MYSQL_USER	user
export MYSQL_PASS	pass
export INSERT_INTERVAL	1
export etcdServer	http://127.0.0.1:2379,http://127.0.0.1:xxxx
export BATCH_SIZE	7000
export MYSQL_PORT	8123
export NODE_NUMBER	15
export queueSize	8192
export POOL_SIZE	5
export threadCount	6
export DB_NAME	myDbName
export workerPath	AppName
export preDbSize	100000

# Set log directory for log4j
LOG_DIR=/export/Logs

# Set Java environment
JAVA_ENV="-Dlog-dir=$LOG_DIR"

if [ -z $etcdServer ];then
    etcdServer=http://127.0.0.1:2379
fi
# Run
java -jar $JAVA_OPTS $JAVA_ENV xxx.jar --etcd.server=${etcdServer}

其中配置的日志路径 可通过${log-dir}引入,也可以写在web.xml,或者直接在log4j.xml文件里写死。

记录数据说明

一条日志的数据可分为两种:出入参、链路日志。其中出入参的基本信息较为固定,而中途日志为请求中日志,用户可自行添加。

出入参日志有且不仅有:

  • 链路id

  • 应用名称

  • 创建时间

  • 请求耗时

  • 请求接口

  • 请求返回值

  • 日志创建时间

  • 请求入参相关自定义信息

    • 客户端种类

    • 客户端版本

    • 用户ip

    • 服务器ip

      ......

JLog总结了常用的日志参数在Client端用规范的格式记录参数 (具体记录逻辑可见UserFIlter类) 。在Worker端针对定义的日志格式又有一些特殊处理具体见TracerConsumer类)再入库。那如何自定义日志记录格式和处理入库格式呢?

  • 仿照UserFIlter自定义日志记录格式 修改放入传输对象tracerBean的元素逻辑
  • 仿照TracerConsumer自定义日志入库格式, 修改中途日志(dealTracerLog) / 出入参日志(dealFilterModel)的 入库对象构造方法
  • 可能涉及更改DashBoard项目的展示逻辑

待之后优化支持拓展点修改日志格式和展示逻辑。

Client Demo运行

  • 配置ETCD

    构建TracerClientStarter, 设置etcd应用名mdc(机房名, 可有可无)

    @Configuration
    public class DemoConfig {
    
        @Value("${config.server}")
        private String etcdServer;
    
        @PostConstruct
        public void begin() {
            TracerClientStarter tracerClientStarter = new TracerClientStarter.Builder()
                    .setAppName("demo")
                    .setEtcdServer(etcdServer).build();
            tracerClientStarter.startPipeline();
        }
    }
    
  • 配置UserFilter拦截器

    		@Bean
        public FilterRegistrationBean urlFilter() {
            FilterRegistrationBean registration = new FilterRegistrationBean();
            UserFilter userFilter = new UserFilter();
    
            registration.setFilter(userFilter);
            registration.addUrlPatterns("/*");
            registration.setName("UserTraceFilter");
            registration.setOrder(1);
            return registration;
        }
    
  • 配置日志框架 (log4j / log4j2 / logback)

    以log4j2举例在配置的log4j2.xml文件中引入JLog自有的Appender并设置

        <Appemders>
            <tracer name="tracerAppender"></tracer>
        </Appenders>
    
        <Loggers>
            <Logger name="RequestLog" level="INFO" additivity="false">
                <AppenderRef ref="requestLog"/>
                <AppenderRef ref="tracerAppender" />
            </Logger>
            <Root level="INFO" includeLocation="false"></Root>
        </Loggers>
    
  • 测试记录出入参

    配置UserFilter后符合拦截器拦截设置的,都会被记录出入参

  • 测试记录中途日志

    详见TestController

    @RestController
    public class TestController {
        /**
         * do nothing
         * just as an adapter for this project common log helper
         *
         */
        private static Logger RequestLog = LoggerFactory.getLogger("RequestLog");
    
        @RequestMapping("/index")
        public Object index() {
            TracerBean tracerBean = new TracerBean();
            tracerBean.setTracerId("11111");
    
            RequestLog.info("test");
    
            return tracerBean;
        }
    
    }
    

    这里RequestLog为刚配置了引入JLog自带Appender的日志。所以这一条请求记录中,除了出入参外还有一条中途日志“test”

  • 测试模拟数据发送至worker

    模拟UserFilter发送构造好的出入参数据udp发送给worker。可外嵌层for循环用于压测详见TracerPacketTest类。

worker运行

  • 配置ETCD

    同上

  • 配置日志框架 (log4j / log4j2 / logback)

    同上

  • 配置clickhousemdcworkerPath(应用名)

配置后在ETCD侧会在worker启动时存放worker的ip和端口格式如下

KEY
/userTracer/workers/{workerPath}/{mdc}/hostName
/userTracer/workers/{workerPath}/hostName

VALUE
127.0.0.1:8080

然后客户端Client-Demo会在启动的候从配置中心获取worker的ip集合。