This library builds on the OpenTelemetry WSGI middleware to track web requests in Flask applications. In addition to opentelemetry-util-http, it supports Flask-specific features such as:
The Flask url rule pattern is used as the Span name.
The http.route
Span attribute is set so that one can see which URL rule matched a request.
To exclude certain URLs from tracking, set the environment variable OTEL_PYTHON_FLASK_EXCLUDED_URLS
(or OTEL_PYTHON_EXCLUDED_URLS
to cover all instrumentations) to a string of comma delimited regexes that match the URLs.
For example,
export OTEL_PYTHON_FLASK_EXCLUDED_URLS="client/.*/info,healthcheck"
will exclude requests such as https://site/client/123/info
and https://site/xyz/healthcheck
.
You can also pass comma delimited regexes directly to the instrument_app
method:
FlaskInstrumentor().instrument_app(app, excluded_urls="client/.*/info,healthcheck")Request/Response hooks
This instrumentation supports request and response hooks. These are functions that get called right after a span is created for a request and right before the span is finished for the response.
The client request hook is called with the internal span and an instance of WSGIEnvironment (flask.request.environ) when the method receive
is called.
The client response hook is called with the internal span, the status of the response and a list of key-value (tuples) representing the response headers returned from the response when the method send
is called.
For example,
from opentelemetry.trace import Span from wsgiref.types import WSGIEnvironment from typing import List from opentelemetry.instrumentation.flask import FlaskInstrumentor def request_hook(span: Span, environ: WSGIEnvironment): if span and span.is_recording(): span.set_attribute("custom_user_attribute_from_request_hook", "some-value") def response_hook(span: Span, status: str, response_headers: List): if span and span.is_recording(): span.set_attribute("custom_user_attribute_from_response_hook", "some-value") FlaskInstrumentor().instrument(request_hook=request_hook, response_hook=response_hook)
Flask Request object reference: https://flask.palletsprojects.com/en/2.1.x/api/#flask.Request
Capture HTTP request and response headersYou can configure the agent to capture specified HTTP headers as span attributes, according to the semantic convention.
Bases: BaseInstrumentor
An instrumentor for flask.Flask
See BaseInstrumentor
Return a list of python packages with versions that the will be instrumented.
The format should be the same as used in requirements.txt or pyproject.toml.
For example, if an instrumentation instruments requests 1.x, this method should look like: :rtype: Collection
[str
]
- def instrumentation_dependencies(self) -> Collection[str]:
return [‘requests ~= 1.0’]
This will ensure that the instrumentation will only be used when the specified library is present in the environment.
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