SOFATracer 支持 Spring MVC、标准 JDBC 接口实现的数据库连接池(DBCP、Druid、c3p0、tomcat、HikariCP、BoneCP)、HttpClient、Dubbo、Spring Cloud OpenFeign 等开源组件。组件埋点接入后,即可查看相关 Tracer 日志。本文将介绍如下几种日志及其日志格式。
开源版的日志默认为 JSON 格式,企业版默认以逗号分隔。
日志会不定期新增部分字段,新增字段会从日志尾部添加,不会影响原日志字段。若您实际打印的日志与本文中日志字段数不一致,请按顺序进行对比,新增字段可咨询售后技术支持。
Spring MVC 日志
SOFATracer 集成 SpringMVC 后输出 MVC 请求的链路数据格式,默认为 JSON 数据格式。
Spring MVC 摘要日志
spring-mvc-digest.log
是 Spring MVC 摘要日志,以 JSON 格式输出。日志样例如下:
{"time":"2019-09-03 10:33:10.336","local.app":"RestTemplateDemo","traceId":"0a0fe9271567477985327100211176","spanId":"0.1","span.kind":"server","result.code":"200","current.thread.name":"http-nio-8801-exec-2","time.cost.milliseconds":"5006ms","request.url":"http://localhost:8801/asyncrest","method":"GET","req.size.bytes":-1,"resp.size.bytes":0,"sys.baggage":"","biz.baggage":""}
对应 key 的说明如下:
key | 说明 |
time | 日志打印时间 |
local.app | 当前应用名 |
traceId | 请求的 TraceId。 详细信息,请参见 TraceId 生成规则。 |
spanId | 请求的 SpanId。 详细信息,请参见 SpanId 生成规则。 |
span.kind | Span 类型 |
result.code | 结果码 |
current.thread.name | 当前线程名 |
time.cost.milliseconds | Span 耗时,单位:ms。 |
request.url | 请求 URL |
method | 调用方法 |
req.size.bytes | 请求数据大小,单位:Byte。 |
resp.size.bytes | 响应数据大小,单位:Byte。 |
sys.baggage | 系统透传的 baggage 数据 |
biz.baggage | 业务透传的 baggage 数据 |
Spring MVC 统计日志
spring-mvc-stat.log
是 Spring MVC 统计日志。其中,stat.key
为本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 method
、local.app
和 request.url
字段。日志样例如下:
{"time":"2019-09-03 10:34:04.129","stat.key":{"method":"GET","local.app":"RestTemplateDemo","request.url":"http://localhost:8801/asyncrest"},"count":1,"total.cost.milliseconds":5006,"success":"true","load.test":"F"}
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | method | 调用方法 |
local.app | 当前应用名 | |
request.url | 请求 URL | |
count | 请求次数 | |
total.cost.milliseconds | 请求总耗时,单位:ms。 | |
success | 请求结果:
| |
load.test | 判断当前是否为全链路压测:
|
HttpClient 日志
SOFATracer 集成 sofa-tracer-httpclient-plugin 插件后输出 HttpClient 请求的链路数据,默认为 JSON 数据格式。
HttpClient 摘要日志
httpclient-digest.log
是 HttpClient 摘要日志,以 JSON 格式输出。日志样例如下:
{"time":"2019-09-02 23:43:13.191","local.app":"HttpClientDemo","traceId":"1e27a79c1567438993170100210107","spanId":"0","span.kind":"client","result.code":"200","current.thread.name":"I/O dispatcher 1","time.cost.milliseconds":"21ms","request.url":"http://localhost:8080/httpclient","method":"GET","req.size.bytes":0,"resp.size.bytes":-1,"remote.app":"","sys.baggage":"","biz.baggage":""}
对应 key 的说明如下:
key | 说明 |
time | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
span.kind | Span 类型 |
result.code | 结果码 |
current.thread.name | 当前线程名称 |
time.cost.milliseconds | Span 耗时 |
request.url | 请求 URL |
method | 调用方法 |
req.size.bytes | 请求数据大小 |
resp.size.bytes | 响应数据大小 |
remote.app | 目标应用名称 |
sys.baggage | 系统透传的 baggage 数据 |
biz.baggage | 业务透传的 baggage 数据 |
应用名称可以通过 SofaTracerHttpClientBuilder
构造 HttpClient 实例时,以入参的形式传入。
HttpClient 统计日志
httpclient-stat.log
是 HttpClient 统计日志。其中,stat.key
即本段时间内的统计关键字集合。统计关键字集合唯一确定一组统计数据,包含 method
、local.app
和 request.url
字段。日志样例如下:
{"time":"2019-09-02 23:44:11.785","stat.key":{"method":"GET","local.app":"HttpClientDemo","request.url":"http://localhost:8080/httpclient"},"count":2,"total.cost.milliseconds":229,"success":"true","load.test":"F"}
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | method | 调用方法 |
local.app | 当前应用名 | |
request.url | 请求 URL | |
count | 请求次数 | |
total.cost.milliseconds | 请求总耗时 | |
success | 请求结果:
| |
load.test | 判断当前是否为全链路压测:
|
DataSource 日志
SOFATracer 对标准的 JDBC 数据源进行埋点,输出 SQL 语句执行链路数据。日志默认输出为 JSON 数据格式。
DataSource 摘要日志
datasource-client-digest.log
是 DataSource 摘要日志,以 JSON 格式输出的数据。日志样例如下:
2019-09-02 21:31:31.566, SOFATracerDataSource,, 0a0fe91d156743109138810017302,0.1, client, 00, http-nio-8080-exec-1,15ms, test, CREATE TABLE TEST(ID INT PRIMARY KEY%2C NAME VARCHAR(255)), 128ms, 15ms, h2, jdbc:h2:~/test:-1","sys.baggage,,
对应 key 的说明如下:
key | 说明 |
time | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
span.kind | Span 类型 |
result.code | 结果码,取值如下:
|
current.thread.name | 当前线程名 |
time.cost.milliseconds | Span 耗时 |
database.name | 数据库名称 |
SQL | SQL 执行语句 |
connection.establish.span | SQL 执行建连时间 |
db.execute.cost | SQL 执行时间 |
database.type | 数据库类型 |
database.endpoint | 数据库 URL |
sys.baggage | 系统透传的 baggage 数据,以 KV(key-value)格式展示。 |
biz.baggage | 业务透传的 baggage 数据,以 KV 格式展示。 |
DataSource 统计日志
datasource-client-stat.log
是 DataSource 统计日志。其中,stat.key
即本段时间内的统计关键字集合。统计关键字集合唯一确定一组统计数据,包含 local.app
、database.name
和 SQL
字段。日志样例如下:
{"time":"2019-09-02 21:31:50.435","stat.key":{"local.app":"SOFATracerDataSource","database.name":"test","SQL":"DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(ID INT PRIMARY KEY%2C NAME VARCHAR(255));"},"count":1,"total.cost.milliseconds":15,"success":"true","load.test":"F"}
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | local.app | 当前应用名 |
database.name | 数据库名称 | |
SQL | SQL 执行语句 | |
count | SQL 执行次数 | |
total.cost.milliseconds | SQL 执行总耗时。单位:ms。 | |
success | 请求结果:
| |
load.test | 判断当前是否为全链路压测:
|
SOFARPC 日志
SOFATracer 集成在 SOFARPC(5.4.0 及之后的版本)后输出链路数据的格式,默认为 JSON 数据格式。
RPC 客户端摘要日志
rpc-client-digest.log
是 RPC 客户端摘要日志,日志样例如下:
2021-09-27 16:43:59.096,myserver-app,1ecee1741632732******410896596,0,com.alipay.samples.rpc.SampleService:1.0,hello,bolt,,127.0.0.1,myclient-app,,,1ms,0ms,SOFA-SEV-BOLT-BIZ-12201-9-T20,00,,,0ms,,
对应 key 的说明如下:
key | 说明 |
timestamp | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
service | 服务接口信息 |
method | 调用方法 |
span.kind | Span 类型 |
protocol | 协议类型。取值:bolt、rest。 |
invoke.type | 调用类型。取值如下:
|
remote.ip | 目标 IP |
remote.app | 目标应用名称 |
remote.zone | 目标 zone |
remote.idc | 目标 IDC |
remote.city | 目标城市 |
user.id | 用户 ID |
result.code | 结果码。取值如下:
|
req.size | 请求数据大小 |
resp.size | 响应数据大小 |
client.elapse.time | 调用总耗时,单位:ms。 |
client.conn.time | 客户端连接耗时,单位:ms。 |
req.serialize.time | 请求序列化耗时,单位:ms。 |
outtime | 超时参考耗时,单位:ms。 |
current.thread.name | 当前线程名 |
route.record | 路由记录,路由选择的过程记录。 |
elastic.id | 弹性数据位 |
be.elastic | 本次调用的服务是否需要弹性:
|
elastic.service.name | 转发调用的方法名。 |
local.client.ip | 源 IP |
local.client.port | 本地客户端端口 |
local.zone | 本地 zone |
target.ip.in.one.physical | 目标 IP 是否在当前物理机:
|
sys.baggage | 系统透传的 baggage 数据 |
bus.baggage | 业务透传的 baggage 数据 |
send.time | RPC 请求耗时(预留字段,暂未启用) |
phase.time | 各阶段耗时,单位:ms。 |
special.time.mark | 特殊时间点标记 |
router.forward | 路由转发详情(预留字段,暂未启用) |
RPC 服务端摘要日志
rpc-server-digest.log
是 RPC 服务端摘要日志,日志样例如下:
2014-06-19 17:14:35.006,client,0ad1348f140****2750021003,0.1,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,TR,,10.**.**.143,client,,,12ms,0ms,HSFBizProcessor-4-thread-2,00,,F,1000ms,zue:l;ztg:r,mark=T&uid=a2&
对应 key 的说明如下:
key | 说明 |
timestamp | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
service | 服务接口信息 |
method | 调用方法 |
protocol | 协议类型。取值:bolt、rest。 |
remote.ip | 目标 IP |
remote.app | 目标应用名称 |
invoke.type | 调用类型。取值如下:
|
remote.ip | 调用方 IP |
remote.app | 调用方应用名 |
remote.zone | 调用方 zone |
remote.idc | 调用方 IDC |
biz.impl.time | 请求处理耗时,单位:ms。 不包含服务端响应序列化耗时和反序列化耗时。 |
resp.serialize.time | 响应序列化耗时,单位:ms。 |
current.thread.name | 当前线程名 |
result.code | 返回码,取值如下:
|
elastic.service.name | 表明当前是转发调用,包含转发的服务名称和方法值。 |
be.elasticc | 本次服务是否被转发:
|
server.pool.wait.time | 服务端线程池等待时间,单位:ms。 |
sys.baggage | 系统透传的 baggage 数据 |
bus.baggage | 业务透传的 baggage 数据 |
server.send.time | RPC 请求转发耗时(预留字段,暂未启用) |
req.size | 请求数据大小 |
resp.size | 响应数据大小 |
phase.time | 各阶段耗时明细 |
special.time | 特殊时间点标记 |
router.forward | 路由转发详情(预留字段,暂未启用) |
RPC 客户端统计日志
rpc-client-stat.log
是 RPC 客户端统计日志。其中,stat.key
即本段时间内的统计关键字集合。统计关键字集合唯一确定一组统计数据,包含 local.app
、remote.app
、service.name
和 method.name
字段。日志样例如下:
2014-06-19 17:14:02.186,client,client,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,1,79,Y,T,RZ00B
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | local.app | 当前应用名称 |
remote.app | 目标应用名称 | |
service.name | 服务名 | |
method.name | 方法名 | |
count | 调用次数 | |
total.cost.milliseconds | 请求总耗时 | |
success | 调用结果:
| |
load.test.mark | 判断当前是否为全链路压测:
| |
remote.zone | 目标 zone |
RPC 服务端统计日志
rpc-server-stat.log
是 RPC 服务端统计日志,以 JSON 格式输出的数据。其中,stat.key
即本段时间内的统计关键字集合。统计关键字集合唯一确定一组统计数据,包含 local.app
、remote.app
、service.name
和 method.name
字段。日志样例如下:
2014-06-19 17:14:02.186,client,client,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,1,7,Y,T,GZ00B
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | local.app | 当前应用名称 |
remote.app | 目标应用名称 | |
service.name | 服务名 | |
method | 方法名 | |
count | 调用次数 | |
total.cost.milliseconds | 请求总耗时 | |
success | 调用结果:
| |
load.test.mark | 判断当前是否为全链路压测:
| |
remote.zone | 目标 zone |
OkHttp 日志
SOFATracer 集成 OkHttp 后输出请求的链路数据格式,默认为 JSON 数据格式。
OkHttp 摘要日志
okhttp-digest.log
是 OkHttp 摘要日志,以 JSON 格式输出。日志样例如下:
{"time":"2021-07-19 14:27:25.076","local.app":"web-demo","traceId":"1e1ebd021626676044097100153807","spanId":"0.1","span.kind":"client","result.code":"200","current.thread.name":"SOFA-SEV-REST-BIZ-8341-9-T2","time.cost.milliseconds":"267ms","request.url":"http://localhost:8341/sofarest/hello","method":"GET","result.code":"200","req.size.bytes":0,"resp.size.bytes":0,"remote.app":"","sys.baggage":"","biz.baggage":""}
对应 key 的说明如下:
key | 说明 |
time | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
span.kind | Span 类型 |
result.code | 结果码 |
current.thread.name | 当前线程名 |
time.cost.milliseconds | 请求耗时 |
request.url | 请求 URL |
method | 调用方法 |
req.size.bytes | 请求数据大小 |
resp.size.bytes | 响应数据大小 |
remote.app | 目标应用 |
sys.baggage | 系统透传的 baggage 数据 |
biz.baggage | 业务透传的 baggage 数据 |
OkHttp 统计日志
okhttp-stat.log
是 OkHttp 统计日志。其中,stat.key
即本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 method
、local.app
和 request.url
字段。日志样例如下:
{"time":"2019-09-03 11:43:06.975","stat.key":{"method":"GET","local.app":"OkHttpDemo","request.url":"http://localhost:8081/okhttp?name=sofa"},"count":1,"total.cost.milliseconds":174,"success":"true","load.test":"F"}
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | method | 调用方法 |
local.app | 当前应用名 | |
request.url | 请求 URL | |
count | 请求次数 | |
total.cost.milliseconds | 请求总耗时 | |
success | 请求结果:
| |
load.test | 判断当前是否为全链路压测:
|
RestTemplate 日志
SOFATracer 集成 RestTemplate 后输出请求的链路数据格式,默认为 JSON 数据格式。
RestTemplate 摘要日志
resttemplate-digest.log
是 RestTemplate 摘要日志,以 JSON 格式输出。日志样例如下:
{"time":"2019-09-03 10:33:10.336","local.app":"RestTemplateDemo","traceId":"0a0fe9271567477985327100211176","spanId":"0","span.kind":"client","result.code":"200","current.thread.name":"SimpleAsyncTaskExecutor-1","time.cost.milliseconds":"5009ms","request.url":"http://localhost:8801/asyncrest","method":"GET","req.size.bytes":0,"resp.size.bytes":0,"sys.baggage":"","biz.baggage":""}
对应 key 的说明如下:
key | 说明 |
time | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
span.kind | Span 类型 |
result.code | 结果码 |
current.thread.name | 当前线程名 |
time.cost.milliseconds | Span 耗时 |
request.url | 请求 URL |
method | 调用方法 |
req.size.bytes | 请求数据大小 |
resp.size.bytes | 响应数据大小 |
sys.baggage | 系统透传的 baggage 数据 |
biz.baggage | 业务透传的 baggage 数据 |
RestTemplate 统计日志
resttemplate-stat.log
是 RestTemplate 统计日志。其中,stat.key
即本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 method
、local.app
和 request.url
字段。日志样例如下:
{"time":"2019-09-03 10:34:04.130","stat.key":{"method":"GET","local.app":"RestTemplateDemo","request.url":"http://localhost:8801/asyncrest"},"count":1,"total.cost.milliseconds":5009,"success":"true","load.test":"F"}
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | method | 调用方法 |
local.app | 当前应用名 | |
request.url | 请求 URL | |
count | 请求次数 | |
total.cost.milliseconds | 请求总耗时 | |
success | 请求结果:
| |
load.test | 判断当前是否为全链路压测:
|
Dubbo 日志
SOFATracer 集成 Dubbo 后输出请求的链路数据格式,默认为 JSON 数据格式。
Dubbo 服务消费方摘要日志
dubbo-client-digest.log
是 Dubbo 服务消费方摘要日志,以 JSON 格式输出。日志样例如下:
{"time":"2019-09-02 23:36:08.250","local.app":"dubbo-consumer","traceId":"1e27a79c156743856804410019644","spanId":"0","span.kind":"client","result.code":"00","current.thread.name":"http-nio-8080-exec-2","time.cost.milliseconds":"205ms","protocol":"dubbo","service":"com.glmapper.bridge.boot.service.HelloService","method":"SayHello","invoke.type":"sync","remote.host":"192.168.2.103","remote.port":"20880","local.host":"192.168.2.103","client.serialize.time":35,"client.deserialize.time":5,"req.size.bytes":336,"resp.size.bytes":48,"error":"","sys.baggage":"","biz.baggage":""}
对应 key 的说明如下:
key | 说明 |
time | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
span.kind | Span 类型 |
result.code | 结果码,取值如下:
|
current.thread.name | 当前线程名 |
time.cost.milliseconds | Span 耗时 |
protocol | 协议类型 |
service | 服务接口 |
method | 调用方法 |
invoke.type | 调用类型。取值如下:
|
remote.host | 目标主机 IP |
remote.port | 目标端口 |
local.host | 本地主机 IP |
client.serialize.time | 请求序列化时间。 |
client.deserialize.time | 响应反序列化时间。 |
req.size.bytes | 请求数据大小 |
resp.size.bytes | 响应数据大小 |
error | 错误信息。 |
sys.baggage | 系统透传的 baggage 数据 |
biz.baggage | 业务透传的 baggage 数据 |
Dubbo 服务提供方摘要日志
dubbo-server-digest.log
是 Dubbo 服务提供方摘要日志,以 JSON 格式输出。日志样例如下:
{"time":"2019-09-02 23:36:08.219","local.app":"dubbo-provider","traceId":"1e27a79c156743856804410019644","spanId":"0","span.kind":"server","result.code":"00","current.thread.name":"DubboServerHandler-192.168.2.103:20880-thread-2","time.cost.milliseconds":"9ms","protocol":"dubbo","service":"com.glmapper.bridge.boot.service.HelloService","method":"SayHello","local.host":"192.168.2.103","local.port":"62443","server.serialize.time":0,"server.deserialize.time":27,"req.size.bytes":336,"resp.size.bytes":0,"error":"","sys.baggage":"","biz.baggage":""}
对应 key 的说明如下:
key | 说明 |
time | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
span.kind | Span 类型 |
result.code | 结果码,取值如下:
|
current.thread.name | 当前线程名 |
time.cost.milliseconds | Span 耗时 |
protocol | 协议类型 |
service | 服务接口 |
method | 调用方法 |
invoke.type | 调用类型 |
local.host | 本地主机 IP |
local.port | 本地端口 |
server.serialize.time | 响应序列化时间,单位:ms。 |
server.deserialize.time | 请求反序列化时间,单位:ms。 |
req.size.bytes | 请求数据大小,单位:Byte。 |
resp.size.bytes | 响应数据大小,单位:Byte。 |
error | 错误信息 |
sys.baggage | 系统透传的 baggage 数据 |
biz.baggage | 业务透传的 baggage 数据 |
Dubbo 统计日志
dubbo-client-stat.log
和 dubbo-server-stat.log
是 Dubbo 统计日志。其中,stat.key
即本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 local.app
、service
和 method
字段。日志样例如下:
{"time":"2019-09-02 23:36:13.040","stat.key":{"method":"SayHello","local.app":"dubbo-consumer","service":"com.glmapper.bridge.boot.service.HelloService"},"count":1,"total.cost.milliseconds":205,"success":"true","load.test":"F"}
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | method | 调用方法 |
local.app | 当前应用名 | |
service | 服务名 | |
count | 请求次数 | |
total.cost.milliseconds | 请求总耗时 | |
success | 请求结果:
| |
load.test | 判断当前是否为全链路压测:
|
Spring Cloud OpenFeign 日志
SOFATracer 集成 Spring Cloud OpenFeign 后输出请求的链路数据格式,默认为 JSON 数据格式。
Spring Cloud OpenFeign 摘要日志
feign-digest.log
是 Spring Cloud OpenFeign 摘要日志,以 JSON 格式输出。日志样例如下:
{"time":"2019-09-03 10:28:52.363","local.app":"tracer-consumer","traceId":"0a0fe9271567477731347100110969","spanId":"0.1","span.kind":"client","result.code":"200","current.thread.name":"http-nio-8082-exec-1","time.cost.milliseconds":"219ms","request.url":"http://10.15.233.39:8800/feign","method":"GET","error":"","req.size.bytes":0,"resp.size.bytes":18,"remote.host":"10.15.233.39","remote.port":"8800","sys.baggage":"","biz.baggage":""}
对应 key 的说明如下:
key | 说明 |
time | 日志打印时间 |
local.app | 当前应用名 |
traceId | TraceId |
spanId | SpanId |
span.kind | Span 类型 |
result.code | 状态码 |
current.thread.name | 当前线程名 |
time.cost.milliseconds | Span 耗时 |
request.url | 请求 URL |
method | 调用方法 |
error | 错误信息。 |
req.size.bytes | 请求数据大小 |
resp.size.bytes | 响应数据大小 |
remote.host | 目标主机 IP |
remote.port | 目标端口 |
sys.baggage | 系统透传的 baggage 数据 |
biz.baggage | 业务透传的 baggage 数据 |
Spring Cloud OpenFeign 统计日志
feign-stat.log
是 Spring Cloud OpenFeign 统计日志。其中,stat.key
即本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 method
、local.app
和 request.url
字段。日志样例如下:
{"time":"2019-09-03 10:29:34.528","stat.key":{"method":"GET","local.app":"tracer-consumer","request.url":"http://10.15.233.39:8800/feign"},"count":2,"total.cost.milliseconds":378,"success":"true","load.test":"F"}
对应 key 的说明如下:
key | 说明 | |
time | 日志打印时间 | |
stat.key | method | 调用方法 |
local.app | 当前应用名 | |
request.url | 请求 URL | |
count | 请求次数 | |
total.cost.milliseconds | 请求总耗时 | |
success | 请求结果:
| |
load.test | 判断当前是否为全链路压测:
|
RPC 转 JVM 日志
RPC 转 JVM 详细日志
在 Tracer 1.0.16 版本中,增加了合并部署的 RPC 转 JVM 的详细日志 rpc-2-jvm-digest.log
,日志样例如下:
2015-04-2717:51:47.711,test,0a0f61eb14301283076901001,0,com.alipay.SampleService,hello,testTarget,21ms,main,test=test,test=test,
示例值对应说明如下:
示例值 | 说明 |
2015-04-2717:51:47.711 | 日志打印时间 |
test | 当前应用名 |
0a0f61eb14301283076901001 | TraceId |
0 | RpcId |
com.alipay.SampleService | 服务名 |
hello | 调用方法 |
testTarget | 目标系统名。 |
21ms | 调用耗时,单位:ms。 |
main | 当前线程名 |
test=test | 系统透传数据。KV 格式,用于传送系统灾备信息等。 |
test=test | 业务透传数据。KV 格式。 |
RPC 转 JVM 的详细日志是默认关闭的,需要通过 DRM 推送来打开。详情请参见 Tracer DRM 开关。
RPC 转 JVM 调用统计日志
rpc-2-jvm-stat.log
是 RPC 转 JVM 调用统计日志,每一分钟打印一次。日志样例如下:
2014-05-2119:18:52.484from,to,DummyService,dummyMethod,596,60041,Y,T
示例值对应说明如下:
示例值 | 说明 |
2014-05-2119:18:52.484 | 日志打印时间 |
from | 当前应用名称 |
to | 目标应用名称 |
DummyService | 服务名。 |
dummyMethod | 调用方法 |
596 | 请求次数 |
60041 | 请求总耗时 |
Y | 请求结果。 |
T | 判断当前是否为全链路压测:
|
SOFAREST 日志
每一次 SOFAREST 调用会生成相应的客户端和服务端执行日志。
SOFAREST 客户端日志
SOFAREST 客户端日志名为 rest-client-digest.log
,日志样例如下:
2015-11-0411:00:26.556,test,0a0fe9cf14466060265051002,0,http://localhost,insert,anotherApp,10.20.30.40,100,100B,100B,49ms,main,test=test,test=test
示例值对应说明如下:
示例值 | 说明 |
2015-11-0411:00:26.556 | 日志打印时间 |
test | 当前应用名称 |
0a0fe9cf14466060265051002 | TraceId |
0 | RpcId |
http://localhost | 请求 URL |
insert | 调用方法 |
anotherApp | 目标应用名称 |
10.20.30.40 | 目标 IP |
100 | 结果码 |
100B | 响应数据大小 |
100B | 请求数据大小 |
49ms | 请求总耗时 |
main | 当前线程名 |
test=test | 系统透传数据(KV 格式,用于传送系统灾备信息等) |
test=test | 业务透传数据(KV 格式)。 |
SOFAREST 服务端日志
SOFAREST 服务端日志名为 rest-server-digest.log
,日志样例如下:
2015-11-0411:00:24.475,test,0a0fe9cf14466060243451001,0,http://localhost,insert,fromApp,fromAddress,400,100B,100B,128ms,main,test=test,test=test
示例值对应说明如下:
字段 | 描述 |
2015-11-0411:00:24.475 | 日志打印时间 |
test | 当前应用名称 |
0a0fe9cf14466060243451001 | TraceId |
0 | RpcId |
http://localhost | 请求 URL |
insert | 调用方法 |
fromApp | 来源应用名称 |
fromAddress | 来源应用 IP 地址。 |
400 | 结果码。 |
100B | 请求数据大小 |
100B | 响应数据大小 |
128ms | 请求总耗时 |
main | 当前线程名 |
test=test | 系统透传数据(KV 格式,用于传送系统灾备信息等)。 |
test=test | 业务透传数据(KV 格式)。 |
SOFAREST 客户端统计日志
SOFAREST 客户端统计日志名为 rest-client-stat.log
,每分钟打印一次。日志样例如下:
2015-11-0411:00:28.445,test,anotherApp,http://localhost,insert,1,49,Y,F
示例值对应说明如下:
字段 | 描述 |
2015-11-0411:00:28.445 | 日志打印时间 |
test | 当前应用的名称 |
anotherApp | 目标应用的名称 |
http://localhost | 请求 URL |
insert | 调用方法 |
1 | 调用次数 |
49 | 请求处理总耗时。 |
Y | 处理结果:
|
F | 判断当前是否为全链路压测:
|
SOFAREST 服务端统计日志
SOFAREST 服务端统计日志名为 rest-server-stat.log
,每分钟打印一次。日志样例如下:
2015-11-0411:00:26.445,fromApp,test,http://localhost,insert,1,128,N,F
示例值对应说明如下:
字段 | 描述 |
2015-11-0411:00:26.445 | 日志打印时间 |
fromApp | 源应用名称 |
test | 目标应用名称 |
http://localhost | 请求 URL |
insert | 调用方法 |
1 | 调用次数 |
128 | 请求处理总耗时 |
N | 处理结果:
|
F | 判断当前是否为全链路压测:
|
SOFA MVC 日志
SOFA MVC 摘要日志
sofa-mvc-digest.log
是 SOFA MVC 摘要日志。日志样例如下:
2014-09-0100:00:01.631,tbapi,0ad643e114095008015728852,0,http://tbapi.alipay.com/gateway.do,POST,200,1468B,2161B,59ms,catalina-exec-71,uid=13&mark=F&
示例值对应说明如下:
示例值 | 说明 |
2014-09-0100:00:01.631 | 日志打印时间 |
tbapi | 当前应用名 |
0ad643e114095008015728852 | TraceId |
0 | RpcId |
http://tbapi.alipay.com/gateway.do | 请求 URL |
POST | 调用方法 |
200 | 结果码。 |
1468B | 请求数据大小 |
2161B | 响应数据大小 |
59ms | 请求总耗时 |
catalina-exec-71 | 当前线程名 |
uid=13&mark=F& | 透传数据(KV 格式) |
SOFA MVC 统计日志
sofa-mvc-stat.log
是 SOFA MVC 统计日志。日志样例如下:
2014-09-0100:03:22.559,tbapi,http://tbapi.alipay.com/trade/batch_payment.htm,GET,2,11,Y,F
示例值对应说明如下:
示例值 | 说明 |
2014-09-0100:03:22.559 | 日志打印时间 |
tbapi | 当前应用名 |
http://tbapi.alipay.com/trade/batch_payment.htm | 请求 URL |
GET | 调用方法 |
2 | 请求次数 |
11 | 请求总耗时 |
Y | 处理结果:
|
F | 判断当前是否为全链路压测:
|
异常日志
默认情况下,异常日志都记录在 middleware_error.log
文件中。
通用异常日志
以下为异常日志记录的日志样例如下:
2015-02-1022:47:20.499,trade,q241234,0.1,timeout_error,trade|RPC,&protocol=&targetApp=¶mTypes=int|String&invokeType=&methodName=refund&targetUrl=&serviceName=RefundFacade&,,java.lang.Throwable
at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
日志包含的常见信息如下:
字段 | 说明 |
时间戳 | 日志生成时间(UTC+08:00) |
TraceId | 25 位的 TraceId。前 8 位表示服务器 IP,而后 13 位为生成 TraceId 的时间,后 4 位为自增序列。 |
RpcId | RpcId |
故障类型 | 根据实际情况,显示相应故障类型。 |
故障源 | 以数据形式表示故障源: 故障源1|故障源2|故障源3|…… 依次类推。 |
故障上下文 | 以映射形式表示故障上下文:
|
异常 Stack | 具体异常类型 |
中间件异常日志
中间件产品的异常日志格式与通用异常日志格式一致,唯一的区别是故障源的第一项为故障发生的集群,如下所示:
故障发生的集群|其他故障源1|其他故障源2
RPC 客户端异常日志
RPC 客户端的异常日志直接在中间件异常日志(middleware_error.log
)中生成,其基本格式和中间件异常日志的格式一致,主要有以下区别:
故障源的第二项为 RPC:故障发生的集群|RPC|其他故障源1|其他故障源 2。
故障类型为以下几种:
biz_error:业务异常。
address_route_error:地址路由异常。
timeout_error:超时异常。
unknown_error:未知异常。
故障上下文中有下列这些信息:
serviveName:服务名。
methodName:方法名。
protocal:协议。
invokeType:调用类型。
targetUrl:目标 URL。
paramTypes:请求参数类型(value 的格式为
param1|param2
)。
日志样例
2015-02-1022:47:20.499,trade,q241234,0.1,timeout_error,trade|RPC,&protocol=&targetApp=¶mTypes=int|String&invokeType=&methodName=refund&targetUrl=&serviceName=RefundFacade&,,java.lang.Throwable
at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
RPC 服务端异常日志
RPC 服务端的异常日志直接在中间件异常日志(middleware_error.log
)中生成,其基本格式和中间件异常日志的格式一致,主要有以下区别:
故障源的第二项为 RPC:故障发生的集群|RPC|其他故障源1|其他故障源 2。
故障类型为以下几种:
biz_error:业务异常。
unknown_error:未知异常。
故障上下文中有下列这些信息:
serviveName:服务名。
methodName:方法名。
protocal:协议。
invokeType:调用类型。
callerUrl:调用方 URL。
callerApp:调用方应用名。
paramTypes:请求参数类型(value 的格式为
param1|param2
)。
日志样例
2015-02-1022:47:20.505,trade,q241234,0.1,unknown_error,trade|RPC,protocol=&callerUrl=¶mTypes=int|String&callerApp=&invokeType=&methodName=refund&serviceName=RefundFacade&,,java.lang.Throwable
at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
静态信息日志
Tracer 静态信息日志 static-info.log
会在启动的时候将当期进程的一些静态信息打印出来。日志样例如下:
84919,10.15.233.110,GZ001
示例值对应说明如下:
示例值 | 说明 |
84919 | 进程 ID |
10.15.233.110 | 当前 IP |
GZ001 | 当前 Zone |
分布式事务日志
每一次调用分布式事务服务,会生成相应的客户端和服务端执行日志。
分布式事务客户端日志
分布式事务客户端日志记录在 ~/logs/tracelog/dtx-client-digest.log
文件中。日志主要包含以下信息:
字段 | 说明 |
时间戳 | 日志打印时间 |
本地应用名 | 本地应用的名称 |
本地应用地址 | 本地应用的 IP 地址 |
远程应用名 | 远程应用的名称 |
远程应用地址 | 远程应用的 IP 地址 |
TraceId | 29 位的 TraceId |
RpcId | RpcId |
服务 | 服务名称 |
方法 | 方法名称 |
执行耗时 | 执行耗时,单位:ms。 |
线程名 | 当前线程名称 |
结果 | 处理结果:
|
系统透传数据 | 以 KV 格式记录 |
业务透传数据 | 以 KV 格式记录 |
日志样例
1. 创建主事务记录(事务发起)
2018-06-1117:37:13.151,SofabootAction,10.15.232.41,dtx,11.**.**.74,0a0fe829152870983309010015560,0.93b3fa8c,SofabootAction,start,24ms,Thread-6,true,,
发起分布式事务时,没有“服务名称”,此处的“服务名称”是发起方所在应用的名称。
2. 创建分支事务记录
2018-06-1117:37:13.686,SofabootAction,10.15.232.41,dtx,11.**.**.74,0a0fe829152870983309010015560,0.93b3fa8c,tcc_first_action_ds,prepare,22ms,Thread-6,true,,dtx_id=7bb4518951fc4255b68a0eb1cfbad6ef01-0000000000&
创建分支事务记录时,此处的“服务名称”是参与者资源的 ID。
3. 分布式事务提交
2018-06-1117:37:14.056,SofabootAction,10.15.232.41,dtx,11.**.**.74,0a0fe829152870983309010015560,0.93b3fa8c,SofabootAction,commit,19ms,Thread-6,true,,dtx_id=7bb4518951fc4255b68a0eb1cfbad6ef01-0000000000&
提交分布式事务时,没有“服务名称”,此处的“服务名称”是发起方所在应用的名称。
4. 分布式事务回滚
2018-06-1117:37:14.056,SofabootAction,10.15.232.41,dtx,11.**.**.74,0a0fe829152870983309010015560,0.93b3fa8c,SofabootAction,rollback,19ms,Thread-6,true,,dtx_id=7bb4518951fc4255b68a0eb1cfbad6ef01-0000000000&
回滚分布式事务时,没有“服务名称”,此处的“服务名称”是发起方所在应用的名称。
分布式事务服务端日志
分布式事务服务端日志记录在 ~/logs/tracelog/dtx-server-digest.log
文件中,日志样例如下:
2018-10-1210:31:15.438,account-demo,dtx,0a0fe927153931147465010011267,0.93b3fa8c.93b3fa8c.93b3fa8c.93b3fa8c,second_dtx_datasource,commit,11.**.**.74:14200,8ms,dtx-bolt-pool-3,true,test=test,test=test
示例值对应说明如下:
示例值 | 说明 |
2018-10-1210:31:15.438 | 日志打印时间 |
account-demo | 本地应用的名称 |
dtx | 目标应用的名称 |
0a0fe927153931147465010011267 | 29 位的 TraceId |
0.93b3fa8c.93b3fa8c.93b3fa8c.93b3fa8c | RpcId |
second_dtx_datasource | 资源 |
commit | 调用方法 |
11.**.**.74:14200 | 远程服务端的 IP 地址和端口。 |
8ms | 执行总耗时 |
dtx-bolt-pool-3 | 当前线程的名称 |
true | 处理结果:
|
test=test | 系统透传数据(KV 格式,用于传送系统灾备信息等) |
test=test | 业务透传数据(KV 格式) |
任务调度日志
每一次调用任务调度服务会生成相应的任务分发和接收日志。
集群任务分发的详细日志
集群任务分发的详细日志,记录一层以及二层将任务分发给各自下一层的详细执行日志,日志名为 scheduler-send-digest.log
。日志样例如下:
2015-04-3020:39:56.341,test,0a16191714303975963201001,0,1,21ms,main,test=test,test=test
示例值对应说明如下:
字段名称 | 描述 |
2015-04-3020:39:56.341 | 日志打印时间 |
test | 当前应用名称 |
0a16191714303975963201001 | 25 位的 TraceId |
0 | RpcId |
1 | 表示三层分发的层次。 |
21ms | 调用服务耗时 |
main | 当前线程名 |
test=test | 系统透传数据(KV 格式,用于传送系统灾备信息等) |
test=test | 业务透传数据(KV 格式) |
集群任务分发的统计日志
集群任务分发的统计日志,即记录一层以及二层将任务分发给各自下一层的统计日志,日志名为 scheduler-send-stat.log
。日志样例如下:
2015-04-3020:39:58.340,test,0a16191714303975963201001,0,1,1,21,Y,F
示例值对应说明如下:
示例值 | 说明 |
2015-04-3020:39:58.340 | 日志打印时间 |
test | 当前应用名称 |
0a16191714303975963201001 | 25 位的 TraceId |
0 | RpcId |
1 | 表示三层分发的层次。 |
1 | 调用次数 |
21 | 调用总耗时。 |
Y | 调用结果:
|
F | 判断当前是否为全链路压测:
|
集群任务接收的详细日志
集群任务接收的详细日志,即记录二层以及三层分别接收各自前一层任务的详细执行日志,日志名为 scheduler-receive-digest.log
。日志样例如下:
2015-04-3020:39:58.358,test,0a16191714303975983561002,0,1,2ms,main,test=test
示例值对应说明如下:
示例值 | 说明 |
2015-04-3020:39:58.358 | 日志打印时间 |
test | 当前应用名称 |
0a16191714303975983561002 | TraceId |
0 | RpcId |
1 | 表示三层分发的层次。 |
2ms | 调用服务耗时,单位:ms。 |
main | 当前线程名 |
test=test | 透传数据(KV 格式) |
集群任务接收的统计日志
集群任务接收的统计日志,即记录二层以及三层分别接收各自前一层任务的统计日志,日志名为 scheduler-receive-stat.log
。示例值如下:
2015-04-3020:40:00.339,test,1,1,2,Y,F
示例值对应说明如下:
示例值 | 说明 |
2015-04-3020:40:00.339 | 日志打印时间 |
test | 当前应用名称 |
1 | 表示三层分发的层次。 |
1 | 本段时间内调用次数 |
2 | 本段时间内的调用总耗时。 |
Y | 调用结果:
|
F | 判断当前是否为全链路压测:
|