简单理解skywalking数据上报的span概念

简单理解

spanType总共有三种:

  1. Entry:表示整个进程的span
  2. Local:表示进程内部的处理,是EntrySpan的一部分
  3. Exit:表示发起一个远程调用,如请求db、redis,如发起http请求、rpc调用

spanLayer总共有六种(和jaeger不一样,它以span.tags数组key=component的值来分类):

  1. Unknown:未知
  2. Database:请求db
  3. RPCFramework:rpc调用
  4. Http:发起http请求(或者本身是http服务)
  5. MQ:消息服务
  6. 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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!