Skip to content

Commit 01dc45f

Browse files
author
Artur Shiriev
committed
add logging spans to otl instrument
1 parent c0e3b57 commit 01dc45f

File tree

9 files changed

+28
-34
lines changed

9 files changed

+28
-34
lines changed

docs/introduction/configuration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Additional parameters:
7373
- `opentelemetry_namespace`
7474
- `opentelemetry_insecure`
7575
- `opentelemetry_instrumentors`
76-
- `opentelemetry_span_exporter`
76+
- `opentelemetry_log_traces`
7777

7878
Additional parameters for Litestar and FastAPI:
7979

lite_bootstrap/instruments/opentelemetry_instrument.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@
77

88
if typing.TYPE_CHECKING:
99
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor # type: ignore[attr-defined]
10-
from opentelemetry.sdk.trace.export import SpanExporter
11-
1210

1311
if import_checker.is_opentelemetry_installed:
1412
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
1513
from opentelemetry.sdk import resources
1614
from opentelemetry.sdk.trace import TracerProvider
17-
from opentelemetry.sdk.trace.export import BatchSpanProcessor
15+
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor
1816
from opentelemetry.trace import set_tracer_provider
1917

2018

@@ -34,17 +32,20 @@ class OpentelemetryConfig(BaseConfig):
3432
opentelemetry_instrumentors: list[typing.Union[InstrumentorWithParams, "BaseInstrumentor"]] = dataclasses.field(
3533
default_factory=list
3634
)
37-
opentelemetry_span_exporter: typing.Optional["SpanExporter"] = None
35+
opentelemetry_log_traces: bool = False
3836

3937

4038
@dataclasses.dataclass(kw_only=True, slots=True, frozen=True)
4139
class OpenTelemetryInstrument(BaseInstrument):
4240
bootstrap_config: OpentelemetryConfig
43-
not_ready_message = "opentelemetry_endpoint is empty"
41+
not_ready_message = "opentelemetry_endpoint is empty and opentelemetry_log_traces is False"
4442
missing_dependency_message = "opentelemetry is not installed"
4543

4644
def is_ready(self) -> bool:
47-
return bool(self.bootstrap_config.opentelemetry_endpoint) and import_checker.is_opentelemetry_installed
45+
return (
46+
bool(self.bootstrap_config.opentelemetry_endpoint or self.bootstrap_config.opentelemetry_log_traces)
47+
and import_checker.is_opentelemetry_installed
48+
)
4849

4950
@staticmethod
5051
def check_dependencies() -> bool:
@@ -63,15 +64,17 @@ def bootstrap(self) -> None:
6364
attributes={k: v for k, v in attributes.items() if v},
6465
)
6566
tracer_provider = TracerProvider(resource=resource)
66-
tracer_provider.add_span_processor(
67-
BatchSpanProcessor(
68-
self.bootstrap_config.opentelemetry_span_exporter
69-
or OTLPSpanExporter(
70-
endpoint=self.bootstrap_config.opentelemetry_endpoint,
71-
insecure=self.bootstrap_config.opentelemetry_insecure,
67+
if self.bootstrap_config.opentelemetry_log_traces:
68+
tracer_provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))
69+
if self.bootstrap_config.opentelemetry_endpoint:
70+
tracer_provider.add_span_processor(
71+
BatchSpanProcessor(
72+
OTLPSpanExporter(
73+
endpoint=self.bootstrap_config.opentelemetry_endpoint,
74+
insecure=self.bootstrap_config.opentelemetry_insecure,
75+
),
7276
),
73-
),
74-
)
77+
)
7578
for one_instrumentor in self.bootstrap_config.opentelemetry_instrumentors:
7679
if isinstance(one_instrumentor, InstrumentorWithParams):
7780
one_instrumentor.instrumentor.instrument(

tests/instruments/test_logging_instrument.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from io import StringIO
33

44
import structlog
5-
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
65
from opentelemetry.trace import get_tracer
76

87
from lite_bootstrap.instruments.logging_instrument import LoggingConfig, LoggingInstrument, MemoryLoggerFactory
@@ -34,7 +33,7 @@ def test_logging_instrument_tracer_injection() -> None:
3433
opentelemetry_instrument = OpenTelemetryInstrument(
3534
bootstrap_config=OpentelemetryConfig(
3635
opentelemetry_endpoint="otl",
37-
opentelemetry_span_exporter=ConsoleSpanExporter(),
36+
opentelemetry_log_traces=True,
3837
)
3938
)
4039
try:

tests/instruments/test_opentelemetry_instrument.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
2-
31
from lite_bootstrap.instruments.opentelemetry_instrument import (
42
InstrumentorWithParams,
53
OpentelemetryConfig,
@@ -16,7 +14,7 @@ def test_opentelemetry_instrument() -> None:
1614
InstrumentorWithParams(instrumentor=CustomInstrumentor(), additional_params={"key": "value"}),
1715
CustomInstrumentor(),
1816
],
19-
opentelemetry_span_exporter=ConsoleSpanExporter(),
17+
opentelemetry_log_traces=True,
2018
)
2119
)
2220
try:
@@ -29,7 +27,7 @@ def test_opentelemetry_instrument_empty_instruments() -> None:
2927
opentelemetry_instrument = OpenTelemetryInstrument(
3028
bootstrap_config=OpentelemetryConfig(
3129
opentelemetry_endpoint="otl",
32-
opentelemetry_span_exporter=ConsoleSpanExporter(),
30+
opentelemetry_log_traces=True,
3331
)
3432
)
3533
try:

tests/test_config.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import dataclasses
22

3-
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
4-
53
from lite_bootstrap import FastAPIConfig
64
from lite_bootstrap.instruments.base import BaseConfig
75
from tests.conftest import CustomInstrumentor
@@ -17,8 +15,8 @@ def test_config_from_dict() -> None:
1715
"health_checks_path": "/custom-health/",
1816
"logging_buffer_capacity": 0,
1917
"opentelemetry_endpoint": "otl",
18+
"opentelemetry_log_traces": True,
2019
"opentelemetry_instrumentors": [CustomInstrumentor()],
21-
"opentelemetry_span_exporter": ConsoleSpanExporter(),
2220
"prometheus_metrics_path": "/custom-metrics/",
2321
"sentry_dsn": "https://testdsn@localhost/1",
2422
"swagger_offline_docs": True,
@@ -42,7 +40,7 @@ def test_config_from_object() -> None:
4240
logging_buffer_capacity=0,
4341
opentelemetry_endpoint="otl",
4442
opentelemetry_instrumentors=[CustomInstrumentor()],
45-
opentelemetry_span_exporter=ConsoleSpanExporter(),
43+
opentelemetry_log_traces=True,
4644
prometheus_metrics_path="/custom-metrics/",
4745
sentry_dsn="https://testdsn@localhost/1",
4846
swagger_offline_docs=True,

tests/test_fastapi_bootstrap.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import fastapi
44
import pytest
55
import structlog
6-
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
76
from starlette import status
87
from starlette.testclient import TestClient
98

@@ -26,7 +25,7 @@ def fastapi_config() -> FastAPIConfig:
2625
logging_buffer_capacity=0,
2726
opentelemetry_endpoint="otl",
2827
opentelemetry_instrumentors=[CustomInstrumentor()],
29-
opentelemetry_span_exporter=ConsoleSpanExporter(),
28+
opentelemetry_log_traces=True,
3029
prometheus_metrics_path="/custom-metrics/",
3130
sentry_dsn="https://testdsn@localhost/1",
3231
swagger_offline_docs=True,

tests/test_faststream_bootstrap.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from faststream.redis import RedisBroker, TestRedisBroker
77
from faststream.redis.opentelemetry import RedisTelemetryMiddleware
88
from faststream.redis.prometheus import RedisPrometheusMiddleware
9-
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
109
from starlette import status
1110
from starlette.testclient import TestClient
1211

@@ -30,7 +29,7 @@ def build_faststream_config(broker: BrokerUsecase[typing.Any, typing.Any] | None
3029
service_debug=False,
3130
opentelemetry_endpoint="otl",
3231
opentelemetry_instrumentors=[CustomInstrumentor()],
33-
opentelemetry_span_exporter=ConsoleSpanExporter(),
32+
opentelemetry_log_traces=True,
3433
opentelemetry_middleware_cls=RedisTelemetryMiddleware,
3534
prometheus_metrics_path="/custom-metrics/",
3635
prometheus_middleware_cls=RedisPrometheusMiddleware,

tests/test_free_bootstrap.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import pytest
22
import structlog
3-
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
43
from structlog.typing import EventDict
54

65
from lite_bootstrap import FreeBootstrapper, FreeBootstrapperConfig
@@ -16,7 +15,7 @@ def free_bootstrapper_config() -> FreeBootstrapperConfig:
1615
service_debug=False,
1716
opentelemetry_endpoint="otl",
1817
opentelemetry_instrumentors=[CustomInstrumentor()],
19-
opentelemetry_span_exporter=ConsoleSpanExporter(),
18+
opentelemetry_log_traces=True,
2019
sentry_dsn="https://testdsn@localhost/1",
2120
logging_buffer_capacity=0,
2221
)
@@ -37,7 +36,7 @@ def test_free_bootstrap_logging_not_ready(log_output: list[EventDict]) -> None:
3736
service_debug=True,
3837
opentelemetry_endpoint="otl",
3938
opentelemetry_instrumentors=[CustomInstrumentor()],
40-
opentelemetry_span_exporter=ConsoleSpanExporter(),
39+
opentelemetry_log_traces=True,
4140
sentry_dsn="https://testdsn@localhost/1",
4241
logging_buffer_capacity=0,
4342
),

tests/test_litestar_bootstrap.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import structlog
33
from litestar import status_codes
44
from litestar.testing import TestClient
5-
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
65

76
from lite_bootstrap import LitestarBootstrapper, LitestarConfig
87
from tests.conftest import CustomInstrumentor, emulate_package_missing
@@ -22,7 +21,7 @@ def litestar_config() -> LitestarConfig:
2221
health_checks_path="/custom-health/",
2322
opentelemetry_endpoint="otl",
2423
opentelemetry_instrumentors=[CustomInstrumentor()],
25-
opentelemetry_span_exporter=ConsoleSpanExporter(),
24+
opentelemetry_log_traces=True,
2625
prometheus_metrics_path="/custom-metrics/",
2726
sentry_dsn="https://testdsn@localhost/1",
2827
swagger_offline_docs=True,

0 commit comments

Comments
 (0)