diff --git a/packages/aws-library/requirements/_base.txt b/packages/aws-library/requirements/_base.txt index ef9fa3ab08f..34ee547b218 100644 --- a/packages/aws-library/requirements/_base.txt +++ b/packages/aws-library/requirements/_base.txt @@ -145,6 +145,7 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-botocore # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis @@ -164,10 +165,13 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-botocore # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-botocore==0.51b0 # via -r requirements/_base.in opentelemetry-instrumentation-logging==0.51b0 @@ -431,6 +435,7 @@ wrapt==1.17.2 # aiobotocore # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis yarl==1.18.3 # via diff --git a/packages/service-library/requirements/_base.in b/packages/service-library/requirements/_base.in index 027a631287e..24222e414b8 100644 --- a/packages/service-library/requirements/_base.in +++ b/packages/service-library/requirements/_base.in @@ -18,6 +18,7 @@ arrow # date/time faststream opentelemetry-api opentelemetry-exporter-otlp +opentelemetry-instrumentation-aio-pika opentelemetry-instrumentation-logging opentelemetry-instrumentation-redis opentelemetry-instrumentation-requests diff --git a/packages/service-library/requirements/_base.txt b/packages/service-library/requirements/_base.txt index 4a34a20926c..4b721d88231 100644 --- a/packages/service-library/requirements/_base.txt +++ b/packages/service-library/requirements/_base.txt @@ -103,6 +103,7 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests @@ -120,9 +121,12 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via -r requirements/_base.in opentelemetry-instrumentation-logging==0.51b0 # via -r requirements/_base.in opentelemetry-instrumentation-redis==0.51b0 @@ -297,6 +301,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis yarl==1.18.3 # via diff --git a/packages/service-library/src/servicelib/aiohttp/tracing.py b/packages/service-library/src/servicelib/aiohttp/tracing.py index 199f4836976..1e41aab20f0 100644 --- a/packages/service-library/src/servicelib/aiohttp/tracing.py +++ b/packages/service-library/src/servicelib/aiohttp/tracing.py @@ -1,8 +1,7 @@ -""" Adds aiohttp middleware for tracing using opentelemetry instrumentation. - -""" +"""Adds aiohttp middleware for tracing using opentelemetry instrumentation.""" import logging +from collections.abc import AsyncIterator, Callable from aiohttp import web from opentelemetry import trace @@ -44,8 +43,15 @@ except ImportError: HAS_REQUESTS = False +try: + from opentelemetry.instrumentation.aio_pika import AioPikaInstrumentor + + HAS_AIO_PIKA = True +except ImportError: + HAS_AIO_PIKA = False + -def setup_tracing( +def _startup( app: web.Application, tracing_settings: TracingSettings, service_name: str, @@ -74,7 +80,9 @@ def setup_tracing( trace.set_tracer_provider(TracerProvider(resource=resource)) tracer_provider: trace.TracerProvider = trace.get_tracer_provider() - tracing_destination: str = f"{URL(opentelemetry_collector_endpoint).with_port(opentelemetry_collector_port).with_path('/v1/traces')}" + tracing_destination: str = ( + f"{URL(opentelemetry_collector_endpoint).with_port(opentelemetry_collector_port).with_path('/v1/traces')}" + ) _logger.info( "Trying to connect service %s to tracing collector at %s.", @@ -128,3 +136,52 @@ def setup_tracing( msg="Attempting to add requests opentelemetry autoinstrumentation...", ): RequestsInstrumentor().instrument() + + if HAS_AIO_PIKA: + with log_context( + _logger, + logging.INFO, + msg="Attempting to add aio_pika opentelemetry autoinstrumentation...", + ): + AioPikaInstrumentor().instrument() + + +def _shutdown() -> None: + """Uninstruments all opentelemetry instrumentors that were instrumented.""" + try: + AioHttpClientInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument AioHttpClientInstrumentor") + if HAS_AIOPG: + try: + AiopgInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument AiopgInstrumentor") + if HAS_BOTOCORE: + try: + BotocoreInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument BotocoreInstrumentor") + if HAS_REQUESTS: + try: + RequestsInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument RequestsInstrumentor") + if HAS_AIO_PIKA: + try: + AioPikaInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument AioPikaInstrumentor") + + +def get_tracing_lifespan( + app: web.Application, tracing_settings: TracingSettings, service_name: str +) -> Callable[[web.Application], AsyncIterator]: + _startup(app=app, tracing_settings=tracing_settings, service_name=service_name) + + async def tracing_lifespan(app: web.Application): + assert app # nosec + yield + _shutdown() + + return tracing_lifespan diff --git a/packages/service-library/src/servicelib/fastapi/tracing.py b/packages/service-library/src/servicelib/fastapi/tracing.py index e26cc367064..79247746656 100644 --- a/packages/service-library/src/servicelib/fastapi/tracing.py +++ b/packages/service-library/src/servicelib/fastapi/tracing.py @@ -1,10 +1,10 @@ -""" Adds fastapi middleware for tracing using opentelemetry instrumentation. - -""" +"""Adds fastapi middleware for tracing using opentelemetry instrumentation.""" import logging +from collections.abc import AsyncIterator from fastapi import FastAPI +from fastapi_lifespan_manager import State from httpx import AsyncClient, Client from opentelemetry import trace from opentelemetry.exporter.otlp.proto.http.trace_exporter import ( @@ -60,10 +60,17 @@ except ImportError: HAS_REQUESTS = False +try: + from opentelemetry.instrumentation.aio_pika.aio_pika_instrumentor import ( + AioPikaInstrumentor, + ) -def initialize_tracing( - app: FastAPI, tracing_settings: TracingSettings, service_name: str -) -> None: + HAS_AIOPIKA_INSTRUMENTOR = True +except ImportError: + HAS_AIOPIKA_INSTRUMENTOR = False + + +def _startup(tracing_settings: TracingSettings, service_name: str) -> None: if ( not tracing_settings.TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT and not tracing_settings.TRACING_OPENTELEMETRY_COLLECTOR_PORT @@ -80,7 +87,9 @@ def initialize_tracing( f"{tracing_settings.TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT}" ) - tracing_destination: str = f"{URL(opentelemetry_collector_endpoint).with_port(tracing_settings.TRACING_OPENTELEMETRY_COLLECTOR_PORT).with_path('/v1/traces')}" + tracing_destination: str = ( + f"{URL(opentelemetry_collector_endpoint).with_port(tracing_settings.TRACING_OPENTELEMETRY_COLLECTOR_PORT).with_path('/v1/traces')}" + ) _logger.info( "Trying to connect service %s to opentelemetry tracing collector at %s.", @@ -91,9 +100,8 @@ def initialize_tracing( otlp_exporter = OTLPSpanExporterHTTP(endpoint=tracing_destination) span_processor = BatchSpanProcessor(otlp_exporter) global_tracer_provider.add_span_processor(span_processor) - # Instrument FastAPI - FastAPIInstrumentor().instrument_app(app) + FastAPIInstrumentor().instrument() if HAS_AIOPG: with log_context( _logger, @@ -101,6 +109,13 @@ def initialize_tracing( msg="Attempting to add asyncpg opentelemetry autoinstrumentation...", ): AiopgInstrumentor().instrument() + if HAS_AIOPIKA_INSTRUMENTOR: + with log_context( + _logger, + logging.INFO, + msg="Attempting to add aio_pika opentelemetry autoinstrumentation...", + ): + AioPikaInstrumentor().instrument() if HAS_ASYNCPG: with log_context( _logger, @@ -131,5 +146,70 @@ def initialize_tracing( RequestsInstrumentor().instrument() +def _shutdown() -> None: + """Uninstruments all opentelemetry instrumentors that were instrumented.""" + FastAPIInstrumentor().uninstrument() + if HAS_AIOPG: + try: + AiopgInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument AiopgInstrumentor") + if HAS_AIOPIKA_INSTRUMENTOR: + try: + AioPikaInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument AioPikaInstrumentor") + if HAS_ASYNCPG: + try: + AsyncPGInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument AsyncPGInstrumentor") + if HAS_REDIS: + try: + RedisInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument RedisInstrumentor") + if HAS_BOTOCORE: + try: + BotocoreInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument BotocoreInstrumentor") + if HAS_REQUESTS: + try: + RequestsInstrumentor().uninstrument() + except Exception: # pylint:disable=broad-exception-caught + _logger.exception("Failed to uninstrument RequestsInstrumentor") + + def setup_httpx_client_tracing(client: AsyncClient | Client): HTTPXClientInstrumentor.instrument_client(client) + + +def setup_tracing( + app: FastAPI, tracing_settings: TracingSettings, service_name: str +) -> None: + + _startup(tracing_settings=tracing_settings, service_name=service_name) + + def _on_shutdown() -> None: + _shutdown() + + app.add_event_handler("shutdown", _on_shutdown) + + +def get_tracing_instrumentation_lifespan( + tracing_settings: TracingSettings, service_name: str +): + + _startup(tracing_settings=tracing_settings, service_name=service_name) + + async def tracing_instrumentation_lifespan( + app: FastAPI, + ) -> AsyncIterator[State]: + assert app # nosec + + yield {} + + _shutdown() + + return tracing_instrumentation_lifespan diff --git a/packages/service-library/src/servicelib/rabbitmq/_client_base.py b/packages/service-library/src/servicelib/rabbitmq/_client_base.py index 677b08eb9c9..69720659e50 100644 --- a/packages/service-library/src/servicelib/rabbitmq/_client_base.py +++ b/packages/service-library/src/servicelib/rabbitmq/_client_base.py @@ -70,5 +70,4 @@ async def ping(self) -> bool: return False @abstractmethod - async def close(self) -> None: - ... + async def close(self) -> None: ... diff --git a/packages/service-library/tests/aiohttp/test_tracing.py b/packages/service-library/tests/aiohttp/test_tracing.py index 6dc6c8647f0..2621751f344 100644 --- a/packages/service-library/tests/aiohttp/test_tracing.py +++ b/packages/service-library/tests/aiohttp/test_tracing.py @@ -11,7 +11,7 @@ from aiohttp import web from aiohttp.test_utils import TestClient from pydantic import ValidationError -from servicelib.aiohttp.tracing import setup_tracing +from servicelib.aiohttp.tracing import get_tracing_lifespan from settings_library.tracing import TracingSettings @@ -24,14 +24,23 @@ def tracing_settings_in(request): def set_and_clean_settings_env_vars( monkeypatch: pytest.MonkeyPatch, tracing_settings_in ): + endpoint_mocked = False if tracing_settings_in[0]: + endpoint_mocked = True monkeypatch.setenv( "TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT", f"{tracing_settings_in[0]}" ) + port_mocked = False if tracing_settings_in[1]: + port_mocked = True monkeypatch.setenv( "TRACING_OPENTELEMETRY_COLLECTOR_PORT", f"{tracing_settings_in[1]}" ) + yield + if endpoint_mocked: + monkeypatch.delenv("TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT") + if port_mocked: + monkeypatch.delenv("TRACING_OPENTELEMETRY_COLLECTOR_PORT") @pytest.mark.parametrize( @@ -50,11 +59,10 @@ async def test_valid_tracing_settings( app = web.Application() service_name = "simcore_service_webserver" tracing_settings = TracingSettings() - setup_tracing( - app, - service_name=service_name, - tracing_settings=tracing_settings, - ) + async for _ in get_tracing_lifespan( + app, service_name=service_name, tracing_settings=tracing_settings + )(app): + pass @pytest.mark.parametrize( @@ -128,14 +136,15 @@ async def test_tracing_setup_package_detection( app = web.Application() service_name = "simcore_service_webserver" tracing_settings = TracingSettings() - setup_tracing( - app, - service_name=service_name, - tracing_settings=tracing_settings, - ) - # idempotency - setup_tracing( + async for _ in get_tracing_lifespan( app, service_name=service_name, tracing_settings=tracing_settings, - ) + )(app): + # idempotency + async for _ in get_tracing_lifespan( + app, + service_name=service_name, + tracing_settings=tracing_settings, + )(app): + pass diff --git a/packages/service-library/tests/fastapi/test_tracing.py b/packages/service-library/tests/fastapi/test_tracing.py index 994d9810cde..8e58dfd75dd 100644 --- a/packages/service-library/tests/fastapi/test_tracing.py +++ b/packages/service-library/tests/fastapi/test_tracing.py @@ -11,7 +11,9 @@ import pytest from fastapi import FastAPI from pydantic import ValidationError -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import ( + get_tracing_instrumentation_lifespan, +) from settings_library.tracing import TracingSettings @@ -29,14 +31,23 @@ def tracing_settings_in(request: pytest.FixtureRequest) -> dict[str, Any]: def set_and_clean_settings_env_vars( monkeypatch: pytest.MonkeyPatch, tracing_settings_in: Callable[[], dict[str, Any]] ) -> None: + endpoint_mocked = False if tracing_settings_in[0]: + endpoint_mocked = True monkeypatch.setenv( "TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT", f"{tracing_settings_in[0]}" ) + port_mocked = False if tracing_settings_in[1]: + port_mocked = True monkeypatch.setenv( "TRACING_OPENTELEMETRY_COLLECTOR_PORT", f"{tracing_settings_in[1]}" ) + yield + if endpoint_mocked: + monkeypatch.delenv("TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT") + if port_mocked: + monkeypatch.delenv("TRACING_OPENTELEMETRY_COLLECTOR_PORT") @pytest.mark.parametrize( @@ -54,17 +65,15 @@ async def test_valid_tracing_settings( uninstrument_opentelemetry: Iterator[None], ): tracing_settings = TracingSettings() - initialize_tracing( - mocked_app, - tracing_settings=tracing_settings, - service_name="Mock-Openetlemetry-Pytest", - ) - # idempotency - initialize_tracing( - mocked_app, + async for _ in get_tracing_instrumentation_lifespan( tracing_settings=tracing_settings, service_name="Mock-Openetlemetry-Pytest", - ) + )(app=mocked_app): + async for _ in get_tracing_instrumentation_lifespan( + tracing_settings=tracing_settings, + service_name="Mock-Openetlemetry-Pytest", + )(app=mocked_app): + pass @pytest.mark.parametrize( @@ -92,11 +101,11 @@ async def test_invalid_tracing_settings( app = mocked_app with pytest.raises((BaseException, ValidationError, TypeError)): # noqa: PT012 tracing_settings = TracingSettings() - initialize_tracing( - app, + async for _ in get_tracing_instrumentation_lifespan( tracing_settings=tracing_settings, service_name="Mock-Openetlemetry-Pytest", - ) + )(app=app): + pass def install_package(package): @@ -147,16 +156,14 @@ async def test_tracing_setup_package_detection( ): package_name = manage_package importlib.import_module(package_name) - # tracing_settings = TracingSettings() - initialize_tracing( - mocked_app, - tracing_settings=tracing_settings, - service_name="Mock-Openetlemetry-Pytest", - ) - # idempotency - initialize_tracing( - mocked_app, + async for _ in get_tracing_instrumentation_lifespan( tracing_settings=tracing_settings, service_name="Mock-Openetlemetry-Pytest", - ) + )(app=mocked_app): + # idempotency check + async for _ in get_tracing_instrumentation_lifespan( + tracing_settings=tracing_settings, + service_name="Mock-Openetlemetry-Pytest", + )(app=mocked_app): + pass diff --git a/packages/simcore-sdk/requirements/_base.txt b/packages/simcore-sdk/requirements/_base.txt index 203d5639482..47e473da7c3 100644 --- a/packages/simcore-sdk/requirements/_base.txt +++ b/packages/simcore-sdk/requirements/_base.txt @@ -156,6 +156,7 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis @@ -174,10 +175,13 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asyncpg==0.51b0 # via -r requirements/../../../packages/postgres-database/requirements/_base.in opentelemetry-instrumentation-logging==0.51b0 @@ -469,6 +473,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis yarl==1.18.3 # via diff --git a/services/agent/requirements/_base.txt b/services/agent/requirements/_base.txt index 0ba4f5c3625..33bbb5f1207 100644 --- a/services/agent/requirements/_base.txt +++ b/services/agent/requirements/_base.txt @@ -157,6 +157,7 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx @@ -177,12 +178,15 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.51b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-fastapi==0.51b0 @@ -456,6 +460,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.18.3 diff --git a/services/agent/src/simcore_service_agent/core/application.py b/services/agent/src/simcore_service_agent/core/application.py index b4a5ce8cd48..d251418e085 100644 --- a/services/agent/src/simcore_service_agent/core/application.py +++ b/services/agent/src/simcore_service_agent/core/application.py @@ -5,7 +5,7 @@ get_common_oas_options, override_fastapi_openapi_method, ) -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from servicelib.logging_utils import config_all_loggers from .._meta import ( @@ -55,6 +55,9 @@ def create_app() -> FastAPI: override_fastapi_openapi_method(app) app.state.settings = settings + if settings.AGENT_TRACING: + setup_tracing(app, settings.AGENT_TRACING, APP_NAME) + setup_instrumentation(app) setup_rabbitmq(app) @@ -63,9 +66,6 @@ def create_app() -> FastAPI: setup_rest_api(app) setup_rpc_api_routes(app) - if settings.AGENT_TRACING: - initialize_tracing(app, settings.AGENT_TRACING, APP_NAME) - async def _on_startup() -> None: print(APP_STARTED_BANNER_MSG, flush=True) # noqa: T201 diff --git a/services/api-server/requirements/_base.txt b/services/api-server/requirements/_base.txt index bc6e9f8d491..0ca61b1b899 100644 --- a/services/api-server/requirements/_base.txt +++ b/services/api-server/requirements/_base.txt @@ -348,6 +348,7 @@ opentelemetry-api==1.28.2 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -371,6 +372,7 @@ opentelemetry-exporter-otlp-proto-http==1.28.2 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.49b2 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -378,6 +380,10 @@ opentelemetry-instrumentation==0.49b2 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.49b2 + # via + # -r requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.49b2 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.49b2 @@ -930,6 +936,7 @@ wrapt==1.17.0 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.18.3 diff --git a/services/api-server/src/simcore_service_api_server/core/application.py b/services/api-server/src/simcore_service_api_server/core/application.py index bc319bb09a0..c15a506d9b0 100644 --- a/services/api-server/src/simcore_service_api_server/core/application.py +++ b/services/api-server/src/simcore_service_api_server/core/application.py @@ -5,7 +5,7 @@ from models_library.basic_types import BootModeEnum from packaging.version import Version from servicelib.fastapi.profiler import initialize_profiler -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from servicelib.logging_utils import config_all_loggers from .. import exceptions @@ -82,6 +82,9 @@ def init_app(settings: ApplicationSettings | None = None) -> FastAPI: app.state.settings = settings + if settings.API_SERVER_TRACING: + setup_tracing(app, settings.API_SERVER_TRACING, APP_NAME) + if settings.API_SERVER_POSTGRES: setup_postgres(app) @@ -90,9 +93,6 @@ def init_app(settings: ApplicationSettings | None = None) -> FastAPI: if app.state.settings.API_SERVER_PROMETHEUS_INSTRUMENTATION_ENABLED: setup_prometheus_instrumentation(app) - if settings.API_SERVER_TRACING: - initialize_tracing(app, settings.API_SERVER_TRACING, APP_NAME) - if settings.API_SERVER_WEBSERVER: webserver.setup( app, diff --git a/services/autoscaling/requirements/_base.txt b/services/autoscaling/requirements/_base.txt index 955aa1a4b25..b14b6a2b408 100644 --- a/services/autoscaling/requirements/_base.txt +++ b/services/autoscaling/requirements/_base.txt @@ -301,6 +301,7 @@ opentelemetry-api==1.33.1 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-botocore # opentelemetry-instrumentation-fastapi @@ -325,6 +326,7 @@ opentelemetry-exporter-otlp-proto-http==1.33.1 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.54b1 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-botocore # opentelemetry-instrumentation-fastapi @@ -332,6 +334,10 @@ opentelemetry-instrumentation==0.54b1 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.54b1 + # via + # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.54b1 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-botocore==0.54b1 @@ -817,6 +823,7 @@ wrapt==1.17.2 # aiobotocore # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.20.0 diff --git a/services/autoscaling/src/simcore_service_autoscaling/core/application.py b/services/autoscaling/src/simcore_service_autoscaling/core/application.py index f70a8be583c..c023795a71b 100644 --- a/services/autoscaling/src/simcore_service_autoscaling/core/application.py +++ b/services/autoscaling/src/simcore_service_autoscaling/core/application.py @@ -1,7 +1,7 @@ import logging from fastapi import FastAPI -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from .._meta import ( API_VERSION, @@ -60,6 +60,9 @@ def create_app(settings: ApplicationSettings) -> FastAPI: assert app.state.settings.API_VERSION == API_VERSION # nosec # PLUGINS SETUP + if app.state.settings.AUTOSCALING_TRACING: + setup_tracing(app, app.state.settings.AUTOSCALING_TRACING, APP_NAME) + setup_instrumentation(app) setup_api_routes(app) setup_docker(app) @@ -70,8 +73,6 @@ def create_app(settings: ApplicationSettings) -> FastAPI: setup_auto_scaler_background_task(app) setup_buffer_machines_pool_task(app) - if app.state.settings.AUTOSCALING_TRACING: - initialize_tracing(app, app.state.settings.AUTOSCALING_TRACING, APP_NAME) # ERROR HANDLERS diff --git a/services/catalog/requirements/_base.txt b/services/catalog/requirements/_base.txt index 94e60b6dc27..ddcd006d5e7 100644 --- a/services/catalog/requirements/_base.txt +++ b/services/catalog/requirements/_base.txt @@ -223,6 +223,7 @@ opentelemetry-api==1.31.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -244,6 +245,7 @@ opentelemetry-exporter-otlp-proto-http==1.31.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.52b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -251,6 +253,8 @@ opentelemetry-instrumentation==0.52b0 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.52b0 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.52b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.52b0 @@ -610,6 +614,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.18.3 diff --git a/services/catalog/src/simcore_service_catalog/core/application.py b/services/catalog/src/simcore_service_catalog/core/application.py index 0ff4deb86d8..d353f35eabd 100644 --- a/services/catalog/src/simcore_service_catalog/core/application.py +++ b/services/catalog/src/simcore_service_catalog/core/application.py @@ -5,10 +5,10 @@ from models_library.basic_types import BootModeEnum from servicelib.fastapi import timing_middleware from servicelib.fastapi.monitoring import ( - initialize_prometheus_instrumentation, + setup_prometheus_instrumentation, ) from servicelib.fastapi.openapi import override_fastapi_openapi_method -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from starlette.middleware.base import BaseHTTPMiddleware from .._meta import ( @@ -63,10 +63,10 @@ def create_app() -> FastAPI: app.state.settings = settings # MIDDLEWARES - if settings.CATALOG_PROMETHEUS_INSTRUMENTATION_ENABLED: - initialize_prometheus_instrumentation(app) if settings.CATALOG_TRACING: - initialize_tracing(app, settings.CATALOG_TRACING, APP_NAME) + setup_tracing(app, settings.CATALOG_TRACING, APP_NAME) + if settings.CATALOG_PROMETHEUS_INSTRUMENTATION_ENABLED: + setup_prometheus_instrumentation(app) if settings.SC_BOOT_MODE != BootModeEnum.PRODUCTION: # middleware to time requests (ONLY for development) diff --git a/services/clusters-keeper/requirements/_base.txt b/services/clusters-keeper/requirements/_base.txt index 84a7c88a3c7..aecdfcddd0a 100644 --- a/services/clusters-keeper/requirements/_base.txt +++ b/services/clusters-keeper/requirements/_base.txt @@ -299,6 +299,7 @@ opentelemetry-api==1.33.1 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-botocore # opentelemetry-instrumentation-fastapi @@ -323,6 +324,7 @@ opentelemetry-exporter-otlp-proto-http==1.33.1 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.54b1 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-botocore # opentelemetry-instrumentation-fastapi @@ -330,6 +332,10 @@ opentelemetry-instrumentation==0.54b1 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.54b1 + # via + # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.54b1 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-botocore==0.54b1 @@ -815,6 +821,7 @@ wrapt==1.17.2 # aiobotocore # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.20.0 diff --git a/services/clusters-keeper/src/simcore_service_clusters_keeper/core/application.py b/services/clusters-keeper/src/simcore_service_clusters_keeper/core/application.py index ceb6413b00f..979a618f126 100644 --- a/services/clusters-keeper/src/simcore_service_clusters_keeper/core/application.py +++ b/services/clusters-keeper/src/simcore_service_clusters_keeper/core/application.py @@ -4,7 +4,7 @@ from servicelib.fastapi.monitoring import ( setup_prometheus_instrumentation, ) -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from .._meta import ( API_VERSION, @@ -58,14 +58,14 @@ def create_app(settings: ApplicationSettings) -> FastAPI: app.state.settings = settings assert app.state.settings.API_VERSION == API_VERSION # nosec - if app.state.settings.CLUSTERS_KEEPER_PROMETHEUS_INSTRUMENTATION_ENABLED: - setup_prometheus_instrumentation(app) if app.state.settings.CLUSTERS_KEEPER_TRACING: - initialize_tracing( + setup_tracing( app, app.state.settings.CLUSTERS_KEEPER_TRACING, APP_NAME, ) + if app.state.settings.CLUSTERS_KEEPER_PROMETHEUS_INSTRUMENTATION_ENABLED: + setup_prometheus_instrumentation(app) # PLUGINS SETUP setup_api_routes(app) diff --git a/services/dask-sidecar/requirements/_base.txt b/services/dask-sidecar/requirements/_base.txt index 7097a3f7bf7..d38bf44ab71 100644 --- a/services/dask-sidecar/requirements/_base.txt +++ b/services/dask-sidecar/requirements/_base.txt @@ -218,6 +218,7 @@ opentelemetry-api==1.33.1 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests @@ -235,9 +236,12 @@ opentelemetry-exporter-otlp-proto-http==1.33.1 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.54b1 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.54b1 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-logging==0.54b1 # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-redis==0.54b1 @@ -581,6 +585,7 @@ wrapt==1.17.2 # aiobotocore # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis xyzservices==2025.4.0 # via bokeh diff --git a/services/datcore-adapter/requirements/_base.txt b/services/datcore-adapter/requirements/_base.txt index 352e42abae5..a8b332b77a9 100644 --- a/services/datcore-adapter/requirements/_base.txt +++ b/services/datcore-adapter/requirements/_base.txt @@ -179,6 +179,7 @@ opentelemetry-api==1.26.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx @@ -199,12 +200,15 @@ opentelemetry-exporter-otlp-proto-http==1.26.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.47b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.47b0 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.47b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-fastapi==0.47b0 @@ -494,6 +498,7 @@ wrapt==1.16.0 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis yarl==1.20.0 # via diff --git a/services/datcore-adapter/src/simcore_service_datcore_adapter/core/application.py b/services/datcore-adapter/src/simcore_service_datcore_adapter/core/application.py index fab6b65d746..dfc4b95ef3e 100644 --- a/services/datcore-adapter/src/simcore_service_datcore_adapter/core/application.py +++ b/services/datcore-adapter/src/simcore_service_datcore_adapter/core/application.py @@ -10,7 +10,7 @@ setup_prometheus_instrumentation, ) from servicelib.fastapi.openapi import override_fastapi_openapi_method -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from starlette.middleware.base import BaseHTTPMiddleware from .._meta import API_VERSION, API_VTAG, APP_NAME @@ -60,14 +60,14 @@ def create_app(settings: ApplicationSettings) -> FastAPI: app.state.settings = settings - if app.state.settings.DATCORE_ADAPTER_PROMETHEUS_INSTRUMENTATION_ENABLED: - setup_prometheus_instrumentation(app) if app.state.settings.DATCORE_ADAPTER_TRACING: - initialize_tracing( + setup_tracing( app, app.state.settings.DATCORE_ADAPTER_TRACING, APP_NAME, ) + if app.state.settings.DATCORE_ADAPTER_PROMETHEUS_INSTRUMENTATION_ENABLED: + setup_prometheus_instrumentation(app) if settings.SC_BOOT_MODE != BootModeEnum.PRODUCTION: # middleware to time requests (ONLY for development) diff --git a/services/director-v2/requirements/_base.txt b/services/director-v2/requirements/_base.txt index 996b869642e..bb2bca78431 100644 --- a/services/director-v2/requirements/_base.txt +++ b/services/director-v2/requirements/_base.txt @@ -397,6 +397,7 @@ opentelemetry-api==1.33.1 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -420,6 +421,7 @@ opentelemetry-exporter-otlp-proto-http==1.33.1 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.54b1 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -427,6 +429,10 @@ opentelemetry-instrumentation==0.54b1 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.54b1 + # via + # -r requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.54b1 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.54b1 @@ -1121,6 +1127,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis wsproto==1.2.0 diff --git a/services/director-v2/src/simcore_service_director_v2/core/application.py b/services/director-v2/src/simcore_service_director_v2/core/application.py index dd04fb355d3..f3f1cdaf145 100644 --- a/services/director-v2/src/simcore_service_director_v2/core/application.py +++ b/services/director-v2/src/simcore_service_director_v2/core/application.py @@ -7,7 +7,7 @@ override_fastapi_openapi_method, ) from servicelib.fastapi.profiler import initialize_profiler -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from servicelib.logging_utils import config_all_loggers from .._meta import API_VERSION, API_VTAG, APP_NAME, PROJECT_NAME, SUMMARY @@ -145,12 +145,12 @@ def init_app(settings: AppSettings | None = None) -> FastAPI: substitutions.setup(app) + if settings.DIRECTOR_V2_TRACING: + setup_tracing(app, settings.DIRECTOR_V2_TRACING, APP_NAME) + if settings.DIRECTOR_V2_PROMETHEUS_INSTRUMENTATION_ENABLED: instrumentation.setup(app) - if settings.DIRECTOR_V2_TRACING: - initialize_tracing(app, settings.DIRECTOR_V2_TRACING, APP_NAME) - if settings.DIRECTOR_V0.DIRECTOR_ENABLED: director_v0.setup( app, diff --git a/services/director/requirements/_base.txt b/services/director/requirements/_base.txt index 1b6c62bc819..389c0446d1c 100644 --- a/services/director/requirements/_base.txt +++ b/services/director/requirements/_base.txt @@ -191,6 +191,7 @@ opentelemetry-api==1.28.1 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx @@ -211,12 +212,15 @@ opentelemetry-exporter-otlp-proto-http==1.28.1 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.49b1 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.49b1 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.49b1 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-fastapi==0.49b1 @@ -525,6 +529,7 @@ wrapt==1.16.0 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.17.1 diff --git a/services/director/src/simcore_service_director/core/application.py b/services/director/src/simcore_service_director/core/application.py index f9ff1a0391d..0ec5b577a85 100644 --- a/services/director/src/simcore_service_director/core/application.py +++ b/services/director/src/simcore_service_director/core/application.py @@ -4,7 +4,7 @@ from fastapi import FastAPI from servicelib.async_utils import cancel_sequential_workers from servicelib.fastapi.client_session import setup_client_session -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from .._meta import ( API_VERSION, @@ -48,13 +48,13 @@ def create_app(settings: ApplicationSettings) -> FastAPI: assert app.state.settings.API_VERSION == API_VERSION # nosec # PLUGINS SETUP + if app.state.settings.DIRECTOR_TRACING: + setup_tracing(app, app.state.settings.DIRECTOR_TRACING, APP_NAME) + setup_api_routes(app) setup_instrumentation(app) - if app.state.settings.DIRECTOR_TRACING: - initialize_tracing(app, app.state.settings.DIRECTOR_TRACING, APP_NAME) - setup_client_session( app, max_keepalive_connections=settings.DIRECTOR_REGISTRY_CLIENT_MAX_KEEPALIVE_CONNECTIONS, diff --git a/services/docker-api-proxy/requirements/_test.txt b/services/docker-api-proxy/requirements/_test.txt index 3a6fafadc16..2e6125756bd 100644 --- a/services/docker-api-proxy/requirements/_test.txt +++ b/services/docker-api-proxy/requirements/_test.txt @@ -140,6 +140,7 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests @@ -157,9 +158,12 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-logging==0.51b0 # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-redis==0.51b0 @@ -439,6 +443,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis yarl==1.18.3 # via diff --git a/services/dynamic-scheduler/requirements/_base.txt b/services/dynamic-scheduler/requirements/_base.txt index c45cc6acbdd..32918577803 100644 --- a/services/dynamic-scheduler/requirements/_base.txt +++ b/services/dynamic-scheduler/requirements/_base.txt @@ -230,6 +230,7 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -251,6 +252,7 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -258,6 +260,8 @@ opentelemetry-instrumentation==0.51b0 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.51b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.51b0 @@ -610,6 +614,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis wsproto==1.2.0 diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/application.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/application.py index 83d361a2155..407be0711d8 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/application.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/application.py @@ -4,9 +4,8 @@ ) from servicelib.fastapi.openapi import override_fastapi_openapi_method from servicelib.fastapi.profiler import initialize_profiler -from servicelib.fastapi.tracing import initialize_tracing -from .._meta import API_VERSION, API_VTAG, APP_NAME, PROJECT_NAME, SUMMARY +from .._meta import API_VERSION, API_VTAG, PROJECT_NAME, SUMMARY from ..api.frontend import initialize_frontend from ..api.rest.routes import initialize_rest_api from . import events @@ -25,7 +24,7 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: "/doc" if app_settings.DYNAMIC_SCHEDULER_SWAGGER_API_DOC_ENABLED else None ), redoc_url=None, - lifespan=events.create_app_lifespan(), + lifespan=events.create_app_lifespan(settings=app_settings), ) override_fastapi_openapi_method(app) @@ -40,9 +39,6 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: initialize_frontend(app) - if app_settings.DYNAMIC_SCHEDULER_TRACING: - initialize_tracing(app, app_settings.DYNAMIC_SCHEDULER_TRACING, APP_NAME) - if app_settings.DYNAMIC_SCHEDULER_PROFILING: initialize_profiler(app) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/events.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/events.py index 14745c70731..492834a99e3 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/events.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/events.py @@ -13,8 +13,9 @@ from servicelib.fastapi.postgres_lifespan import ( create_postgres_database_input_state, ) +from servicelib.fastapi.tracing import get_tracing_instrumentation_lifespan -from .._meta import APP_FINISHED_BANNER_MSG, APP_STARTED_BANNER_MSG +from .._meta import APP_FINISHED_BANNER_MSG, APP_NAME, APP_STARTED_BANNER_MSG from ..api.rpc.routes import rpc_api_routes_lifespan from ..repository.events import repository_lifespan_manager from ..services.catalog import catalog_lifespan @@ -50,10 +51,18 @@ async def _settings_lifespan(app: FastAPI) -> AsyncIterator[State]: } -def create_app_lifespan() -> LifespanManager: +def create_app_lifespan(settings: ApplicationSettings) -> LifespanManager: app_lifespan = LifespanManager() app_lifespan.add(_settings_lifespan) + if settings.DYNAMIC_SCHEDULER_TRACING: + app_lifespan.add( + get_tracing_instrumentation_lifespan( + tracing_settings=settings.DYNAMIC_SCHEDULER_TRACING, + service_name=APP_NAME, + ) + ) + app_lifespan.include(repository_lifespan_manager) app_lifespan.add(director_v2_lifespan) app_lifespan.add(director_v0_lifespan) diff --git a/services/dynamic-sidecar/requirements/_base.txt b/services/dynamic-sidecar/requirements/_base.txt index 15d632d8ed3..60e7bd9149f 100644 --- a/services/dynamic-sidecar/requirements/_base.txt +++ b/services/dynamic-sidecar/requirements/_base.txt @@ -279,6 +279,7 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -302,6 +303,7 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -309,6 +311,10 @@ opentelemetry-instrumentation==0.51b0 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via + # -r requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.51b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.51b0 @@ -840,6 +846,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis wsproto==1.2.0 diff --git a/services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py b/services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py index ddb26e0e3a7..42827a3d5f7 100644 --- a/services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py +++ b/services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py @@ -9,7 +9,7 @@ get_common_oas_options, override_fastapi_openapi_method, ) -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from servicelib.logging_utils import config_all_loggers from simcore_sdk.node_ports_common.exceptions import NodeNotFound @@ -175,6 +175,9 @@ def create_app(): app.state.application_health = ApplicationHealth() application_settings: ApplicationSettings = app.state.settings + if application_settings.DYNAMIC_SIDECAR_TRACING: + setup_tracing(app, application_settings.DYNAMIC_SIDECAR_TRACING, PROJECT_NAME) + setup_rabbitmq(app) setup_rpc_api_routes(app) setup_background_log_fetcher(app) @@ -193,11 +196,6 @@ def create_app(): if application_settings.are_prometheus_metrics_enabled: setup_prometheus_metrics(app) - if application_settings.DYNAMIC_SIDECAR_TRACING: - initialize_tracing( - app, application_settings.DYNAMIC_SIDECAR_TRACING, PROJECT_NAME - ) - # ERROR HANDLERS ------------ app.add_exception_handler( NodeNotFound, diff --git a/services/efs-guardian/requirements/_base.txt b/services/efs-guardian/requirements/_base.txt index e1a3efbccee..f88d49f88e9 100644 --- a/services/efs-guardian/requirements/_base.txt +++ b/services/efs-guardian/requirements/_base.txt @@ -277,6 +277,7 @@ opentelemetry-api==1.27.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-botocore @@ -302,6 +303,7 @@ opentelemetry-exporter-otlp-proto-http==1.27.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.48b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-botocore @@ -310,6 +312,10 @@ opentelemetry-instrumentation==0.48b0 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.48b0 + # via + # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.48b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.48b0 @@ -816,6 +822,7 @@ wrapt==1.16.0 # aiobotocore # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis yarl==1.20.0 # via diff --git a/services/efs-guardian/src/simcore_service_efs_guardian/core/application.py b/services/efs-guardian/src/simcore_service_efs_guardian/core/application.py index 956a3c891de..217a3d0a1bd 100644 --- a/services/efs-guardian/src/simcore_service_efs_guardian/core/application.py +++ b/services/efs-guardian/src/simcore_service_efs_guardian/core/application.py @@ -1,7 +1,7 @@ import logging from fastapi import FastAPI -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from .._meta import ( API_VERSION, @@ -43,7 +43,7 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: app.state.settings = app_settings assert app.state.settings.API_VERSION == API_VERSION # nosec if app.state.settings.EFS_GUARDIAN_TRACING: - initialize_tracing(app, app.state.settings.EFS_GUARDIAN_TRACING, APP_NAME) + setup_tracing(app, app.state.settings.EFS_GUARDIAN_TRACING, APP_NAME) # PLUGINS SETUP setup_rabbitmq(app) diff --git a/services/invitations/requirements/_base.txt b/services/invitations/requirements/_base.txt index 159a328732c..6df3576877d 100644 --- a/services/invitations/requirements/_base.txt +++ b/services/invitations/requirements/_base.txt @@ -175,6 +175,7 @@ opentelemetry-api==1.31.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx @@ -195,12 +196,15 @@ opentelemetry-exporter-otlp-proto-http==1.31.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.52b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.52b0 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.52b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-fastapi==0.52b0 @@ -485,6 +489,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.18.3 diff --git a/services/invitations/src/simcore_service_invitations/core/application.py b/services/invitations/src/simcore_service_invitations/core/application.py index 02e0cac84d4..acc5137fbc2 100644 --- a/services/invitations/src/simcore_service_invitations/core/application.py +++ b/services/invitations/src/simcore_service_invitations/core/application.py @@ -3,7 +3,7 @@ setup_prometheus_instrumentation, ) from servicelib.fastapi.openapi import override_fastapi_openapi_method -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from .._meta import ( API_VERSION, @@ -38,10 +38,10 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: # PLUGINS SETUP setup_api_routes(app) + if app.state.settings.INVITATIONS_TRACING: + setup_tracing(app, app.state.settings.INVITATIONS_TRACING, APP_NAME) if app.state.settings.INVITATIONS_PROMETHEUS_INSTRUMENTATION_ENABLED: setup_prometheus_instrumentation(app) - if app.state.settings.INVITATIONS_TRACING: - initialize_tracing(app, app.state.settings.INVITATIONS_TRACING, APP_NAME) # ERROR HANDLERS exceptions_handlers.setup(app) diff --git a/services/notifications/requirements/_base.txt b/services/notifications/requirements/_base.txt index ba3090c531e..1bb0d4cc6c9 100644 --- a/services/notifications/requirements/_base.txt +++ b/services/notifications/requirements/_base.txt @@ -186,6 +186,7 @@ opentelemetry-api==1.31.1 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -207,6 +208,7 @@ opentelemetry-exporter-otlp-proto-http==1.31.1 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.52b1 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -214,6 +216,8 @@ opentelemetry-instrumentation==0.52b1 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.52b1 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.52b1 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.52b1 @@ -534,6 +538,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.18.3 diff --git a/services/notifications/src/simcore_service_notifications/core/application.py b/services/notifications/src/simcore_service_notifications/core/application.py index 9c1465c9a02..0c59ebf76fb 100644 --- a/services/notifications/src/simcore_service_notifications/core/application.py +++ b/services/notifications/src/simcore_service_notifications/core/application.py @@ -8,7 +8,7 @@ get_common_oas_options, override_fastapi_openapi_method, ) -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from servicelib.logging_utils import config_all_loggers from .._meta import API_VTAG, APP_NAME, SUMMARY, VERSION @@ -49,14 +49,12 @@ def create_app() -> FastAPI: override_fastapi_openapi_method(app) app.state.settings = settings + if settings.NOTIFICATIONS_TRACING: + setup_tracing(app, settings.NOTIFICATIONS_TRACING, APP_NAME) # pragma: no cover + initialize_rest_api(app) if settings.NOTIFICATIONS_PROMETHEUS_INSTRUMENTATION_ENABLED: initialize_prometheus_instrumentation(app) - if settings.NOTIFICATIONS_TRACING: - initialize_tracing( - app, settings.NOTIFICATIONS_TRACING, APP_NAME - ) # pragma: no cover - return app diff --git a/services/payments/requirements/_base.txt b/services/payments/requirements/_base.txt index a8e58f5f76a..7c032a9a3d3 100644 --- a/services/payments/requirements/_base.txt +++ b/services/payments/requirements/_base.txt @@ -235,6 +235,7 @@ opentelemetry-api==1.28.2 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -256,6 +257,7 @@ opentelemetry-exporter-otlp-proto-http==1.28.2 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.49b2 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-fastapi @@ -263,6 +265,8 @@ opentelemetry-instrumentation==0.49b2 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.49b2 + # via -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.49b2 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.49b2 @@ -625,6 +629,7 @@ wrapt==1.17.0 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis wsproto==1.2.0 diff --git a/services/payments/src/simcore_service_payments/core/application.py b/services/payments/src/simcore_service_payments/core/application.py index eb8169f2a80..92429d674db 100644 --- a/services/payments/src/simcore_service_payments/core/application.py +++ b/services/payments/src/simcore_service_payments/core/application.py @@ -3,7 +3,7 @@ setup_prometheus_instrumentation, ) from servicelib.fastapi.openapi import override_fastapi_openapi_method -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from .._meta import ( API_VERSION, @@ -46,6 +46,9 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: assert app.state.settings.API_VERSION == API_VERSION # nosec # PLUGINS SETUP + if app.state.settings.PAYMENTS_TRACING: + setup_tracing(app, app.state.settings.PAYMENTS_TRACING, APP_NAME) + # API w/ postgres db setup_postgres(app) @@ -70,8 +73,6 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: if app.state.settings.PAYMENTS_PROMETHEUS_INSTRUMENTATION_ENABLED: setup_prometheus_instrumentation(app) - if app.state.settings.PAYMENTS_TRACING: - initialize_tracing(app, app.state.settings.PAYMENTS_TRACING, APP_NAME) # ERROR HANDLERS # ... add here ... diff --git a/services/resource-usage-tracker/requirements/_base.txt b/services/resource-usage-tracker/requirements/_base.txt index d37393ff3f3..ea38c2d9ced 100644 --- a/services/resource-usage-tracker/requirements/_base.txt +++ b/services/resource-usage-tracker/requirements/_base.txt @@ -301,6 +301,7 @@ opentelemetry-api==1.26.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-botocore @@ -326,6 +327,7 @@ opentelemetry-exporter-otlp-proto-http==1.26.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.47b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-botocore @@ -334,6 +336,10 @@ opentelemetry-instrumentation==0.47b0 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.47b0 + # via + # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.47b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.47b0 @@ -881,6 +887,7 @@ wrapt==1.16.0 # aiobotocore # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis yarl==1.20.0 # via diff --git a/services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/core/application.py b/services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/core/application.py index ca07c55f20c..a0c2334321b 100644 --- a/services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/core/application.py +++ b/services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/core/application.py @@ -2,7 +2,7 @@ from fastapi import FastAPI from servicelib.fastapi.openapi import override_fastapi_openapi_method -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from .._meta import ( API_VERSION, @@ -50,6 +50,12 @@ def create_app(settings: ApplicationSettings) -> FastAPI: assert app.state.settings.API_VERSION == API_VERSION # nosec # PLUGINS SETUP + if app.state.settings.RESOURCE_USAGE_TRACKER_TRACING: + setup_tracing( + app, + app.state.settings.RESOURCE_USAGE_TRACKER_TRACING, + app.state.settings.APP_NAME, + ) setup_api_routes(app) fire_and_forget_setup(app) @@ -66,13 +72,6 @@ def create_app(settings: ApplicationSettings) -> FastAPI: setup_process_message_running_service(app) # Requires Rabbit - if app.state.settings.RESOURCE_USAGE_TRACKER_TRACING: - initialize_tracing( - app, - app.state.settings.RESOURCE_USAGE_TRACKER_TRACING, - app.state.settings.APP_NAME, - ) - # ERROR HANDLERS setup_exception_handlers(app) diff --git a/services/storage/requirements/_base.in b/services/storage/requirements/_base.in index cf0ccfdba89..01b289d845e 100644 --- a/services/storage/requirements/_base.in +++ b/services/storage/requirements/_base.in @@ -20,6 +20,7 @@ asgi_lifespan asyncpg # database celery[redis] httpx +opentelemetry-instrumentation-celery opentelemetry-instrumentation-botocore packaging fastapi[all] diff --git a/services/storage/requirements/_base.txt b/services/storage/requirements/_base.txt index c220d9d81fb..f3836e7a61c 100644 --- a/services/storage/requirements/_base.txt +++ b/services/storage/requirements/_base.txt @@ -347,9 +347,11 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-botocore + # opentelemetry-instrumentation-celery # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-logging @@ -372,14 +374,20 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-botocore + # opentelemetry-instrumentation-celery # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via + # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.51b0 # via opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-asyncpg==0.51b0 @@ -388,6 +396,8 @@ opentelemetry-instrumentation-botocore==0.51b0 # via # -r requirements/../../../packages/aws-library/requirements/_base.in # -r requirements/_base.in +opentelemetry-instrumentation-celery==0.51b0 + # via -r requirements/_base.in opentelemetry-instrumentation-fastapi==0.51b0 # via -r requirements/../../../packages/service-library/requirements/_fastapi.in opentelemetry-instrumentation-httpx==0.51b0 @@ -423,6 +433,7 @@ opentelemetry-semantic-conventions==0.51b0 # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-botocore + # opentelemetry-instrumentation-celery # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis @@ -968,6 +979,7 @@ wrapt==1.17.2 # aiobotocore # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis yarl==1.18.3 diff --git a/services/storage/src/simcore_service_storage/core/application.py b/services/storage/src/simcore_service_storage/core/application.py index 4ef671e2a13..7b308a5107a 100644 --- a/services/storage/src/simcore_service_storage/core/application.py +++ b/services/storage/src/simcore_service_storage/core/application.py @@ -17,7 +17,7 @@ ) from servicelib.fastapi.openapi import override_fastapi_openapi_method from servicelib.fastapi.profiler import ProfilerMiddleware -from servicelib.fastapi.tracing import initialize_tracing +from servicelib.fastapi.tracing import setup_tracing from starlette.middleware.base import BaseHTTPMiddleware from .._meta import ( @@ -80,6 +80,9 @@ def create_app(settings: ApplicationSettings) -> FastAPI: # noqa: C901 # STATE app.state.settings = settings + if settings.STORAGE_TRACING: + setup_tracing(app, settings.STORAGE_TRACING, APP_NAME) + setup_db(app) setup_s3(app) setup_client_session(app) @@ -113,8 +116,6 @@ def create_app(settings: ApplicationSettings) -> FastAPI: # noqa: C901 if settings.STORAGE_MONITORING_ENABLED: setup_prometheus_instrumentation(app) - if settings.STORAGE_TRACING: - initialize_tracing(app, settings.STORAGE_TRACING, APP_NAME) async def _on_startup() -> None: if settings.STORAGE_WORKER_MODE: diff --git a/services/web/server/requirements/_base.txt b/services/web/server/requirements/_base.txt index 41e02a69ac8..447bdebed4e 100644 --- a/services/web/server/requirements/_base.txt +++ b/services/web/server/requirements/_base.txt @@ -423,6 +423,7 @@ opentelemetry-api==1.27.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-aiohttp-client # opentelemetry-instrumentation-aiohttp-server # opentelemetry-instrumentation-aiopg @@ -447,6 +448,7 @@ opentelemetry-exporter-otlp-proto-http==1.27.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.48b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-aiohttp-client # opentelemetry-instrumentation-aiohttp-server # opentelemetry-instrumentation-aiopg @@ -455,6 +457,10 @@ opentelemetry-instrumentation==0.48b0 # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.48b0 + # via + # -r requirements/../../../../packages/service-library/requirements/_base.in + # -r requirements/../../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-aiohttp-client==0.48b0 # via -r requirements/../../../../packages/service-library/requirements/_aiohttp.in opentelemetry-instrumentation-aiohttp-server==0.48b0 @@ -1029,6 +1035,7 @@ wrapt==1.16.0 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-aiohttp-client # opentelemetry-instrumentation-aiohttp-server # opentelemetry-instrumentation-aiopg diff --git a/services/web/server/src/simcore_service_webserver/tracing.py b/services/web/server/src/simcore_service_webserver/tracing.py index d07757106e8..ffbb8f404a0 100644 --- a/services/web/server/src/simcore_service_webserver/tracing.py +++ b/services/web/server/src/simcore_service_webserver/tracing.py @@ -2,7 +2,7 @@ from aiohttp import web from servicelib.aiohttp.application_setup import ModuleCategory, app_module_setup -from servicelib.aiohttp.tracing import setup_tracing +from servicelib.aiohttp.tracing import get_tracing_lifespan from settings_library.tracing import TracingSettings from ._meta import APP_NAME @@ -23,8 +23,10 @@ def get_plugin_settings(app: web.Application) -> TracingSettings: ) def setup_app_tracing(app: web.Application): tracing_settings: TracingSettings = get_plugin_settings(app) - setup_tracing( - app, - tracing_settings=tracing_settings, - service_name=APP_NAME, + app.cleanup_ctx.append( + get_tracing_lifespan( + app, + tracing_settings=tracing_settings, + service_name=APP_NAME, + ) ) diff --git a/tests/swarm-deploy/requirements/_test.txt b/tests/swarm-deploy/requirements/_test.txt index fe3462478b3..5f258f0c86b 100644 --- a/tests/swarm-deploy/requirements/_test.txt +++ b/tests/swarm-deploy/requirements/_test.txt @@ -231,6 +231,7 @@ opentelemetry-api==1.30.0 # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis @@ -251,10 +252,15 @@ opentelemetry-exporter-otlp-proto-http==1.30.0 # via opentelemetry-exporter-otlp opentelemetry-instrumentation==0.51b0 # via + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-asyncpg # opentelemetry-instrumentation-logging # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests +opentelemetry-instrumentation-aio-pika==0.51b0 + # via + # -r requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asyncpg==0.51b0 # via -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/postgres-database/requirements/_base.in opentelemetry-instrumentation-logging==0.51b0 @@ -722,6 +728,7 @@ wrapt==1.17.2 # via # deprecated # opentelemetry-instrumentation + # opentelemetry-instrumentation-aio-pika # opentelemetry-instrumentation-redis yarl==1.18.3 # via