Hi Dev team

Right now, endpoint analysis is based on the operation name of the entry
span. I found there are some special cases, we need more than one endpoint
for a single request analysis, typically GraphQL <https://graphql.org/>

The /graphql endpoint should be detected, which is reasonable, and it
matches the real traffic. So, service, instance, and endpoint are matched.
But, at the same time, GraphQL could be like this,

{
  r1:readMetricsValues(condition : {
    name: "service_cpm",
    entity: {
      scope: Service,
      serviceName: "projectD.business-zone",
      normal: true,
    }
  },
  duration: {step:MINUTE, start: "2020-05-28 1040", end: "2020-05-28 1050"}
  ) {
    label,
    values {
      values {
        id,
        value
      }
    }
  },

  r2:readMetricsValues(condition : {
    name: "service_cpm",
    entity: {
      scope: Service,
      serviceName: "projectA.business-zone",
      normal: true,
    }
  },
  duration: {step:MINUTE, start: "2020-05-28 1040", end: "2020-05-28 1050"}
  ) {
    label,
    values {
      values {
        id,
        value
      }
    }
  }
}

The user would expect the readMetricsValues endpoint detected, with 2 calls
sharding different(or same) latency.

Base on the above scenario, I want to add x-le(extension logic endpoint)
series tag(s)

   - Tag key x-le, value is JSON format. name:xxx, latency:yyy.

Same as other tags in SkyWalking, we could have multiple tags with the same
key. Such as in the above case, there should be two tags with values like
this

{
  "name": "readMetricsValues",
  "latency": 100
}

NOTICE, this endpoint traffic would not be added into the instance or
service level, to keep those two traffic data as same as the real network
call. And there is no endpoint dependency for logic endpoints.


This has been tracked through
https://github.com/apache/skywalking/issues/4976


Sheng Wu 吴晟
Twitter, wusheng1108

Reply via email to