Skip to content

Commit 37cc299

Browse files
authored
Merge pull request #824 from NCATSTranslator/redis_semaphore
switched to JaegerExporter from OTELSpanExporter:
2 parents bebf935 + da4f542 commit 37cc299

2 files changed

Lines changed: 39 additions & 34 deletions

File tree

‎tr_sys/requirements.txt‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ click-didyoumean==0.3.1
1616
click-plugins==1.1.1
1717
click-repl==0.3.0
1818
cron-descriptor==1.4.5
19-
Deprecated==1.2.18
19+
Deprecated==1.2.14
2020
django==4.2.27
2121
django-celery-beat==2.8.1
2222
django-celery-results==2.6.0
@@ -70,7 +70,7 @@ sniffio==1.3.1
7070
sortedcontainers==2.4.0
7171
sqlparse==0.5.3
7272
sympy==1.13.3
73-
thrift==0.22.0
73+
thrift==0.21.0
7474
tinycss2==1.2.1
7575
tomli==2.2.1
7676
tracerite==1.1.1
@@ -92,8 +92,9 @@ zipp==3.20.2
9292
zstandard
9393
redis
9494
git+https://github.com/biothings/biothings_annotator#egg=biothings_annotator
95-
opentelemetry-api
96-
opentelemetry-sdk
95+
opentelemetry-api==1.21.0
96+
opentelemetry-sdk==1.21.0
97+
opentelemetry-exporter-jaeger-thrift==1.21.0
9798
opentelemetry-instrumentation
9899
opentelemetry-instrumentation-django
99100
opentelemetry-exporter-jaeger

‎tr_sys/tr_sys/otel_config.py‎

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,54 @@
11
import os,sys
22
import logging
33
from opentelemetry import trace
4-
from opentelemetry.sdk.resources import SERVICE_NAME as telemetery_service_name_key, Resource
4+
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
5+
from opentelemetry.sdk.resources import SERVICE_NAME , Resource
56
from opentelemetry.sdk.trace import TracerProvider
6-
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
7+
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor
78
from opentelemetry.instrumentation.django import DjangoInstrumentor
8-
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
99
from opentelemetry.instrumentation.celery import CeleryInstrumentor
1010
from opentelemetry.instrumentation.requests import RequestsInstrumentor
1111
from celery.signals import worker_process_init
1212

13+
def running_under_pytest() -> bool:
14+
return "pytest" in sys.modules
1315

1416
def configure_opentelemetry():
1517

1618
logging.info('About to instrument ARS app for OTEL')
1719
try:
18-
# Read OTLP endpoint config from env vars
19-
otlp_host = os.environ.get("JAEGER_HOST", "http://localhost").rstrip('/')
20-
#otlp_host = os.environ.get("JAEGER_HOST", "http://jaeger-otel-collector").rstrip('/')
21-
otlp_port = os.environ.get("JAEGER_PORT", "4317")
22-
otlp_endpoint = f'{otlp_host}:{otlp_port}'
23-
service_name= 'ARS'
24-
resource = Resource.create({telemetery_service_name_key: service_name})
25-
26-
trace.set_tracer_provider(TracerProvider(resource=resource))
27-
28-
tracer_provider = trace.get_tracer_provider()
29-
30-
#configure OTLP Exporter (for Jaeger/Collector/etc.)
31-
OTLP_exporter = OTLPSpanExporter(
32-
endpoint=otlp_endpoint,
33-
insecure=True
20+
21+
service_name= os.environ.get("OTEL_SERVICE_NAME","ARS")
22+
23+
#create provider and set it immediately
24+
resource = Resource.create({SERVICE_NAME: service_name})
25+
provider = TracerProvider(resource=resource)
26+
trace.set_tracer_provider(provider)
27+
28+
if running_under_pytest():
29+
# Optional: enable console debug in local tests if desired
30+
if os.environ.get("OTEL_CONSOLE_DEBUG", "").lower() in ("1", "true", "yes"):
31+
provider.add_span_processor(
32+
SimpleSpanProcessor(ConsoleSpanExporter())
33+
)
34+
logging.info("Running under pytest — skipped network exporters/instrumentation")
35+
return
36+
37+
# === non-test runtime: add network exporter (OTLP example) ===
38+
jaeger_host= os.environ.get("JAEGER_HOST", "jaeger")
39+
jaeger_port= os.environ.get("JAEGER_PORT", "6381") # common default thrift port
40+
jaeger_exporter = JaegerExporter(
41+
agent_host_name=jaeger_host,
42+
agent_port=int(jaeger_port)
3443
)
44+
45+
processor = BatchSpanProcessor(jaeger_exporter)
46+
provider.add_span_processor(processor)
47+
3548

36-
span_processor = BatchSpanProcessor(OTLP_exporter)
37-
tracer_provider.add_span_processor(span_processor)
3849

39-
#adding this if condition because with pytest the test proces shuts down then opentelemtry SDK or console exporter is trying to log for a closed operation
40-
# Console exporter for debugging
41-
if "pytest" not in sys.modules:
42-
console_exporter = ConsoleSpanExporter()
43-
tracer_provider.add_span_processor(BatchSpanProcessor(console_exporter))
44-
45-
if "pytest" not in sys.modules:
46-
DjangoInstrumentor().instrument()
47-
RequestsInstrumentor().instrument()
50+
DjangoInstrumentor().instrument()
51+
RequestsInstrumentor().instrument()
4852

4953
@worker_process_init.connect(weak=False)
5054
def init_celery_tracing(*args, **kwargs):

0 commit comments

Comments
 (0)