Development Status
- 4 - Beta
Intended Audience
- Developers
License
- OSI Approved :: Apache Software License
Programming Language
- Python
- Python :: 3
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
- Python :: 3.14
This library builds on the OpenTelemetry WSGI middleware to track web requests in Falcon applications.
Installation
pip install opentelemetry-instrumentation-falcon
Configuration
Exclude lists
To exclude certain URLs from being tracked, set the environment variable OTEL_PYTHON_FALCON_EXCLUDED_URLS (or OTEL_PYTHON_EXCLUDED_URLS as fallback) with comma delimited regexes representing which URLs to exclude.
For example,
export OTEL_PYTHON_FALCON_EXCLUDED_URLS="client/.*/info,healthcheck"
will exclude requests such as https://site/client/123/info and https://site/xyz/healthcheck.
Request attributes
To extract certain attributes from Falcon’s request object and use them as span attributes, set the environment variable OTEL_PYTHON_FALCON_TRACED_REQUEST_ATTRS to a comma delimited list of request attribute names.
For example,
export OTEL_PYTHON_FALCON_TRACED_REQUEST_ATTRS='query_string,uri_template'
will extract path_info and content_type attributes from every traced request and add them as span attritbues.
Falcon Request object reference: https://falcon.readthedocs.io/en/stable/api/request_and_response.html#id1
Usage
import falcon
from opentelemetry.instrumentation.falcon import FalconInstrumentor
FalconInstrumentor().instrument()
app = falcon.App()
class HelloWorldResource(object):
def on_get(self, req, resp):
resp.text = 'Hello World'
app.add_route('/hello', HelloWorldResource())
Request/Response hooks
The instrumentation supports specifying request and response hooks. These are functions that get called back by the instrumentation right after a Span is created for a request and right before the span is finished while processing a response. The hooks can be configured as follows:
from opentelemetry.instrumentation.falcon import FalconInstrumentor
def request_hook(span, req):
pass
def response_hook(span, req, resp):
pass
FalconInstrumentor().instrument(request_hook=request_hook, response_hook=response_hook)