This article is contributed. See the original author and article here.
With Python application, you can use OpenCensus to send the telemetry data. However, if your requirement is to use custom dimensions, you can use as below:
import loggingfrom opencensus.ext.azure.log_exporter import AzureLogHandlerlogger = logging.getLogger(__name__)# TODO: replace the all-zero GUID with your instrumentation key.logger.addHandler(AzureLogHandler(connection_string=’InstrumentationKey=00000000-0000-0000-0000-000000000000′))properties = {‘custom_dimensions’: {‘key_1’: ‘value_1’, ‘key_2’: ‘value_2’}}# Use properties in logging statementslogger.warning(‘action’, extra=properties) |
In case, your requirement is to use correlation ID with custom dimensions, Function App does not have the feature available yet. The team is working on a solution to light up this feature.
Until then, use the example below and initialize the OpenCensus component with the correlation id in your function’s trigger.
import json
import logging
import requests
import azure.functions as func
from opencensus.ext.azure.trace_exporter import AzureExporter
from opencensus.trace import config_integration
from opencensus.trace.samplers import ProbabilitySampler
from opencensus.trace.tracer import Tracer
from opencensus.trace import execution_context
from opencensus.trace.propagation.trace_context_http_header_format import TraceContextPropagator
config_integration.trace_integrations([‘requests’])
exporter = AzureExporter(instrumentation_key=”aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee”)
def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
## these below four lines
span_context = TraceContextPropagator().from_headers({“traceparent”: context.trace_context.Traceparent, “tracestate”: context.trace_context.Tracestate})
tracer = Tracer(span_context=span_context, exporter=exporter, sampler=ProbabilitySampler(1.0))
execution_context.set_opencensus_tracer(tracer) # < — sets the passed in tracer as the current tracer
with tracer.span(“parent”):
response = requests.get(url=’http://example.com‘)
return json.dumps({
‘method’: req.method,
‘ctx_func_name’: context.function_name,
‘ctx_func_dir’: context.function_directory,
‘ctx_invocation_id’: context.invocation_id,
‘ctx_trace_context_Traceparent’: context.trace_context.Traceparent,
‘ctx_trace_context_Tracestate’: context.trace_context.Tracestate,
})
Hope this helps!
Shashank Ranjan
Azure App Services Support Engineering
Brought to you by Dr. Ware, Microsoft Office 365 Silver Partner, Charleston SC.
Recent Comments