Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Clean up opentracing configuration options
Browse files Browse the repository at this point in the history
Clean up config settings and dead code.
  • Loading branch information
richvdh committed Jul 18, 2019
1 parent fa8271c commit 498bec9
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 63 deletions.
2 changes: 2 additions & 0 deletions changelog.d/5544.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Add support for opentracing.

1 change: 0 additions & 1 deletion changelog.d/5544.misc

This file was deleted.

2 changes: 2 additions & 0 deletions changelog.d/5712.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Add support for opentracing.

35 changes: 21 additions & 14 deletions docs/sample_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1409,17 +1409,24 @@ password_config:


## Opentracing ##
# These settings enable opentracing which implements distributed tracing
# This allows you to observe the causal chain of events across servers
# including requests, key lookups etc. across any server running
# synapse or any other other services which supports opentracing.
# (specifically those implemented with jaeger)

#opentracing:
# # Enable / disable tracer
# tracer_enabled: false
# # The list of homeservers we wish to expose our current traces to.
# # The list is a list of regexes which are matched against the
# # servername of the homeserver
# homeserver_whitelist:
# - ".*"

# These settings enable opentracing, which implements distributed tracing.
# This allows you to observe the causal chains of events across servers
# including requests, key lookups etc., across any server running
# synapse or any other other services which supports opentracing
# (specifically those implemented with Jaeger).
#
opentracing:
# tracing is disabled by default. Uncomment the following line to enable it.
#
#enabled: true

# The list of homeservers we wish to expose our current traces to.
# XXX this is unclear
# This a list of regexes which are matched against the server_name of the
# homeserver.
#
# By defult, it is empty, so no servers are matched.
#
#homeserver_whitelist:
# - ".*"
53 changes: 31 additions & 22 deletions synapse/config/tracer.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,33 +18,42 @@

class TracerConfig(Config):
def read_config(self, config, **kwargs):
self.tracer_config = config.get("opentracing")
opentracing_config = config.get("opentracing")
if opentracing_config is None:
opentracing_config = {}

self.tracer_config = config.get("opentracing", {"tracer_enabled": False})
self.opentracer_enabled = opentracing_config.get("enabled", False)
if not self.opentracer_enabled:
return

if self.tracer_config.get("tracer_enabled", False):
# The tracer is enabled so sanitize the config
# If no whitelists are given
self.tracer_config.setdefault("homeserver_whitelist", [])
# The tracer is enabled so sanitize the config

if not isinstance(self.tracer_config.get("homeserver_whitelist"), list):
raise ConfigError("Tracer homesererver_whitelist config is malformed")
self.opentracer_whitelist = opentracing_config.get("homeserver_whitelist", [])
if not isinstance(self.opentracer_whitelist, list):
raise ConfigError("Tracer homeserver_whitelist config is malformed")

def generate_config_section(cls, **kwargs):
return """\
## Opentracing ##
# These settings enable opentracing which implements distributed tracing
# This allows you to observe the causal chain of events across servers
# including requests, key lookups etc. across any server running
# synapse or any other other services which supports opentracing.
# (specifically those implemented with jaeger)
#opentracing:
# # Enable / disable tracer
# tracer_enabled: false
# # The list of homeservers we wish to expose our current traces to.
# # The list is a list of regexes which are matched against the
# # servername of the homeserver
# homeserver_whitelist:
# - ".*"
# These settings enable opentracing, which implements distributed tracing.
# This allows you to observe the causal chains of events across servers
# including requests, key lookups etc., across any server running
# synapse or any other other services which supports opentracing
# (specifically those implemented with Jaeger).
#
opentracing:
# tracing is disabled by default. Uncomment the following line to enable it.
#
#enabled: true
# The list of homeservers we wish to expose our current traces to.
# XXX this is unclear
# This a list of regexes which are matched against the server_name of the
# homeserver.
#
# By defult, it is empty, so no servers are matched.
#
#homeserver_whitelist:
# - ".*"
"""
42 changes: 19 additions & 23 deletions synapse/logging/opentracing.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Copyright 2019 The Matrix.org Foundation C.I.C.d
# Copyright 2019 The Matrix.org Foundation C.I.C.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand All @@ -24,6 +24,15 @@
# this move the methods have work very similarly to opentracing's and it should only
# be a matter of few regexes to move over to opentracing's access patterns proper.

import contextlib
import logging
import re
from functools import wraps

from twisted.internet import defer

from synapse.config import ConfigError

try:
import opentracing
except ImportError:
Expand All @@ -35,12 +44,6 @@
JaegerConfig = None
LogContextScopeManager = None

import contextlib
import logging
import re
from functools import wraps

from twisted.internet import defer

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -91,7 +94,8 @@ def _only_if_tracing_inner(*args, **kwargs):
return _only_if_tracing_inner


# Block everything by default
# A regex which matches the server_names to expose traces for.
# None means 'block everything'.
_homeserver_whitelist = None

tags = _DumTagNames
Expand All @@ -101,31 +105,24 @@ def init_tracer(config):
"""Set the whitelists and initialise the JaegerClient tracer
Args:
config (Config)
The config used by the homeserver. Here it's used to set the service
name to the homeserver's.
config (HomeserverConfig): The config used by the homeserver
"""
global opentracing
if not config.tracer_config.get("tracer_enabled", False):
if not config.opentracer_enabled:
# We don't have a tracer
opentracing = None
return

if not opentracing:
logger.error(
"The server has been configure to use opentracing but opentracing is not installed."
)
raise ModuleNotFoundError("opentracing")

if not JaegerConfig:
logger.error(
"The server has been configure to use opentracing but opentracing is not installed."
if not opentracing or not JaegerConfig:
raise ConfigError(
"The server has been configured to use opentracing but opentracing is not "
"installed."
)

# Include the worker name
name = config.worker_name if config.worker_name else "master"

set_homeserver_whitelist(config.tracer_config["homeserver_whitelist"])
set_homeserver_whitelist(config.opentracer_whitelist)
jaeger_config = JaegerConfig(
config={"sampler": {"type": "const", "param": 1}, "logging": True},
service_name="{} {}".format(config.server_name, name),
Expand Down Expand Up @@ -232,7 +229,6 @@ def whitelisted_homeserver(destination):
"""Checks if a destination matches the whitelist
Args:
destination (String)"""
global _homeserver_whitelist
if _homeserver_whitelist:
return _homeserver_whitelist.match(destination)
return False
Expand Down
4 changes: 1 addition & 3 deletions synapse/logging/scopecontextmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,7 @@ class LogContextScopeManager(ScopeManager):
"""

def __init__(self, config):
# Set the whitelists
logger.info(config.tracer_config)
self._homeserver_whitelist = config.tracer_config["homeserver_whitelist"]
pass

@property
def active(self):
Expand Down

0 comments on commit 498bec9

Please sign in to comment.