Sfoglia il codice sorgente

Add support for using rust-python-jaeger-reporter (#7697)

tags/v1.16.0rc1
Erik Johnston 3 anni fa
committed by GitHub
parent
commit
e07a8caf58
Non sono state trovate chiavi note per questa firma nel database ID Chiave GPG: 4AEE18F83AFDEB23
3 ha cambiato i file con 40 aggiunte e 3 eliminazioni
  1. +1
    -0
      changelog.d/7697.misc
  2. +3
    -0
      mypy.ini
  3. +36
    -3
      synapse/logging/opentracing.py

+ 1
- 0
changelog.d/7697.misc Vedi File

@@ -0,0 +1 @@
Add support for using `rust-python-jaeger-reporter` library to reduce jaeger tracing overhead.

+ 3
- 0
mypy.ini Vedi File

@@ -78,3 +78,6 @@ ignore_missing_imports = True

[mypy-authlib.*]
ignore_missing_imports = True

[mypy-rust_python_jaeger_reporter.*]
ignore_missing_imports = True

+ 36
- 3
synapse/logging/opentracing.py Vedi File

@@ -171,8 +171,9 @@ import logging
import re
import types
from functools import wraps
from typing import TYPE_CHECKING, Dict
from typing import TYPE_CHECKING, Dict, Optional, Type

import attr
from canonicaljson import json

from twisted.internet import defer
@@ -232,6 +233,30 @@ except ImportError:
LogContextScopeManager = None # type: ignore


try:
from rust_python_jaeger_reporter import Reporter

@attr.s(slots=True, frozen=True)
class _WrappedRustReporter:
"""Wrap the reporter to ensure `report_span` never throws.
"""

_reporter = attr.ib(type=Reporter, default=attr.Factory(Reporter))

def set_process(self, *args, **kwargs):
return self._reporter.set_process(*args, **kwargs)

def report_span(self, span):
try:
return self._reporter.report_span(span)
except Exception:
logger.exception("Failed to report span")

RustReporter = _WrappedRustReporter # type: Optional[Type[_WrappedRustReporter]]
except ImportError:
RustReporter = None


logger = logging.getLogger(__name__)


@@ -320,11 +345,19 @@ def init_tracer(hs: "HomeServer"):

set_homeserver_whitelist(hs.config.opentracer_whitelist)

JaegerConfig(
config = JaegerConfig(
config=hs.config.jaeger_config,
service_name="{} {}".format(hs.config.server_name, hs.get_instance_name()),
scope_manager=LogContextScopeManager(hs.config),
).initialize_tracer()
)

# If we have the rust jaeger reporter available let's use that.
if RustReporter:
logger.info("Using rust_python_jaeger_reporter library")
tracer = config.create_tracer(RustReporter(), config.sampler)
opentracing.set_global_tracer(tracer)
else:
config.initialize_tracer()


# Whitelisting


Caricamento…
Annulla
Salva