summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--osprofiler/drivers/jaeger.py11
-rw-r--r--osprofiler/opts.py27
-rw-r--r--osprofiler/tests/unit/drivers/test_jaeger.py34
-rw-r--r--releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml5
-rw-r--r--releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml5
-rw-r--r--setup.cfg8
6 files changed, 82 insertions, 8 deletions
diff --git a/osprofiler/drivers/jaeger.py b/osprofiler/drivers/jaeger.py
index 3f263b2..67e75c3 100644
--- a/osprofiler/drivers/jaeger.py
+++ b/osprofiler/drivers/jaeger.py
@@ -49,16 +49,23 @@ class Jaeger(base.Driver):
"local_agent": {
"reporting_host": parsed_url.hostname,
"reporting_port": parsed_url.port,
- }
+ },
+ "tags": conf.profiler_jaeger.process_tags
}
# Initialize tracer for each profiler
- service_name = "{}-{}".format(project, service)
+ service_name = self._get_service_name(conf, project, service)
config = jaeger_client.Config(cfg, service_name=service_name)
self.tracer = config.initialize_tracer()
self.spans = collections.deque()
+ def _get_service_name(self, conf, project, service):
+ prefix = conf.profiler_jaeger.service_name_prefix
+ if prefix:
+ return "{}-{}-{}".format(prefix, project, service)
+ return "{}-{}".format(project, service)
+
@classmethod
def get_name(cls):
return "jaeger"
diff --git a/osprofiler/opts.py b/osprofiler/opts.py
index 612a6c8..58d5806 100644
--- a/osprofiler/opts.py
+++ b/osprofiler/opts.py
@@ -170,6 +170,30 @@ _PROFILER_OPTS = [
cfg.CONF.register_opts(_PROFILER_OPTS, group=_profiler_opt_group)
+_jaegerprofiler_opt_group = cfg.OptGroup(
+ "profiler_jaeger",
+ title="Jaeger's profiler driver related options")
+
+_service_name_prefix = cfg.StrOpt(
+ "service_name_prefix",
+ help="""
+Set service name prefix to Jaeger service name.
+""")
+
+_process_tags = cfg.DictOpt(
+ "process_tags",
+ default={},
+ help="""
+Set process tracer tags.
+""")
+
+_JAEGER_OPTS = [
+ _service_name_prefix,
+ _process_tags
+]
+
+cfg.CONF.register_opts(_JAEGER_OPTS, group=_jaegerprofiler_opt_group)
+
def set_defaults(conf, enabled=None, trace_sqlalchemy=None, hmac_keys=None,
connection_string=None, es_doc_type=None,
@@ -239,4 +263,5 @@ def disable_web_trace(conf=None):
def list_opts():
- return [(_profiler_opt_group.name, _PROFILER_OPTS)]
+ return [(_profiler_opt_group.name, _PROFILER_OPTS),
+ (_jaegerprofiler_opt_group, _JAEGER_OPTS)]
diff --git a/osprofiler/tests/unit/drivers/test_jaeger.py b/osprofiler/tests/unit/drivers/test_jaeger.py
index e59e69b..128d8aa 100644
--- a/osprofiler/tests/unit/drivers/test_jaeger.py
+++ b/osprofiler/tests/unit/drivers/test_jaeger.py
@@ -15,14 +15,24 @@
from unittest import mock
+from oslo_config import cfg
+
from osprofiler.drivers import jaeger
+from osprofiler import opts
from osprofiler.tests import test
+from jaeger_client import Config
+
class JaegerTestCase(test.TestCase):
def setUp(self):
super(JaegerTestCase, self).setUp()
+
+ opts.set_defaults(cfg.CONF)
+ cfg.CONF.set_default(
+ "process_tags", "k1:v1,k2:v2", "profiler_jaeger")
+
self.payload_start = {
"name": "api-start",
"base_id": "4e3e0ec6-2938-40b1-8504-09eb1d4b0dee",
@@ -48,8 +58,12 @@ class JaegerTestCase(test.TestCase):
}
}
+ # Force to False as if already initialized, tracer will be None.
+ # see: jaeger_client/config.py#L374
+ Config._initialized = False
self.driver = jaeger.Jaeger("jaeger://127.0.0.1:6831",
- project="nova", service="api")
+ project="nova", service="api",
+ conf=cfg.CONF)
@mock.patch("osprofiler._utils.shorten_id")
def test_notify_start(self, mock_shorten_id):
@@ -76,3 +90,21 @@ class JaegerTestCase(test.TestCase):
mock_time.reset_mock()
span.finish.assert_called_once_with(finish_time=fake_time)
+
+ def test_service_name_default(self):
+ self.assertEqual("pr1-svc1", self.driver._get_service_name(
+ cfg.CONF, "pr1", "svc1"))
+
+ def test_service_name_prefix(self):
+ cfg.CONF.set_default(
+ "service_name_prefix", "prx1", "profiler_jaeger")
+ self.assertEqual("prx1-pr1-svc1", self.driver._get_service_name(
+ cfg.CONF, "pr1", "svc1"))
+
+ def test_process_tags(self):
+ tags = self.driver.tracer.tags
+ # Let's remove variable tags generated by Jaeger client
+ del tags['hostname']
+ del tags['jaeger.version']
+ del tags['ip']
+ self.assertEqual({'k1': 'v1', 'k2': 'v2'}, tags)
diff --git a/releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml b/releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml
new file mode 100644
index 0000000..383f7b5
--- /dev/null
+++ b/releasenotes/notes/jaeger-add-process-tags-79d5f5d7a0b049ef.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Add ability to set tracer process tags to Jaeger via a
+ configuration option introduced, `profiler_jaeger/process_tags`.
diff --git a/releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml b/releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml
new file mode 100644
index 0000000..d71abee
--- /dev/null
+++ b/releasenotes/notes/jaeger-service-name-prefix-72878a930f700878.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Introduces service name prefix for Jaeger driver. Please consider
+ using option `profiler_jaeger/service_name_prefix` to set it.
diff --git a/setup.cfg b/setup.cfg
index 274376e..0518875 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,12 +1,12 @@
[metadata]
name = osprofiler
summary = OpenStack Profiler Library
-description-file =
+description_file =
README.rst
author = OpenStack
-author-email = openstack-discuss@lists.openstack.org
-home-page = https://docs.openstack.org/osprofiler/latest/
-python-requires = >=3.8
+author_email = openstack-discuss@lists.openstack.org
+home_page = https://docs.openstack.org/osprofiler/latest/
+python_requires = >=3.8
classifier =
Environment :: OpenStack
Intended Audience :: Developers