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_time
runtime.cpython.memory
runtime.cpython.gc_count
Logs¶
TBD