diff --git a/rasa_sdk/tracing/config.py b/rasa_sdk/tracing/config.py index 1a84d6284..3127072c6 100644 --- a/rasa_sdk/tracing/config.py +++ b/rasa_sdk/tracing/config.py @@ -6,6 +6,7 @@ from typing import Any, Dict, Optional, Text import grpc +from opentelemetry import trace from opentelemetry.exporter.jaeger.thrift import JaegerExporter from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter from opentelemetry.sdk.resources import SERVICE_NAME, Resource @@ -14,7 +15,7 @@ from rasa_sdk.tracing.endpoints import EndpointConfig, read_endpoint_config -TRACING_SERVICE_NAME = os.environ.get("TRACING_SERVICE_NAME", "rasa_sdk") +TRACING_SERVICE_NAME = os.environ.get("RASA_SDK_TRACING_SERVICE_NAME", "action_server") ENDPOINTS_TRACING_KEY = "tracing" @@ -36,7 +37,7 @@ def get_tracer_provider(endpoints_file: Text) -> Optional[TracerProvider]: if not cfg: logger.info( - f"No endpoint for tracing type available in {endpoints_file}," + f"No endpoint for tracing type available in {endpoints_file}, " f"tracing will not be configured." ) return None @@ -131,11 +132,8 @@ def configure_from_endpoint_config(cls, cfg: EndpointConfig) -> TracerProvider: :param cfg: The configuration to be read for configuring tracing. :return: The configured `TracerProvider`. """ - provider = TracerProvider( - resource=Resource.create( - {SERVICE_NAME: cfg.kwargs.get("service_name", TRACING_SERVICE_NAME)} - ) - ) + resource = Resource(attributes={"service.name": TRACING_SERVICE_NAME}) + trace.set_tracer_provider(TracerProvider(resource=resource)) insecure = cfg.kwargs.get("insecure") @@ -150,9 +148,12 @@ def configure_from_endpoint_config(cls, cfg: EndpointConfig) -> TracerProvider: f"Registered {cfg.type} endpoint for tracing. " f"Traces will be exported to {cfg.kwargs['endpoint']}" ) - provider.add_span_processor(BatchSpanProcessor(otlp_exporter)) + trace.get_tracer_provider().add_span_processor( + BatchSpanProcessor(otlp_exporter) + ) + tracer = trace.get_tracer(__name__) # returns opentelemetry.sdk.trace.Tracer object - return provider + return tracer @classmethod def _get_credentials( diff --git a/rasa_sdk/tracing/utils.py b/rasa_sdk/tracing/utils.py index cb5d22450..46f98be85 100644 --- a/rasa_sdk/tracing/utils.py +++ b/rasa_sdk/tracing/utils.py @@ -1,6 +1,8 @@ import argparse +import logging from rasa_sdk.tracing import config from opentelemetry import trace +from opentelemetry.sdk.resources import Resource from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator from opentelemetry.sdk.trace import TracerProvider @@ -8,6 +10,7 @@ from typing import Optional, Tuple, Any, Text +logger = logging.getLogger(__name__) def get_tracer_provider( cmdline_arguments: argparse.Namespace, @@ -27,12 +30,18 @@ def get_tracer_and_context( tracer_provider: Optional[TracerProvider], request: Request ) -> Tuple[Any, Any, Text]: """Gets tracer and context""" - span_name = "rasa_sdk.create_app.webhook" + span_name = "/webhook" + trace.set_tracer_provider( + TracerProvider( + resource=Resource.create({"service.name": "action_server"}) + ) + ) if tracer_provider is None: tracer = trace.get_tracer(span_name) context = None else: - tracer = tracer_provider.get_tracer(span_name) + # logger.debug(f"Using existing tracer_provider #3, span_name: {span_name}, headers: {request.headers}") + tracer = trace.get_tracer(span_name) context = TraceContextTextMapPropagator().extract(request.headers) return (tracer, context, span_name)