flask: add `http.target` and `http.route` to metric attributes (#2621)
This commit is contained in:
parent
6594cdf053
commit
a322a0a26b
|
|
@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
### Added
|
||||
|
||||
- `opentelemetry-instrumentation-flask` Add `http.route` and `http.target` to metric attributes
|
||||
([#2621](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2621))
|
||||
- `opentelemetry-instrumentation-sklearn` Deprecated the sklearn instrumentation
|
||||
([#2708](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2708))
|
||||
- `opentelemetry-instrumentation-pyramid` Record exceptions raised when serving a request
|
||||
|
|
|
|||
|
|
@ -266,6 +266,7 @@ from opentelemetry.instrumentation.propagators import (
|
|||
)
|
||||
from opentelemetry.instrumentation.utils import _start_internal_or_server_span
|
||||
from opentelemetry.metrics import get_meter
|
||||
from opentelemetry.semconv.attributes.http_attributes import HTTP_ROUTE
|
||||
from opentelemetry.semconv.metrics import MetricInstruments
|
||||
from opentelemetry.semconv.metrics.http_metrics import (
|
||||
HTTP_SERVER_REQUEST_DURATION,
|
||||
|
|
@ -340,12 +341,16 @@ def _rewrapped_app(
|
|||
)
|
||||
|
||||
active_requests_counter.add(1, active_requests_count_attrs)
|
||||
request_route = None
|
||||
|
||||
def _start_response(status, response_headers, *args, **kwargs):
|
||||
if flask.request and (
|
||||
excluded_urls is None
|
||||
or not excluded_urls.url_disabled(flask.request.url)
|
||||
):
|
||||
nonlocal request_route
|
||||
request_route = flask.request.url_rule
|
||||
|
||||
span = flask.request.environ.get(_ENVIRON_SPAN_KEY)
|
||||
|
||||
propagator = get_global_response_propagator()
|
||||
|
|
@ -388,6 +393,12 @@ def _rewrapped_app(
|
|||
duration_attrs_old = otel_wsgi._parse_duration_attrs(
|
||||
attributes, _HTTPStabilityMode.DEFAULT
|
||||
)
|
||||
|
||||
if request_route:
|
||||
duration_attrs_old[SpanAttributes.HTTP_TARGET] = str(
|
||||
request_route
|
||||
)
|
||||
|
||||
duration_histogram_old.record(
|
||||
max(round(duration_s * 1000), 0), duration_attrs_old
|
||||
)
|
||||
|
|
@ -395,6 +406,10 @@ def _rewrapped_app(
|
|||
duration_attrs_new = otel_wsgi._parse_duration_attrs(
|
||||
attributes, _HTTPStabilityMode.HTTP
|
||||
)
|
||||
|
||||
if request_route:
|
||||
duration_attrs_new[HTTP_ROUTE] = str(request_route)
|
||||
|
||||
duration_histogram_new.record(
|
||||
max(duration_s, 0), duration_attrs_new
|
||||
)
|
||||
|
|
|
|||
|
|
@ -85,6 +85,12 @@ def expected_attributes_new(override_attributes):
|
|||
return default_attributes
|
||||
|
||||
|
||||
_server_duration_attrs_old_copy = _server_duration_attrs_old.copy()
|
||||
_server_duration_attrs_old_copy.append("http.target")
|
||||
|
||||
_server_duration_attrs_new_copy = _server_duration_attrs_new.copy()
|
||||
_server_duration_attrs_new_copy.append("http.route")
|
||||
|
||||
_expected_metric_names_old = [
|
||||
"http.server.active_requests",
|
||||
"http.server.duration",
|
||||
|
|
@ -95,11 +101,11 @@ _expected_metric_names_new = [
|
|||
]
|
||||
_recommended_metrics_attrs_old = {
|
||||
"http.server.active_requests": _server_active_requests_count_attrs_old,
|
||||
"http.server.duration": _server_duration_attrs_old,
|
||||
"http.server.duration": _server_duration_attrs_old_copy,
|
||||
}
|
||||
_recommended_metrics_attrs_new = {
|
||||
"http.server.active_requests": _server_active_requests_count_attrs_new,
|
||||
"http.server.request.duration": _server_duration_attrs_new,
|
||||
"http.server.request.duration": _server_duration_attrs_new_copy,
|
||||
}
|
||||
_server_active_requests_count_attrs_both = (
|
||||
_server_active_requests_count_attrs_old
|
||||
|
|
@ -109,8 +115,8 @@ _server_active_requests_count_attrs_both.extend(
|
|||
)
|
||||
_recommended_metrics_attrs_both = {
|
||||
"http.server.active_requests": _server_active_requests_count_attrs_both,
|
||||
"http.server.duration": _server_duration_attrs_old,
|
||||
"http.server.request.duration": _server_duration_attrs_new,
|
||||
"http.server.duration": _server_duration_attrs_old_copy,
|
||||
"http.server.request.duration": _server_duration_attrs_new_copy,
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -570,6 +576,7 @@ class TestProgrammatic(InstrumentationTest, WsgiTestBase):
|
|||
self.client.get("/hello/756")
|
||||
expected_duration_attributes = {
|
||||
"http.method": "GET",
|
||||
"http.target": "/hello/<int:helloid>",
|
||||
"http.host": "localhost",
|
||||
"http.scheme": "http",
|
||||
"http.flavor": "1.1",
|
||||
|
|
@ -595,6 +602,7 @@ class TestProgrammatic(InstrumentationTest, WsgiTestBase):
|
|||
expected_duration_attributes = {
|
||||
"http.request.method": "GET",
|
||||
"url.scheme": "http",
|
||||
"http.route": "/hello/<int:helloid>",
|
||||
"network.protocol.version": "1.1",
|
||||
"http.response.status_code": 200,
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue