-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtelemetry.py
More file actions
72 lines (57 loc) · 2.36 KB
/
telemetry.py
File metadata and controls
72 lines (57 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import structlog
from fastapi import FastAPI
from python_api.utils.config import get_settings
logger = structlog.get_logger()
_tracer_provider = None
_meter_provider = None
def setup_telemetry(app: FastAPI) -> None:
global _tracer_provider, _meter_provider
settings = get_settings()
if not settings.otel_enabled:
logger.info("OpenTelemetry disabled")
return
from opentelemetry import metrics, trace
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
from opentelemetry.instrumentation.redis import RedisInstrumentor
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
resource = Resource.create(
{
"service.name": settings.otel_service_name,
"service.version": settings.version,
}
)
_tracer_provider = TracerProvider(resource=resource)
span_exporter = OTLPSpanExporter(
endpoint=settings.otel_endpoint,
insecure=settings.otel_insecure,
)
_tracer_provider.add_span_processor(BatchSpanProcessor(span_exporter))
trace.set_tracer_provider(_tracer_provider)
metric_exporter = OTLPMetricExporter(
endpoint=settings.otel_endpoint,
insecure=settings.otel_insecure,
)
metric_reader = PeriodicExportingMetricReader(metric_exporter)
_meter_provider = MeterProvider(resource=resource, metric_readers=[metric_reader])
metrics.set_meter_provider(_meter_provider)
FastAPIInstrumentor.instrument_app(app)
RedisInstrumentor().instrument()
HTTPXClientInstrumentor().instrument()
logger.info(
"OpenTelemetry enabled",
endpoint=settings.otel_endpoint,
service_name=settings.otel_service_name,
)
def shutdown_telemetry() -> None:
if _tracer_provider:
_tracer_provider.shutdown()
if _meter_provider:
_meter_provider.shutdown()
logger.info("OpenTelemetry shut down")