5.3 KiB
安装概要
- 在etcd下载页面下载对应操作系统的etcd,https://github.com/etcd-io/etcd/releases 使用3.4.x以上。相关搭建细节
- 启动worker
- 启动client
- 启动DashBoard
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
)同上
-
配置clickhouse,mdc,workerPath(应用名)
注:配置后在ETCD侧,会在worker启动时存放worker的ip和端口,格式如下
KEY
/userTracer/workers/{workerPath}/{mdc}/hostName
/userTracer/workers/{workerPath}/hostName
VALUE
127.0.0.1:8080
然后客户端Client-Demo会在启动的候,从配置中心获取worker的ip集合。