全部产品

日志格式

SOFATracer 支持 Spring MVC、标准 JDBC 接口实现的数据库连接池(DBCP、Druid、c3p0、tomcat、HikariCP、BoneCP)、HttpClient、Dubbo、Spring Cloud OpenFeign 等开源组件。组件埋点接入后,即可查看相关 Tracer 日志。本文将介绍如下几种日志及其日志格式。

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 格式输出的数据。日志样例如下:

{"time":"2019-09-02 21:31:31.566","local.app":"SOFATracerDataSource","traceId":"0a0fe91d156743109138810017302","spanId":"0.1","span.kind":"client","result.code":"00","current.thread.name":"http-nio-8080-exec-1","time.cost.milliseconds":"15ms","database.name":"test","SQL":"DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(ID INT PRIMARY KEY%2C NAME VARCHAR(255));","connection.establish.span":"128ms","db.execute.cost":"15ms","database.type":"h2","database.endpoint":"jdbc:h2:~/test:-1","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 耗时。

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 客户端摘要日志,日志样例如下:

{"timestamp":"2018-05-20 17:03:20.708","tracerId":"1e27326d1526807000498100185597","spanId":"0","span.kind":"client","local.app":"SOFATracerRPC","protocol":"bolt","service":"com.alipay.sofa.tracer.examples.sofarpc.direct.DirectService:1.0","method":"sayDirect","current.thread.name":"main","invoke.type":"sync","router.record":"DIRECT","remote.app":"samples","remote.ip":"127.0.0.1:12200","local.client.ip":"127.0.0.1","result.code":"00","req.serialize.time":"33","resp.deserialize.time":"39","resp.size":"170","req.size":"582","client.conn.time":"0","client.elapse.time":"155","local.client.port":"59774","baggage":""}

对应 key 的说明如下:

key

说明

timestamp

日志打印时间。

tracerId

TraceId。

spanId

SpanId。

span.kind

Span 类型。

local.app

当前应用名。

protocol

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

service

服务接口信息。

method

调用方法。

current.thread.name

当前线程名。

invoke.type

调用类型。取值如下:

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

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

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

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

router.record

路由记录。取值:

  • DIRECT:直连。

  • REGISTRY:从注册中心获取地址路由。

remote.app

目标应用名称。

remote.ip

目标 IP。

local.client.ip

源 IP。

result.code

结果码。取值如下:

  • 00:请求成功。

  • 01:业务异常。

  • 02:RPC 逻辑错误。

  • 03:请求超时。

  • 04:路由失败。

req.serialize.time

请求序列化时间,单位:ms。

resp.deserialize.time

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

resp.size

响应数据大小。

req.size

请求数据大小。

client.conn.time

客户端连接耗时,单位:ms。

client.elapse.time

调用总耗时,单位:ms。

local.client.port

本地客户端端口。

baggage

透传的 baggage 数据。

RPC 服务端摘要日志

rpc-server-digest.log 是 RPC 服务端摘要日志,日志样例如下:

{"timestamp":"2018-05-20 17:00:53.312","tracerId":"1e27326d1526806853032100185011","spanId":"0","span.kind":"server","service":"com.alipay.sofa.tracer.examples.sofarpc.direct.DirectService:1.0","method":"sayDirect","remote.ip":"127.0.0.1","remote.app":"SOFATracerRPC","protocol":"bolt","local.app":"SOFATracerRPC","current.thread.name":"SOFA-BOLT-BIZ-12200-5-T1","result.code":"00","server.pool.wait.time":"3","biz.impl.time":"0","resp.serialize.time":"4","req.deserialize.time":"38","resp.size":"170","req.size":"582","baggage":""}

对应 key 的说明如下:

key

说明

timestamp

日志打印时间。

tracerId

TraceId。

spanId

SpanId。

span.kind

Span 类型。

service

服务接口信息。

method

调用方法。

remote.ip

目标 IP。

remote.app

目标应用名称。

protocol

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

local.app

当前应用名称。

current.thread.name

当前线程名。

result.code

返回码,取值如下:

  • 00:请求成功。

  • 01:业务异常。

  • 02:RPC 逻辑错误。

server.pool.wait.time

服务端线程池等待时间,单位:ms。

biz.impl.time

业务处理耗时,单位:ms。

resp.serialize.time

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

req.deserialize.time

请求反序列化时间,单位:ms。

resp.size

响应数据大小。

req.size

请求数据大小。

baggage

透传的 baggage 数据。

RPC 客户端统计日志

rpc-client-stat.log 是 RPC 客户端统计日志。其中,stat.key 即本段时间内的统计关键字集合。统计关键字集合唯一确定一组统计数据,包含 methodlocal.appservice 字段。日志样例如下:

{"time":"2018-05-18 07:02:19.717","stat.key":{"method":"method","local.app":"client","service":"app.service:1.0"},"count":10,"total.cost.milliseconds":17,"success":"Y"}

对应 key 的说明如下:

key

说明

time

日志打印时间。

stat.key

method

调用方法.

local.app

当前应用名称。

service

服务接口信息。

count

调用次数。

total.cost.milliseconds

请求总耗时。

success

调用结果:

  • Y:调用成功。

  • N:调用失败。

RPC 服务端统计日志

rpc-server-stat.log 是 RPC 服务端统计日志,以 JSON 格式输出的数据。其中,stat.key 即本段时间内的统计关键字集合。统计关键字集合唯一确定一组统计数据,包含 methodlocal.appservice 字段。日志样例如下:

{"time":"2018-05-18 07:02:19.717","stat.key":{"method":"method","local.app":"client","service":"app.service:1.0"},"count":10,"total.cost.milliseconds":17,"success":"Y"}

对应 key 的说明如下:

key

说明

time

日志打印时间。

stat.key

method

调用方法。

local.app

当前应用名称。

service

服务接口信息。

count

调用次数。

total.cost.milliseconds

请求总耗时。

success

调用结果:

  • Y:调用成功。

  • N:调用失败。

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.165.197.74,0a0fe829152870983309010015560,0.93b3fa8c,SofabootAction,start,24ms,Thread-6,true,,
说明

发起分布式事务时,没有“服务名称”,此处的“服务名称”是发起方所在应用的名称。

2. 创建分支事务记录

2018-06-1117:37:13.686,SofabootAction,10.15.232.41,dtx,11.165.197.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.165.197.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.165.197.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.165.197.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

资源 ID。

commit

调用方法。

11.165.197.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:表示当前非全链路压测。当前线程中不能获取到日志上下文,或上下文中没有压测信息。