阿里云首页 金融分布式架构 SOFAStack

日志说明

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 为本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 methodlocal.apprequest.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

请求结果:

  • true:表示请求成功。

    1XX、2XX、301、302 表示请求成功,其他状态码表示请求失败。

  • false:表示请求失败。

load.test

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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 即本段时间内的统计关键字集合。统计关键字集合唯一确定一组统计数据,包含 methodlocal.apprequest.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

请求结果:

  • true:表示请求成功。

  • false:表示请求失败。

load.test

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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

结果码,取值如下:

  • 00:请求成功。

  • 03:请求超时。

  • 99:请求失败。

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.appdatabase.nameSQL 字段。日志样例如下:

{"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

请求结果:

  • true:表示请求成功。

  • false:表示请求失败。

load.test

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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

当前应用名

tracerId

TraceId

spanId

SpanId

service

服务接口信息

method

调用方法

span.kind

Span 类型

protocol

协议类型。取值:bolt、rest。

invoke.type

调用类型。取值如下:

  • sync:同步调用,Bolt 默认的调用方式。

  • oneway:异步调用,消费方发送请求后直接返回,忽略提供方的处理结果。

  • callback:异步调用,消费方提供一个回调接口,当提供方返回后,SOFA 框架会执行回调接口。

  • future:异步调用,消费方发起调用后马上返回,当需要结果时,消费方需要主动去获取数据。

remote.ip

目标 IP

remote.app

目标应用名称

remote.zone

目标 zone

remote.idc

目标 IDC

remote.city

目标城市

user.id

用户 ID

result.code

结果码。取值如下:

  • 00:请求成功。

  • 01:业务异常。

  • 02:RPC 逻辑错误。

  • 03:请求超时。

  • 04:路由失败。

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

本次调用的服务是否需要弹性:

  • T:表示需要弹性。

  • F:表示不需要。

elastic.service.name

转发调用的方法名。

local.client.ip

源 IP

local.client.port

本地客户端端口

local.zone

本地 zone

target.ip.in.one.physical

目标 IP 是否在当前物理机:

  • T:表示在同一物理机。

  • F:表示不在同一物理机。

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

当前应用名

tracerId

TraceId

spanId

SpanId

service

服务接口信息

method

调用方法

protocol

协议类型。取值:bolt、rest。

remote.ip

目标 IP

remote.app

目标应用名称

invoke.type

调用类型。取值如下:

  • sync:同步调用,Bolt 默认的调用方式。

  • oneway:异步调用,消费方发送请求后直接返回,忽略提供方的处理结果。

  • callback:异步调用,消费方提供一个回调接口,当提供方返回后,SOFA 框架会执行回调接口。

  • future:异步调用,消费方发起调用后马上返回,当需要结果时,消费方需要主动去获取数据。

remote.ip

调用方 IP

remote.app

调用方应用名

remote.zone

调用方 zone

remote.idc

调用方 IDC

biz.impl.time

请求处理耗时,单位:ms。

不包含服务端响应序列化耗时和反序列化耗时。

resp.serialize.time

响应序列化耗时,单位:ms。

current.thread.name

当前线程名

result.code

返回码,取值如下:

  • 00:请求成功。

  • 01:业务异常。

  • 02:RPC 逻辑错误。

elastic.service.name

表明当前是转发调用,包含转发的服务名称和方法值。

be.elasticc

本次服务是否被转发:

  • T:表示已被转发。

  • F:表示未被转发。

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.appremote.appservice.namemethod.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

调用结果:

  • Y:调用成功。

  • N:调用失败。

load.test.mark

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

remote.zone

目标 zone

RPC 服务端统计日志

rpc-server-stat.log 是 RPC 服务端统计日志,以 JSON 格式输出的数据。其中,stat.key 即本段时间内的统计关键字集合。统计关键字集合唯一确定一组统计数据,包含 local.appremote.appservice.namemethod.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

调用结果:

  • Y:调用成功。

  • N:调用失败。

load.test.mark

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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 即本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 methodlocal.apprequest.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

请求结果:

  • true:表示请求成功。

  • false:表示请求失败。

load.test

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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 即本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 methodlocal.apprequest.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

请求结果:

  • true:表示请求成功。

  • false:表示请求失败。

load.test

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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

结果码,取值如下:

  • 00:请求成功。

  • 03:请求超时。

  • 99:请求失败。

current.thread.name

当前线程名

time.cost.milliseconds

Span 耗时

protocol

协议类型

service

服务接口

method

调用方法

invoke.type

调用类型。取值如下:

  • sync:同步调用,Bolt 默认的调用方式。

  • oneway:异步调用,消费方发送请求后直接返回,忽略提供方的处理结果。

  • callback:异步调用,消费方提供一个回调接口,当提供方返回后,SOFA 框架会执行回调接口。

  • future:异步调用,消费方发起调用后马上返回,当需要结果时,消费方需要主动去获取数据。

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

结果码,取值如下:

  • 00:请求成功。

  • 03:请求超时。

  • 99:请求失败。

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.logdubbo-server-stat.log 是 Dubbo 统计日志。其中,stat.key 即本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 local.appservicemethod 字段。日志样例如下:

{"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

请求结果:

  • true:表示请求成功。

  • false:表示请求失败。

load.test

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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 即本段时间内的统计关键字集合,统计关键字集合唯一确定一组统计数据,包含 methodlocal.apprequest.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

请求结果:

  • true:表示请求成功。

  • false:表示请求失败。

load.test

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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

请求结果。rpc-2-jvm 没有统计结果,所有结果都是 Y。

T

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

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

处理结果:

  • Y:调用成功。

  • N:调用失败。

F

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • 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

处理结果:

  • Y:调用成功。

  • N:调用失败。

F

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • 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

处理结果:

  • Y:调用成功。

  • N:调用失败。

F

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。

异常日志

默认情况下,异常日志都记录在 middleware_error.log 文件中。

通用异常日志

以下为异常日志记录的日志样例如下:

2015-02-1022:47:20.499,trade,q241234,0.1,timeout_error,trade|RPC,&protocol=&targetApp=&paramTypes=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 客户端异常日志

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=&paramTypes=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=&paramTypes=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。

线程名

当前线程名称

结果

处理结果:

  • ture:调用成功。

  • false:调用失败。

系统透传数据

以 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

处理结果:

  • ture:调用成功。

  • false:调用失败。

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

调用结果:

  • Y:调用成功。

  • N:调用失败。

F

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • 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

调用结果:

  • Y:调用成功。

  • N:调用失败。

F

判断当前是否为全链路压测:

  • T:表示当前为全链路压测。当前线程中能获获取到日志上下文,且上下文中有压测信息。

  • F:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。