mirror of
https://github.com/element-hq/synapse
synced 2024-08-20 15:30:21 +00:00
Merge pull request #1037 from matrix-org/markjh/add_stats_to_prometheus
Add usage stats to prometheus monitoring
This commit is contained in:
commit
e9fe9af068
1 changed files with 26 additions and 2 deletions
|
@ -51,7 +51,7 @@ from synapse.api.urls import (
|
||||||
from synapse.config.homeserver import HomeServerConfig
|
from synapse.config.homeserver import HomeServerConfig
|
||||||
from synapse.crypto import context_factory
|
from synapse.crypto import context_factory
|
||||||
from synapse.util.logcontext import LoggingContext
|
from synapse.util.logcontext import LoggingContext
|
||||||
from synapse.metrics import register_memory_metrics
|
from synapse.metrics import register_memory_metrics, get_metrics_for
|
||||||
from synapse.metrics.resource import MetricsResource, METRICS_PREFIX
|
from synapse.metrics.resource import MetricsResource, METRICS_PREFIX
|
||||||
from synapse.replication.resource import ReplicationResource, REPLICATION_PREFIX
|
from synapse.replication.resource import ReplicationResource, REPLICATION_PREFIX
|
||||||
from synapse.federation.transport.server import TransportLayerServer
|
from synapse.federation.transport.server import TransportLayerServer
|
||||||
|
@ -385,6 +385,8 @@ def run(hs):
|
||||||
|
|
||||||
start_time = hs.get_clock().time()
|
start_time = hs.get_clock().time()
|
||||||
|
|
||||||
|
stats = {}
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def phone_stats_home():
|
def phone_stats_home():
|
||||||
logger.info("Gathering stats for reporting")
|
logger.info("Gathering stats for reporting")
|
||||||
|
@ -393,7 +395,10 @@ def run(hs):
|
||||||
if uptime < 0:
|
if uptime < 0:
|
||||||
uptime = 0
|
uptime = 0
|
||||||
|
|
||||||
stats = {}
|
# If the stats directory is empty then this is the first time we've
|
||||||
|
# reported stats.
|
||||||
|
first_time = not stats
|
||||||
|
|
||||||
stats["homeserver"] = hs.config.server_name
|
stats["homeserver"] = hs.config.server_name
|
||||||
stats["timestamp"] = now
|
stats["timestamp"] = now
|
||||||
stats["uptime_seconds"] = uptime
|
stats["uptime_seconds"] = uptime
|
||||||
|
@ -406,6 +411,25 @@ def run(hs):
|
||||||
daily_messages = yield hs.get_datastore().count_daily_messages()
|
daily_messages = yield hs.get_datastore().count_daily_messages()
|
||||||
if daily_messages is not None:
|
if daily_messages is not None:
|
||||||
stats["daily_messages"] = daily_messages
|
stats["daily_messages"] = daily_messages
|
||||||
|
else:
|
||||||
|
stats.pop("daily_messages", None)
|
||||||
|
|
||||||
|
if first_time:
|
||||||
|
# Add callbacks to report the synapse stats as metrics whenever
|
||||||
|
# prometheus requests them, typically every 30s.
|
||||||
|
# As some of the stats are expensive to calculate we only update
|
||||||
|
# them when synapse phones home to matrix.org every 24 hours.
|
||||||
|
metrics = get_metrics_for("synapse.usage")
|
||||||
|
metrics.add_callback("timestamp", lambda: stats["timestamp"])
|
||||||
|
metrics.add_callback("uptime_seconds", lambda: stats["uptime_seconds"])
|
||||||
|
metrics.add_callback("total_users", lambda: stats["total_users"])
|
||||||
|
metrics.add_callback("total_room_count", lambda: stats["total_room_count"])
|
||||||
|
metrics.add_callback(
|
||||||
|
"daily_active_users", lambda: stats["daily_active_users"]
|
||||||
|
)
|
||||||
|
metrics.add_callback(
|
||||||
|
"daily_messages", lambda: stats.get("daily_messages", 0)
|
||||||
|
)
|
||||||
|
|
||||||
logger.info("Reporting stats to matrix.org: %s" % (stats,))
|
logger.info("Reporting stats to matrix.org: %s" % (stats,))
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue