Use _ instead of . as a metric namespacing separator, for Prometheus
This commit is contained in:
parent
0b96bb793e
commit
b0cf867319
|
@ -69,11 +69,11 @@ class TransactionQueue(object):
|
|||
# HACK to get unique tx id
|
||||
self._next_txn_id = int(self._clock.time_msec())
|
||||
|
||||
metrics.register_callback("pending_pdus",
|
||||
metrics.register_callback("pendingPdus",
|
||||
lambda: {(dest,): len(pdus[dest]) for dest in pdus.keys()},
|
||||
labels=["dest"],
|
||||
)
|
||||
metrics.register_callback("pending_edus",
|
||||
metrics.register_callback("pendingEdus",
|
||||
lambda: {(dest,): len(edus[dest]) for dest in edus.keys()},
|
||||
labels=["dest"],
|
||||
)
|
||||
|
|
|
@ -136,7 +136,7 @@ class PresenceHandler(BaseHandler):
|
|||
self._user_cachemap = {}
|
||||
self._user_cachemap_latest_serial = 0
|
||||
|
||||
metrics.register_callback("user_cachemap:size",
|
||||
metrics.register_callback("userCachemap:size",
|
||||
lambda: len(self._user_cachemap)
|
||||
)
|
||||
|
||||
|
|
|
@ -34,10 +34,10 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
metrics = synapse.metrics.get_metrics_for(__name__)
|
||||
|
||||
outgoing_requests_counter = metrics.register_counter("outgoing_requests",
|
||||
outgoing_requests_counter = metrics.register_counter("requests",
|
||||
labels=["method"],
|
||||
)
|
||||
incoming_responses_counter = metrics.register_counter("incoming_responses",
|
||||
incoming_responses_counter = metrics.register_counter("responses",
|
||||
labels=["method","code"],
|
||||
)
|
||||
|
||||
|
|
|
@ -43,10 +43,10 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
metrics = synapse.metrics.get_metrics_for(__name__)
|
||||
|
||||
outgoing_requests_counter = metrics.register_counter("outgoing_requests",
|
||||
outgoing_requests_counter = metrics.register_counter("requests",
|
||||
labels=["method"],
|
||||
)
|
||||
incoming_responses_counter = metrics.register_counter("incoming_responses",
|
||||
incoming_responses_counter = metrics.register_counter("responses",
|
||||
labels=["method","code"],
|
||||
)
|
||||
|
||||
|
|
|
@ -37,10 +37,10 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
metrics = synapse.metrics.get_metrics_for(__name__)
|
||||
|
||||
incoming_requests_counter = metrics.register_counter("incoming_requests",
|
||||
incoming_requests_counter = metrics.register_counter("requests",
|
||||
labels=["method"],
|
||||
)
|
||||
outgoing_responses_counter = metrics.register_counter("outgoing_responses",
|
||||
outgoing_responses_counter = metrics.register_counter("responses",
|
||||
labels=["method","code"],
|
||||
)
|
||||
|
||||
|
|
|
@ -41,7 +41,12 @@ class Metrics(object):
|
|||
self.name_prefix = name
|
||||
|
||||
def _register(self, metric_class, name, *args, **kwargs):
|
||||
full_name = "%s.%s" % (self.name_prefix, name)
|
||||
if "_" in name:
|
||||
raise ValueError("Metric names %s is invalid as it cannot contain an underscore"
|
||||
% (name)
|
||||
)
|
||||
|
||||
full_name = "%s_%s" % (self.name_prefix, name)
|
||||
|
||||
metric = metric_class(full_name, *args, **kwargs)
|
||||
|
||||
|
@ -78,10 +83,13 @@ class Metrics(object):
|
|||
return wrapped
|
||||
|
||||
|
||||
def get_metrics_for(name):
|
||||
def get_metrics_for(pkg_name):
|
||||
""" Returns a Metrics instance for conveniently creating metrics
|
||||
namespaced with the given name prefix. """
|
||||
return Metrics(name)
|
||||
|
||||
# Convert a "package.name" to "package_name" because Prometheus doesn't
|
||||
# let us use . in metric names
|
||||
return Metrics(pkg_name.replace(".", "_"))
|
||||
|
||||
|
||||
def render_all():
|
||||
|
|
|
@ -122,7 +122,7 @@ class Notifier(object):
|
|||
all_listeners |= x
|
||||
|
||||
return len(all_listeners)
|
||||
metrics.register_callback("all_listeners", count_listeners)
|
||||
metrics.register_callback("listeners", count_listeners)
|
||||
|
||||
metrics.register_callback("rooms",
|
||||
lambda: count(bool, self.room_to_listeners.values())
|
||||
|
|
|
@ -40,7 +40,14 @@ metrics = synapse.metrics.get_metrics_for("synapse.storage")
|
|||
|
||||
sql_query_timer = metrics.register_timer("queries", labels=["verb"])
|
||||
sql_txn_timer = metrics.register_timer("transactions", labels=["desc"])
|
||||
sql_getevents_timer = metrics.register_timer("get_events", labels=["desc"])
|
||||
sql_getevents_timer = metrics.register_timer("getEvents", labels=["desc"])
|
||||
|
||||
caches_by_name = {}
|
||||
cache_counter = metrics.register_cache(
|
||||
"cache",
|
||||
lambda: {(name,): len(caches_by_name[name]) for name in caches_by_name.keys()},
|
||||
labels=["name"],
|
||||
)
|
||||
|
||||
|
||||
# TODO(paul):
|
||||
|
@ -62,8 +69,9 @@ def cached(max_entries=1000):
|
|||
"""
|
||||
def wrap(orig):
|
||||
cache = OrderedDict()
|
||||
name = orig.__name__
|
||||
|
||||
counter = metrics.register_cache(orig.__name__, lambda: len(cache))
|
||||
caches_by_name[name] = cache
|
||||
|
||||
def prefill(key, value):
|
||||
while len(cache) > max_entries:
|
||||
|
@ -74,10 +82,10 @@ def cached(max_entries=1000):
|
|||
@defer.inlineCallbacks
|
||||
def wrapped(self, key):
|
||||
if key in cache:
|
||||
counter.inc_hits()
|
||||
cache_counter.inc_hits(name)
|
||||
defer.returnValue(cache[key])
|
||||
|
||||
counter.inc_misses()
|
||||
cache_counter.inc_misses(name)
|
||||
ret = yield orig(self, key)
|
||||
prefill(key, ret)
|
||||
defer.returnValue(ret)
|
||||
|
@ -195,7 +203,7 @@ class SQLBaseStore(object):
|
|||
|
||||
self._get_event_cache = LruCache(hs.config.event_cache_size)
|
||||
self._get_event_cache_counter = metrics.register_cache(
|
||||
"get_event_cache",
|
||||
"getEventCache",
|
||||
size_callback=lambda: len(self._get_event_cache),
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue