简单理解skywalking数据上报的span概念
简单理解
spanType总共有三种:
- Entry:表示整个进程的span
- Local:表示进程内部的处理,是EntrySpan的一部分
- Exit:表示发起一个远程调用,如请求db、redis,如发起http请求、rpc调用
spanLayer总共有六种(和jaeger不一样,它以span.tags数组key=component的值来分类):
- Unknown:未知
- Database:请求db
- RPCFramework:rpc调用
- Http:发起http请求(或者本身是http服务)
- MQ:消息服务
- Cache:缓存服务
场景一:一个http请求,处理上传和请求db,则创建三个span
spanId=0 parentSpanId=-1 spanType=entry spanLayer=http
spanId=1 parentSpanId= 0 spanType=local spanLayer=Unknown
spanId=2 parentSpanId= 0 spanType=exit spanLayer=database
场景二:一个http请求,有http请求,则创建两个个span
spanId=0 parentSpanId=-1 spanType=entry spanLayer=http
spanId=1 parentSpanId= 0 spanType=exit spanLayer=http
场景三:一个http请求,有访问redis。场景二的第2个span正是访问的它。创建两个span(其中traceId和场景二的traceId相等)
spanId=0 parentSpanId=-1 spanType=entry spanLayer=http refs=包含场景二中第2个span的信息
spanId=1 parentSpanId= 0 spanType=exit spanLayer=cache
原始日志
这里记录一下真实的trace日志,来证实上面说的场景二和场景三
场景二
{
"traceId": "6763beaf2ad8a9e4c05114b978a97072.17.756430259",
"traceSegmentId": "6763beaf2ad8a9e4c05114b978a97072.17.756430259",
"spans": [
{
"spanId": 0,
"parentSpanId": -1,
"startTime": "1639096358706",
"endTime": "1639096359252",
"refs": [],
"operationName": "/answer4/activityStyle",
"peer": "192.168.2.119:72",
"spanType": "Entry",
"spanLayer": "Http",
"componentId": 8001,
"isError": false,
"tags": [
{
"key": "url",
"value": "/answer4/activityStyle"
},
{
"key": "status_code",
"value": "200"
}
],
"logs": [],
"skipAnalysis": false
},
{
"spanId": 1,
"parentSpanId": 0,
"startTime": "1639096358775",
"endTime": "1639096359250",
"refs": [],
"operationName": "/op/answer4/activityStyle",
"peer": "container-ng9272:62",
"spanType": "Exit",
"spanLayer": "Http",
"componentId": 8002,
"isError": false,
"tags": [
{
"key": "url",
"value": "http://container-ng9272:62/op/answer4/activityStyle"
},
{
"key": "status_code",
"value": "200"
}
],
"logs": [],
"skipAnalysis": false
}
],
"service": "op",
"serviceInstance": "ca6185b0-752c-9aab-d9f9-6796da2c0646@172.18.0.5",
"isSizeLimited": false
}
场景三
{
"traceId": "6763beaf2ad8a9e4c05114b978a97072.17.756430259",
"traceSegmentId": "6763beaf2ad8a9e4c05114b978a97072.18.4224945771",
"spans": [
{
"spanId": 0,
"parentSpanId": -1,
"startTime": "1639096358782",
"endTime": "1639096359250",
"refs": [
{
"refType": "CrossProcess",
"traceId": "6763beaf2ad8a9e4c05114b978a97072.17.756430259",
"parentTraceSegmentId": "6763beaf2ad8a9e4c05114b978a97072.17.756430259",
"parentSpanId": 1,
"parentService": "op",
"parentServiceInstance": "ca6185b0-752c-9aab-d9f9-6796da2c0646@172.18.0.5",
"parentEndpoint": "/answer4/activityStyle",
"networkAddressUsedAtPeer": "container-ng9272:62"
}
],
"operationName": "/op/answer4/activityStyle",
"peer": "container-ng9272:62",
"spanType": "Entry",
"spanLayer": "Http",
"componentId": 8001,
"isError": false,
"tags": [
{
"key": "url",
"value": "/op/answer4/activityStyle"
},
{
"key": "status_code",
"value": "200"
}
],
"logs": [],
"skipAnalysis": false
},
{
"spanId": 1,
"parentSpanId": 0,
"startTime": "1639096358942",
"endTime": "1639096358966",
"refs": [],
"operationName": "Redis->get",
"peer": "localhost:6379",
"spanType": "Exit",
"spanLayer": "Cache",
"componentId": 7,
"isError": false,
"tags": [
{
"key": "db.type",
"value": "redis"
},
{
"key": "redis.command",
"value": "GET answer4:opdb"
}
],
"logs": [],
"skipAnalysis": false
}
],
"service": "op",
"serviceInstance": "ca6185b0-752c-9aab-d9f9-6796da2c0646@172.18.0.5",
"isSizeLimited": false
}
本作品采用《CC 协议》,转载必须注明作者和本文链接