Recommendation Service
This service is responsible to get a list of recommended products for the user based on existing product ids the user is browsing.
Auto-instrumentation¶
This Python based service, makes use of the OpenTelemetry auto-instrumentor for
Python, accomplished by leveraging the opentelemetry-instrument Python wrapper
to run the scripts. This can be done in the ENTRYPOINT command for the
service's Dockerfile.
Traces¶
Initializing Tracing¶
The OpenTelemetry SDK is initialized in the __main__ code block. This code
will create a tracer provider, and establish a Span Processor to use. Export
endpoints, resource attributes, and service name are automatically set by the
OpenTelemetry auto instrumentor based on environment variables.
Add attributes to auto-instrumented spans¶
Within the execution of auto-instrumented code you can get current span from context.
Adding attributes to a span is accomplished using set_attribute on the span
object. In the ListRecommendations function an attribute is added to the span.
Create new spans¶
New spans can be created and placed into active context using
start_as_current_span from an OpenTelemetry Tracer object. When used in
conjunction with a with block, the span will automatically be ended when the
block ends execution. This is done in the get_product_list function.
Metrics¶
Initializing Metrics¶
The OpenTelemetry SDK is initialized in the __main__ code block. This code
will create a meter provider. Export endpoints, resource attributes, and service
name are automatically set by the OpenTelemetry auto instrumentor based on
environment variables.
Custom metrics¶
The following custom metrics are currently available:
app_recommendations_counter: Cumulative count of # recommended products per service call
Auto-instrumented metrics¶
The following metrics are available through auto-instrumentation, courtesy of
the opentelemetry-instrumentation-system-metrics, which is installed as part
of opentelemetry-bootstrap on building the recommendationservice Docker image:
runtime.cpython.cpu_timeruntime.cpython.memoryruntime.cpython.gc_count
Logs¶
TBD