Choose receiver

Receiver is a concept in SkyWalking backend. All modules, which are responsible for receiving telemetry or tracing data from other being monitored system, are all being called Receiver. If you are looking for the pull mode, Take a look at fetcher document.

We have following receivers, and default implementors are provided in our Apache distribution.

  1. receiver-trace. gRPC and HTTPRestful services to accept SkyWalking format traces.
  2. receiver-register. gRPC and HTTPRestful services to provide service, service instance and endpoint register.
  3. service-mesh. gRPC services accept data from inbound mesh probes.
  4. receiver-jvm. gRPC services accept JVM metrics data.
  5. envoy-metric. Envoy metrics_service and ALS(access log service) supported by this receiver. OAL script support all GAUGE type metrics.
  6. receiver-profile. gRPC services accept profile task status and snapshot reporter.
  7. receiver-otel. See details. Receiver for analyzing metrics data from OpenTelemetry
  8. receiver-meter. See details. Receiver for analyzing metrics in SkyWalking native meter format.
  9. receiver-browser. gRPC services to accept browser performance data and error log.
  10. receiver-log. gRPC services accept log data.
  11. configuration-discovery. gRPC services handle configurationDiscovery.
  12. Experimental receivers. All following receivers are in the POC stage, not production ready.
    1. receiver_zipkin. See details. (Experimental)
    2. receiver_jaeger. See details. (Experimental)

The sample settings of these receivers should be already in default application.yml, and also list here

receiver-register:
  selector: ${SW_RECEIVER_REGISTER:default}
  default:

receiver-trace:
  selector: ${SW_RECEIVER_TRACE:default}
  default:

receiver-jvm:
  selector: ${SW_RECEIVER_JVM:default}
  default:

service-mesh:
  selector: ${SW_SERVICE_MESH:default}
  default:

envoy-metric:
  selector: ${SW_ENVOY_METRIC:default}
  default:
    acceptMetricsService: ${SW_ENVOY_METRIC_SERVICE:true}
    alsHTTPAnalysis: ${SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS:""}

receiver_zipkin:
  selector: ${SW_RECEIVER_ZIPKIN:-}
  default:
    host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
    port: ${SW_RECEIVER_ZIPKIN_PORT:9411}
    contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}
    jettyMinThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MIN_THREADS:1}
    jettyMaxThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MAX_THREADS:200}
    jettyIdleTimeOut: ${SW_RECEIVER_ZIPKIN_JETTY_IDLE_TIMEOUT:30000}
    jettyAcceptorPriorityDelta: ${SW_RECEIVER_ZIPKIN_JETTY_DELTA:0}
    jettyAcceptQueueSize: ${SW_RECEIVER_ZIPKIN_QUEUE_SIZE:0}

receiver-profile:
  selector: ${SW_RECEIVER_PROFILE:default}
  default:

receiver-browser:
  selector: ${SW_RECEIVER_BROWSER:default}
  default:
    sampleRate: ${SW_RECEIVER_BROWSER_SAMPLE_RATE:10000}

receiver-log:
  selector: ${SW_RECEIVER_LOG:default}
  default:
  
configuration-discovery:
  selector: ${SW_CONFIGURATION_DISCOVERY:default}
  default:

gRPC/HTTP server for receiver

In default, all gRPC/HTTP services should be served at core/gRPC and core/rest. But the receiver-sharing-server module provide a way to make all receivers serving at different ip:port, if you set them explicitly.

receiver-sharing-server:
  selector: ${SW_RECEIVER_SHARING_SERVER:default}
  default:
    host: ${SW_RECEIVER_JETTY_HOST:0.0.0.0}
    contextPath: ${SW_RECEIVER_JETTY_CONTEXT_PATH:/}
    authentication: ${SW_AUTHENTICATION:""}
    jettyMinThreads: ${SW_RECEIVER_SHARING_JETTY_MIN_THREADS:1}
    jettyMaxThreads: ${SW_RECEIVER_SHARING_JETTY_MAX_THREADS:200}
    jettyIdleTimeOut: ${SW_RECEIVER_SHARING_JETTY_IDLE_TIMEOUT:30000}
    jettyAcceptorPriorityDelta: ${SW_RECEIVER_SHARING_JETTY_DELTA:0}
    jettyAcceptQueueSize: ${SW_RECEIVER_SHARING_JETTY_QUEUE_SIZE:0}

Notice, if you add these settings, make sure they are not as same as core module, because gRPC/HTTP servers of core are still used for UI and OAP internal communications.

OpenTelemetry receiver

OpenTelemetry receiver supports to ingest agent metrics by meter-system. OAP can load the configuration at bootstrap. If the new configuration is not well-formed, OAP fails to start up. The files are located at $CLASSPATH/otel-<handler>-rules. Eg, the oc handler loads fules from $CLASSPATH/otel-oc-rules,

Supported handlers: * oc: OpenCensus gRPC service handler.

The rule file should be in YAML format, defined by the scheme described in prometheus-fetcher. Notice, receiver-otel only support group, defaultMetricLevel and metricsRules nodes of scheme due to the push mode it opts to.

To active the oc handler and istio relevant rules:

receiver-otel:
  selector: ${SW_OTEL_RECEIVER:default}
  default:
    enabledHandlers: ${SW_OTEL_RECEIVER_ENABLED_HANDLERS:"oc"}
    enabledOcRules: ${SW_OTEL_RECEIVER_ENABLED_OC_RULES:"istio-controlplane"}

The receiver adds labels with key = node_identifier_host_name and key = node_identifier_pid to the collected data samples, and values from Node.identifier.host_name and Node.identifier.pid defined in opencensus agent proto, to be the identification of the metric data.

Rule Name Description Configuration File Data Source
istio-controlplane Metrics of Istio control panel otel-oc-rules/istio-controlplane.yaml Istio Control Panel -> OpenTelemetry Collector –OC format–> SkyWalking OAP Server
oap Metrics of SkyWalking OAP server itself otel-oc-rules/oap.yaml SkyWalking OAP Server(SelfObservability) -> OpenTelemetry Collector –OC format–> SkyWalking OAP Server
vm Metrics of VMs otel-oc-rules/vm.yaml Prometheus node-exporter(VMs) -> OpenTelemetry Collector –OC format–> SkyWalking OAP Server

Meter receiver

Meter receiver supports accept the metrics into the meter-system. OAP can load the configuration at bootstrap.

The file is written in YAML format, defined by the scheme described in backend-meter.

To active the default implementation:

receiver-meter:
  selector: ${SW_RECEIVER_METER:default}
  default:

Experimental receivers

All following receivers are in the POC stage, not production ready.

Zipkin receiver

Zipkin receiver could work in two different mode.

  1. Tracing mode(default). Tracing mode is that, skywalking OAP acts like zipkin collector, fully supports Zipkin v1/v2 formats through HTTP service, also provide persistence and query in skywalking UI. But it wouldn’t analysis metrics from them. In most case, I suggest you could use this feature, when metrics come from service mesh. Notice, in this mode, Zipkin receiver requires zipkin-elasticsearch storage implementation active. Read this to know how to active.

Use following config to active.

receiver_zipkin:
  selector: ${SW_RECEIVER_ZIPKIN:-}
  default:
    host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
    port: ${SW_RECEIVER_ZIPKIN_PORT:9411}
    contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}
    jettyMinThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MIN_THREADS:1}
    jettyMaxThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MAX_THREADS:200}
    jettyIdleTimeOut: ${SW_RECEIVER_ZIPKIN_JETTY_IDLE_TIMEOUT:30000}
    jettyAcceptorPriorityDelta: ${SW_RECEIVER_ZIPKIN_JETTY_DELTA:0}
    jettyAcceptQueueSize: ${SW_RECEIVER_ZIPKIN_QUEUE_SIZE:0}
  1. Analysis mode(Not production ready), receive Zipkin v1/v2 formats through HTTP service. Transform the trace to skywalking native format, and analysis like skywalking trace. This feature can’t work in production env right now, because of Zipkin tag/endpoint value unpredictable, we can’t make sure it fits production env requirements.

Active analysis mode, you should set needAnalysis config.

receiver_zipkin:
  selector: ${SW_RECEIVER_ZIPKIN:-}
  default:
    host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
    port: ${SW_RECEIVER_ZIPKIN_PORT:9411}
    contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}
    jettyMinThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MIN_THREADS:1}
    jettyMaxThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MAX_THREADS:200}
    jettyIdleTimeOut: ${SW_RECEIVER_ZIPKIN_JETTY_IDLE_TIMEOUT:30000}
    jettyAcceptorPriorityDelta: ${SW_RECEIVER_ZIPKIN_JETTY_DELTA:0}
    jettyAcceptQueueSize: ${SW_RECEIVER_ZIPKIN_QUEUE_SIZE:0}
    needAnalysis: true    

NOTICE, Zipkin receiver is only provided in apache-skywalking-apm-x.y.z.tar.gz tar.

Jaeger receiver

Jaeger receiver right now only works in Tracing Mode, and no analysis. Jaeger receiver provides extra gRPC host/port, if absent, sharing-server host/port will be used, then core gRPC host/port. Receiver requires jaeger-elasticsearch storage implementation active. Read this to know how to active.

Right now, you need jaeger agent to batch send spans to SkyWalking oap server. Read Jaeger Architecture to get more details.

Active the receiver.

receiver_jaeger:
  selector: ${SW_RECEIVER_JAEGER:-}
  default:
    gRPCHost: ${SW_RECEIVER_JAEGER_HOST:0.0.0.0}
    gRPCPort: ${SW_RECEIVER_JAEGER_PORT:14250}

NOTICE, Jaeger receiver is only provided in apache-skywalking-apm-x.y.z.tar.gz tar.