Add metrics to track rate limiter queue timing (#13544)

This commit is contained in:
Eric Eastwood authored and GitHub committed 2022-08-17 10:38:05 +01:00
1 parent 088bcb7ecb
commit c6ee9c0ee4
2 files changed
+31

No files matched your search

+1
View File
@@ -0,0 +1 @@
Add metrics to track rate limiter queue timing (`synapse_rate_limit_queue_wait_time_seconds`).
+30
View File
@@ -28,6 +28,7 @@ from synapse.logging.context import (
run_in_background,
)
from synapse.logging.opentracing import start_active_span
from synapse.metrics import Histogram
from synapse.util import Clock
if typing.TYPE_CHECKING:
@@ -36,6 +37,29 @@ if typing.TYPE_CHECKING:
logger = logging.getLogger(__name__)
queue_wait_timer = Histogram(
"synapse_rate_limit_queue_wait_time_seconds",
"sec",
[],
buckets=(
0.005,
0.01,
0.025,
0.05,
0.1,
0.25,
0.5,
0.75,
1.0,
2.5,
5.0,
10.0,
20.0,
"+Inf",
),
)
class FederationRateLimiter:
def __init__(self, clock: Clock, config: FederationRatelimitSettings):
def new_limiter() -> "_PerHostRatelimiter":
@@ -178,10 +202,16 @@ class _PerHostRatelimiter:
self.sleeping_requests.discard(request_id)
self.ready_request_queue.pop(request_id, None)
wait_span_scope.__exit__(None, None, None)
wait_timer_cm.__exit__(None, None, None)
return r
# Tracing
wait_span_scope = start_active_span("ratelimit wait")
wait_span_scope.__enter__()
# Metrics
wait_timer_cm = queue_wait_timer.time()
wait_timer_cm.__enter__()
ret_defer.addCallbacks(on_start, on_err)
ret_defer.addBoth(on_both)
return make_deferred_yieldable(ret_defer)