|
1 | 1 | import logging |
2 | 2 | import os |
3 | | -from urllib.parse import urlparse |
4 | 3 |
|
5 | 4 | from fastmcp.server.middleware import Middleware, MiddlewareContext |
6 | 5 | from opentelemetry import metrics, trace |
|
14 | 13 | from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader |
15 | 14 | from opentelemetry.sdk.resources import Resource |
16 | 15 | from opentelemetry.sdk.trace import TracerProvider |
17 | | -from opentelemetry.sdk.trace.export import SimpleSpanProcessor |
| 16 | +from opentelemetry.sdk.trace.export import BatchSpanProcessor |
18 | 17 | from opentelemetry.trace import Status, StatusCode |
19 | 18 |
|
20 | 19 |
|
21 | 20 | def configure_aspire_dashboard(service_name: str = "expenses-mcp"): |
22 | 21 | """Configure OpenTelemetry to send telemetry to the Aspire standalone dashboard.""" |
23 | 22 | otlp_endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317") |
24 | | - parsed_endpoint = urlparse(otlp_endpoint) |
25 | | - use_insecure = parsed_endpoint.scheme not in ("https", "grpcs") |
26 | 23 |
|
27 | 24 | # Create resource with service name |
28 | 25 | resource = Resource.create({"service.name": service_name}) |
29 | 26 |
|
30 | 27 | # Configure Tracing |
31 | 28 | tracer_provider = TracerProvider(resource=resource) |
32 | | - tracer_provider.add_span_processor( |
33 | | - SimpleSpanProcessor(OTLPSpanExporter(endpoint=otlp_endpoint, insecure=use_insecure)) |
34 | | - ) |
| 29 | + tracer_provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint=otlp_endpoint))) |
35 | 30 | trace.set_tracer_provider(tracer_provider) |
36 | 31 |
|
37 | 32 | # Configure Metrics |
38 | | - metric_reader = PeriodicExportingMetricReader( |
39 | | - OTLPMetricExporter(endpoint=otlp_endpoint, insecure=use_insecure) |
40 | | - ) |
| 33 | + metric_reader = PeriodicExportingMetricReader(OTLPMetricExporter(endpoint=otlp_endpoint)) |
41 | 34 | meter_provider = MeterProvider(resource=resource, metric_readers=[metric_reader]) |
42 | 35 | metrics.set_meter_provider(meter_provider) |
43 | 36 |
|
44 | 37 | # Configure Logging |
45 | 38 | logger_provider = LoggerProvider(resource=resource) |
46 | | - logger_provider.add_log_record_processor( |
47 | | - BatchLogRecordProcessor(OTLPLogExporter(endpoint=otlp_endpoint, insecure=use_insecure)) |
48 | | - ) |
| 39 | + logger_provider.add_log_record_processor(BatchLogRecordProcessor(OTLPLogExporter(endpoint=otlp_endpoint))) |
49 | 40 | set_logger_provider(logger_provider) |
50 | 41 |
|
51 | 42 | # Add logging handler to send Python logs to OTLP |
52 | 43 | root_logger = logging.getLogger() |
53 | 44 | handler_exists = any( |
54 | | - isinstance(existing, LoggingHandler) |
55 | | - and getattr(existing, "logger_provider", None) is logger_provider |
| 45 | + isinstance(existing, LoggingHandler) and getattr(existing, "logger_provider", None) is logger_provider |
56 | 46 | for existing in root_logger.handlers |
57 | 47 | ) |
58 | 48 |
|
|
0 commit comments