![]() |
慷慨大方的烤红薯 · Android ...· 5 月前 · |
![]() |
鬼畜的面包 · 在命令行窗口中看大片《星球大战》,太强了!- ...· 8 月前 · |
![]() |
乐观的机器猫 · Nexus搭建远程Maven仓库_nexus ...· 8 月前 · |
![]() |
暴躁的机器猫 · 如何在Python中向3维数组添加元素· 1 年前 · |
![]() |
不拘小节的太阳 · python logging设置文件大小 ...· 1 年前 · |
SOFATracer 支持 Spring MVC、标准 JDBC 接口实现的数据库连接池(DBCP、Druid、c3p0、tomcat、HikariCP、BoneCP)、HttpClient、Dubbo、Spring Cloud OpenFeign 等开源组件。组件埋点接入后,即可查看相关 Tracer 日志。本文将介绍如下几种日志及其日志格式。
开源版的日志默认为 JSON 格式,企业版默认以逗号分隔。
日志会不定期新增部分字段,新增字段会从日志尾部添加,不会影响原日志字段。若您实际打印的日志与本文中日志字段数不一致,请按顺序进行对比,新增字段可咨询售后技术支持。
SOFATracer 集成 SpringMVC 后输出 MVC 请求的链路数据格式,默认为 JSON 数据格式。
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-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 |
判断当前是否为全链路压测:
|
SOFATracer 集成 sofa-tracer-httpclient-plugin 插件后输出 HttpClient 请求的链路数据,默认为 JSON 数据格式。
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-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 |
判断当前是否为全链路压测:
|
SOFATracer 对标准的 JDBC 数据源进行埋点,输出 SQL 语句执行链路数据。日志默认输出为 JSON 数据格式。
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-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 |
判断当前是否为全链路压测:
|
SOFATracer 集成在 SOFARPC(5.4.0 及之后的版本)后输出链路数据的格式,默认为 JSON 数据格式。
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 |
当前应用名 |
tracerId |
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-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 |
当前应用名 |
tracerId |
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-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-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 |
SOFATracer 集成 OkHttp 后输出请求的链路数据格式,默认为 JSON 数据格式。
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-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 |
判断当前是否为全链路压测:
|
SOFATracer 集成 RestTemplate 后输出请求的链路数据格式,默认为 JSON 数据格式。
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-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 |
判断当前是否为全链路压测:
|
SOFATracer 集成 Dubbo 后输出请求的链路数据格式,默认为 JSON 数据格式。
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-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-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 |
判断当前是否为全链路压测:
|
SOFATracer 集成 Spring Cloud OpenFeign 后输出请求的链路数据格式,默认为 JSON 数据格式。
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 数据 |
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 |
判断当前是否为全链路压测:
|
在 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-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 客户端日志名为
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 服务端日志名为
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 客户端统计日志名为
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 服务端统计日志名为
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-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-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|…… 依次类推。
|
故障上下文
|
以映射形式表示故障上下文:
fromUser=khotyn&toUser=nytohk&
|
异常 Stack
|
具体异常类型
|
中间件产品的异常日志格式与通用异常日志格式一致,唯一的区别是故障源的第一项为故障发生的集群,如下所示:
故障发生的集群|其他故障源1|其他故障源2
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 服务端的异常日志直接在中间件异常日志(
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 |
判断当前是否为全链路压测:
|
![]() |
暴躁的机器猫 · 如何在Python中向3维数组添加元素 1 年前 |