A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://docs.sentry.io/platforms/python/tracing/trace-propagation/custom-instrumentation/ below:

Custom Trace Propagation | Sentry for Python

Custom Trace Propagation

Distributed tracing works out of the box for supported frameworks and when tracing is enabled. If you're using an unsupported framework or don't want to turn on tracing, you can set up custom instrumentation for distributed tracing.

This page describes how to manually propagate trace information into and out of your Python application. All you have to do is to make sure your application extracts incoming headers and to set those headers again when making an outgoing request within your application.

Incoming tracing information has to be extracted and stored in memory for later use. Sentry provides the continue_trace() function to help you with this. Incoming tracing information can come from different places:

Here's an example of how to extract and store incoming tracing information using continue_trace():

Copied

import sentry_sdk
from my_project import get_incoming_headers_as_dict

headers = get_incoming_headers_as_dict()

transaction = sentry_sdk.continue_trace(headers)
with sentry_sdk.start_transaction(transaction):
    ...

In this example, get_incoming_headers_as_dict() returns a dictionary that contains tracing information from HTTP headers, environment variables, or any other mechanism your project uses to communicate with the outside world.

Sentry's continue_trace() function will extract the given headers, try to find the sentry-trace and baggage headers, and store them in memory for later use.

continue_trace() returns a transaction, but does not start it. To start the transaction, use start_transaction().

2. Inject Tracing Information to Outgoing Requests

For distributed tracing to work, the two headers sentry-trace and baggage, must be added to outgoing requests. If you pregenerate HTML on the server-side, you might want to take a look at Inject Tracing Information into Rendered HTML, which describes how to pass on tracing information through HTML meta tags.

Inject Tracing Information Into HTTP Requests

If you are sending outgoing HTTP requests with Requests , AIOHTTP , the low level http.client , or httplib on Python 2, this tracing information is automatically added to outgoing requests.

If you're using none of the above, you can generate this tracing information with the Sentry SDK's get_traceparent() and get_baggage() functions. Here's an example:

Copied

import sentry_sdk
from my_project import make_an_outgoing_request

headers = {}
headers["sentry-trace"] = sentry_sdk.get_traceparent()
headers["baggage"] = sentry_sdk.get_baggage()

make_an_outgoing_request(to="https://example.com", headers=headers)

In this example, tracing information is propagated to the project running at https://example.com. If this project uses the Sentry Python SDK, it will extract and save the tracing information for later use.

The two services are now connected with your custom distributed tracing implementation.

Inject Tracing Information into Rendered HTML

To propagate tracing information into JavaScript running in rendered HTML, you have to inject HTML meta tags for sentry-trace and baggage data into your rendered HTML. Here's an example:

Copied

import sentry_sdk
from my_project import render

meta = ""
meta += '<meta name="sentry-trace" content="%s">' % sentry_sdk.get_traceparent()
meta += '<meta name="baggage" content="%s">' % sentry_sdk.get_baggage()

html = """
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        {additional_meta}
    </head>
    <body>
        <p>This is a website.</p>
    </body>
</html>
""".format(additional_meta=meta)

render(html)

Verification

If you make outgoing requests from your project to other services, check if the headers sentry-trace and baggage are present in the request. If so, distributed tracing is working.

Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4