Skip to content

Commit e9c3eff

Browse files
authored
Merge pull request #50 from instana/centralize-service-name
Centralize & simplify service naming
2 parents 656f4ee + 420a08b commit e9c3eff

File tree

6 files changed

+72
-43
lines changed

6 files changed

+72
-43
lines changed

Configuration.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,20 @@ export INSTANA_AGENT_IP = '127.0.0.1'
1111
export INSTANA_AGENT_PORT = '42699'
1212
```
1313

14+
## Setting the Service Name
15+
16+
If you'd like to assign a single service name for the entire application you can do so by setting an environment variable or via code:
17+
18+
```
19+
export INSTANA_SERVICE_NAME=myservice
20+
```
21+
22+
or
23+
24+
```Python
25+
instana.service_name = "myservice"
26+
```
27+
1428
## Debugging & More Verbosity
1529

1630
Setting `INSTANA_DEV` to a non nil value will enable extra logging output generally useful

instana/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,14 @@
4949

5050
# Set ourselves as the tracer.
5151
opentracing.tracer = internal_tracer
52+
53+
# Optional application wide service name.
54+
# Can be configured via environment variable or via code:
55+
#
56+
# export INSTANA_SERVICE_NAME=myservice
57+
# or
58+
# instana.service_name = "myservice"
59+
service_name = None
60+
61+
if "INSTANA_SERVICE_NAME" in os.environ:
62+
service_name = os.environ["INSTANA_SERVICE_NAME"]

instana/meter.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import threading as t
2-
from instana import log
32
import resource
43
import os
54
import gc as gc_
65
import sys
7-
import instana.agent_const as a
86
import copy
97
import time
108
from types import ModuleType
9+
import instana
10+
from .log import logger as log
11+
from .agent_const import AGENT_DATA_URL
1112

1213

1314
class Snapshot(object):
@@ -144,14 +145,14 @@ def process(self):
144145
md = copy.deepcopy(cm).delta_data(self.last_metrics)
145146

146147
ed = EntityData(pid=self.sensor.agent.from_.pid, snapshot=ss, metrics=md)
147-
url = self.sensor.agent.make_url(a.AGENT_DATA_URL)
148+
url = self.sensor.agent.make_url(AGENT_DATA_URL)
148149
self.sensor.agent.request(url, "POST", ed)
149150
self.last_metrics = cm.__dict__
150151

151152
def collect_snapshot(self):
152153
try:
153-
if self.sensor.service_name:
154-
appname = self.sensor.service_name
154+
if instana.service_name:
155+
appname = instana.service_name
155156
elif "FLASK_APP" in os.environ:
156157
appname = os.environ["FLASK_APP"]
157158
elif "DJANGO_SETTINGS_MODULE" in os.environ:

instana/options.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,16 @@ class Options(object):
99
log_level = logging.WARN
1010

1111
def __init__(self, **kwds):
12+
""" Initialize Options
13+
Respect any environment variables that may be set.
14+
"""
1215
if "INSTANA_DEV" in os.environ:
1316
self.log_level = logging.DEBUG
1417

18+
if "INSTANA_AGENT_IP" in os.environ:
19+
self.agent_host = os.environ["INSTANA_AGENT_IP"]
20+
21+
if "INSTANA_AGENT_PORT" in os.environ:
22+
self.agent_port = os.environ["INSTANA_AGENT_PORT"]
23+
1524
self.__dict__.update(kwds)

instana/recorder.py

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
from basictracer import Sampler, SpanRecorder
2-
import instana.agent_const as a
31
import threading as t
4-
import opentracing.ext.tags as ext
52
import socket
6-
import instana.span as sd
73
import time
84
import os
5+
import instana
6+
7+
import opentracing.ext.tags as ext
8+
from basictracer import Sampler, SpanRecorder
9+
from .span import CustomData, Data, HttpData, InstanaSpan, SDKData
10+
from .agent_const import AGENT_TRACES_URL
911

1012
import sys
1113
if sys.version_info.major is 2:
@@ -37,7 +39,7 @@ def report_spans(self):
3739
""" Periodically report the queued spans """
3840
while 1:
3941
if self.sensor.agent.can_send() and self.queue.qsize() > 0:
40-
url = self.sensor.agent.make_url(a.AGENT_TRACES_URL)
42+
url = self.sensor.agent.make_url(AGENT_TRACES_URL)
4143
self.sensor.agent.request(url, "POST", self.queued_spans())
4244
time.sleep(1)
4345

@@ -78,17 +80,17 @@ def record_span(self, span):
7880

7981
def build_registered_span(self, span):
8082
""" Takes a BasicSpan and converts it into a registered InstanaSpan """
81-
data = sd.Data(http=sd.HttpData(host=self.get_host_name(span),
82-
url=self.get_string_tag(span, ext.HTTP_URL),
83-
method=self.get_string_tag(span, ext.HTTP_METHOD),
84-
status=self.get_tag(span, ext.HTTP_STATUS_CODE)),
85-
baggage=span.context.baggage,
86-
custom=sd.CustomData(tags=span.tags,
87-
logs=self.collect_logs(span)))
83+
data = Data(http=HttpData(host=self.get_host_name(span),
84+
url=self.get_string_tag(span, ext.HTTP_URL),
85+
method=self.get_string_tag(span, ext.HTTP_METHOD),
86+
status=self.get_tag(span, ext.HTTP_STATUS_CODE)),
87+
baggage=span.context.baggage,
88+
custom=CustomData(tags=span.tags,
89+
logs=self.collect_logs(span)))
8890
entityFrom = {'e': self.sensor.agent.from_.pid,
8991
'h': self.sensor.agent.from_.agentUuid}
9092

91-
return sd.InstanaSpan(
93+
return InstanaSpan(
9294
n=span.operation_name,
9395
t=span.context.trace_id,
9496
p=span.parent_id,
@@ -103,21 +105,18 @@ def build_registered_span(self, span):
103105
def build_sdk_span(self, span):
104106
""" Takes a BasicSpan and converts into an SDK type InstanaSpan """
105107

106-
custom_data = sd.CustomData(
107-
tags=span.tags,
108-
logs=self.collect_logs(span))
108+
custom_data = CustomData(tags=span.tags,
109+
logs=self.collect_logs(span))
109110

110-
sdk_data = sd.SDKData(
111-
name=span.operation_name,
112-
custom=custom_data
113-
)
111+
sdk_data = SDKData(name=span.operation_name,
112+
custom=custom_data)
114113

115114
sdk_data.Type = self.get_span_kind(span)
116-
data = sd.Data(service=self.get_service_name(span), sdk=sdk_data)
115+
data = Data(service=self.get_service_name(span), sdk=sdk_data)
117116
entityFrom = {'e': self.sensor.agent.from_.pid,
118117
'h': self.sensor.agent.from_.agentUuid}
119118

120-
return sd.InstanaSpan(
119+
return InstanaSpan(
121120
t=span.context.trace_id,
122121
p=span.parent_id,
123122
s=span.context.span_id,
@@ -152,7 +151,7 @@ def get_host_name(self, span):
152151
return "localhost"
153152

154153
def get_service_name(self, span):
155-
return self.sensor.service_name
154+
return instana.service_name
156155

157156
def get_span_kind(self, span):
158157
kind = ""

instana/sensor.py

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,28 @@
1-
import instana.options as o
2-
import instana.meter as m
3-
import instana.agent as a
4-
from instana import log
1+
from __future__ import absolute_import
2+
from .options import Options
3+
from .meter import Meter
4+
from .agent import Agent
5+
import instana.log as log
56

67

78
class Sensor(object):
89
options = None
910
meter = None
10-
service_name = None
1111
agent = None
1212

1313
def __init__(self, options):
1414
self.set_options(options)
1515
log.init(options.log_level)
16-
self.configure_service_name()
17-
self.agent = a.Agent(self)
18-
self.meter = m.Meter(self)
16+
self.agent = Agent(self)
17+
self.meter = Meter(self)
1918

2019
log.debug("initialized sensor")
2120

2221
def set_options(self, options):
2322
self.options = options
2423
if not self.options:
25-
self.options = o.Options()
26-
27-
def configure_service_name(self):
28-
if self.options:
29-
self.service_name = self.options.service
24+
self.options = Options()
3025

3126
def handle_fork(self):
32-
self.agent = a.Agent(self)
33-
self.meter = m.Meter(self)
27+
self.agent = Agent(self)
28+
self.meter = Meter(self)

0 commit comments

Comments
 (0)