Basic sentry integration

This commit is contained in:
Erik Johnston 2019-02-12 13:55:58 +00:00
parent b18cd25e42
commit ef2228c890
3 changed files with 31 additions and 0 deletions

View File

@ -25,10 +25,12 @@ from daemonize import Daemonize
from twisted.internet import error, reactor from twisted.internet import error, reactor
from twisted.protocols.tls import TLSMemoryBIOFactory from twisted.protocols.tls import TLSMemoryBIOFactory
import synapse
from synapse.app import check_bind_error from synapse.app import check_bind_error
from synapse.crypto import context_factory from synapse.crypto import context_factory
from synapse.util import PreserveLoggingContext from synapse.util import PreserveLoggingContext
from synapse.util.rlimit import change_resource_limit from synapse.util.rlimit import change_resource_limit
from synapse.util.versionstring import get_version_string
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -266,9 +268,29 @@ def start(hs, listeners=None):
# It is now safe to start your Synapse. # It is now safe to start your Synapse.
hs.start_listening(listeners) hs.start_listening(listeners)
hs.get_datastore().start_profiling() hs.get_datastore().start_profiling()
setup_sentry_io(hs)
except Exception: except Exception:
traceback.print_exc(file=sys.stderr) traceback.print_exc(file=sys.stderr)
reactor = hs.get_reactor() reactor = hs.get_reactor()
if reactor.running: if reactor.running:
reactor.stop() reactor.stop()
sys.exit(1) sys.exit(1)
def setup_sentry_io(hs):
if not hs.config.sentry_enabled:
return
import sentry_sdk
sentry_sdk.init(
dsn=hs.config.sentry_dsn,
release=get_version_string(synapse),
)
with sentry_sdk.configure_scope() as scope:
scope.set_tag("matrix_server_name", hs.config.server_name)
app = hs.config.worker_app if hs.config.worker_app else "synapse.app.homeserver"
name = hs.config.worker_name if hs.config.worker_name else "master"
scope.set_tag("worker_app", app)
scope.set_tag("worker_name", name)

View File

@ -23,12 +23,20 @@ class MetricsConfig(Config):
self.metrics_port = config.get("metrics_port") self.metrics_port = config.get("metrics_port")
self.metrics_bind_host = config.get("metrics_bind_host", "127.0.0.1") self.metrics_bind_host = config.get("metrics_bind_host", "127.0.0.1")
self.sentry_enabled = "sentry" in config
if self.sentry_enabled:
self.sentry_dsn = config["sentry"]["dsn"]
def default_config(self, report_stats=None, **kwargs): def default_config(self, report_stats=None, **kwargs):
res = """\ res = """\
## Metrics ### ## Metrics ###
# Enable collection and rendering of performance metrics # Enable collection and rendering of performance metrics
enable_metrics: False enable_metrics: False
# Enable sentry.io integration
#sentry:
# dsn: "..."
""" """
if report_stats is None: if report_stats is None:

View File

@ -86,6 +86,7 @@ CONDITIONAL_REQUIREMENTS = {
"saml2": ["pysaml2>=4.5.0"], "saml2": ["pysaml2>=4.5.0"],
"url_preview": ["lxml>=3.5.0"], "url_preview": ["lxml>=3.5.0"],
"test": ["mock>=2.0", "parameterized"], "test": ["mock>=2.0", "parameterized"],
"sentry": ["sentry-sdk>=0.7.2"],
} }