This service is responsible to get a list of recommended products for the user based on existing product ids the user is browsing.
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
.
ENTRYPOINT [ "opentelemetry-instrument", "python", "recommendation_server.py" ]
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.
tracer = trace.get_tracer_provider().get_tracer("recommendationservice")
Within the execution of auto-instrumented code you can get current span from context.
span = trace.get_current_span()
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.
span.set_attribute("app.products_recommended.count", len(prod_list))
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.
with tracer.start_as_current_span("get_product_list") as span:
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.
meter = metrics.get_meter_provider().get_meter("recommendationservice")
The following custom metrics are currently available:
app_recommendations_counter
: Cumulative count of # recommended products per service call
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
TBD