Define Service Hierarchy

SkyWalking v10 introduces a new concept Service Hierarchy which defines the relationships of existing logically same services in various layers. The concept and design could be found here.

Service Hierarchy Configuration

All the relationships defined in the config/hierarchy-definition.yml file. You can customize it according to your own needs. Here is an example:

hierarchy:
  MESH:
    MESH_DP: name
    K8S_SERVICE: short-name

  MESH_DP:
    K8S_SERVICE: short-name

  GENERAL:
    K8S_SERVICE: lower-short-name-remove-ns

  MYSQL:
    K8S_SERVICE: short-name

  POSTGRESQL:
    K8S_SERVICE: short-name

  SO11Y_OAP:
    K8S_SERVICE: short-name

  VIRTUAL_DATABASE:
    MYSQL: lower-short-name-with-fqdn
    POSTGRESQL: lower-short-name-with-fqdn

auto-matching-rules:
  # the name of the upper service is equal to the name of the lower service
  name: "{ (u, l) -> u.name == l.name }"
  # the short name of the upper service is equal to the short name of the lower service
  short-name: "{ (u, l) -> u.shortName == l.shortName }"
  # remove the k8s namespace from the lower service short name
  # this rule is only works on k8s env.
  lower-short-name-remove-ns: "{ (u, l) -> { if(l.shortName.lastIndexOf('.') > 0) return u.shortName == l.shortName.substring(0, l.shortName.lastIndexOf('.')); return false; } }"
  # the short name of the upper remove port is equal to the short name of the lower service with fqdn suffix
  # this rule is only works on k8s env.
  lower-short-name-with-fqdn: "{ (u, l) -> { if(u.shortName.lastIndexOf(':') > 0) return u.shortName.substring(0, u.shortName.lastIndexOf(':')) == l.shortName.concat('.svc.cluster.local'); return false; } }"

layer-levels:
  # The hierarchy level of the service layer, the level is used to define the order of the service layer for UI presentation.
  # The level of the upper service should greater than the level of the lower service in `hierarchy` section.
  MESH: 3
  GENERAL: 3
  SO11Y_OAP: 3
  VIRTUAL_DATABASE: 3
  MYSQL: 2
  POSTGRESQL: 2
  MESH_DP: 1
  CILIUM_SERVICE: 1
  K8S_SERVICE: 0

Hierarchy

  • The hierarchy of service layers are defined in the hierarchy section.
  • The layers under the specific layer are related lower of the layer.
  • The relation could have a matching rule for auto matching, which are defined in the auto-matching-rules section.
  • The relation without a matching rule should be built through the internal API.
  • All the layers are defined in the file org.apache.skywalking.oap.server.core.analysis.Layers.java.
  • If the hierarchy is not defined, the service hierarchy relationship will not be built.
  • If you want to add a new relationship, you should certainly know they can be matched automatically by Auto Matching Rules.
  • Notice: some hierarchy relations and auto matching rules are only works on k8s env.

Auto Matching Rules

  • The auto matching rules are defined in the auto-matching-rules section.
  • Use Groovy script to define the matching rules, the input parameters are the upper service(u) and the lower service(l) and the return value is a boolean, which are used to match the relation between the upper service(u) and the lower service(l) on the different layers.
  • The default matching rules required the service name configured as SkyWalking default and follow the Showcase. If you customized the service name in any layer, you should customize the related matching rules according your service name rules.

Layer Levels

  • Define the hierarchy level of the service layer in the layer-levels section.
  • The level is used to define the order of the service layer for UI presentation.
  • The level of the upper service should greater than the level of the lower service in hierarchy section.