diff --git a/backend/utils/otel.py b/backend/utils/otel.py index 48dcd775..0e41a19d 100644 --- a/backend/utils/otel.py +++ b/backend/utils/otel.py @@ -5,6 +5,7 @@ from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor from opentelemetry.instrumentation.logging import LoggingInstrumentor +from opentelemetry.instrumentation.redis import RedisInstrumentor from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler from opentelemetry.sdk._logs._internal.export import BatchLogRecordProcessor @@ -15,6 +16,7 @@ from opentelemetry.sdk.trace.export import BatchSpanProcessor from backend.common.log import log, request_id_filter from backend.core.conf import settings from backend.database.db import async_engine +from backend.database.redis import redis_client def init_otel(app: FastAPI) -> None: @@ -56,4 +58,5 @@ def init_otel(app: FastAPI) -> None: LoggingInstrumentor().instrument(set_logging_format=True) SQLAlchemyInstrumentor().instrument(engine=async_engine.sync_engine) + RedisInstrumentor().instrument_client(redis_client) # type: ignore FastAPIInstrumentor.instrument_app(app, tracer_provider=tracer_provider) diff --git a/pyproject.toml b/pyproject.toml index cf8e37ac..1fd6e145 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ dependencies = [ "opentelemetry-exporter-otlp-proto-grpc>=1.39.0", "opentelemetry-instrumentation-fastapi>=0.60b0", "opentelemetry-instrumentation-logging>=0.60b0", + "opentelemetry-instrumentation-redis>=0.60b0", "opentelemetry-instrumentation-sqlalchemy>=0.60b0", "opentelemetry-sdk>=1.39.0", "prometheus-client>=0.23.1", diff --git a/requirements.txt b/requirements.txt index 3dfcb899..6271ecba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -168,6 +168,7 @@ opentelemetry-api==1.39.0 # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-logging + # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-sqlalchemy # opentelemetry-sdk # opentelemetry-semantic-conventions @@ -180,6 +181,7 @@ opentelemetry-instrumentation==0.60b0 # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi # opentelemetry-instrumentation-logging + # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-sqlalchemy opentelemetry-instrumentation-asgi==0.60b0 # via opentelemetry-instrumentation-fastapi @@ -187,6 +189,8 @@ opentelemetry-instrumentation-fastapi==0.60b0 # via fastapi-best-architecture opentelemetry-instrumentation-logging==0.60b0 # via fastapi-best-architecture +opentelemetry-instrumentation-redis==0.60b0 + # via fastapi-best-architecture opentelemetry-instrumentation-sqlalchemy==0.60b0 # via fastapi-best-architecture opentelemetry-proto==1.39.0 @@ -202,6 +206,7 @@ opentelemetry-semantic-conventions==0.60b0 # opentelemetry-instrumentation # opentelemetry-instrumentation-asgi # opentelemetry-instrumentation-fastapi + # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-sqlalchemy # opentelemetry-sdk opentelemetry-util-http==0.60b0 @@ -399,6 +404,7 @@ win32-setctime==1.2.0 ; sys_platform == 'win32' wrapt==1.17.3 # via # opentelemetry-instrumentation + # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-sqlalchemy wsproto==1.3.2 # via simple-websocket diff --git a/uv.lock b/uv.lock index 1bbd82b4..c6e8ec1e 100644 --- a/uv.lock +++ b/uv.lock @@ -707,6 +707,7 @@ dependencies = [ { name = "opentelemetry-exporter-otlp-proto-grpc" }, { name = "opentelemetry-instrumentation-fastapi" }, { name = "opentelemetry-instrumentation-logging" }, + { name = "opentelemetry-instrumentation-redis" }, { name = "opentelemetry-instrumentation-sqlalchemy" }, { name = "opentelemetry-sdk" }, { name = "prometheus-client" }, @@ -767,6 +768,7 @@ requires-dist = [ { name = "opentelemetry-exporter-otlp-proto-grpc", specifier = ">=1.39.0" }, { name = "opentelemetry-instrumentation-fastapi", specifier = ">=0.60b0" }, { name = "opentelemetry-instrumentation-logging", specifier = ">=0.60b0" }, + { name = "opentelemetry-instrumentation-redis", specifier = ">=0.60b0" }, { name = "opentelemetry-instrumentation-sqlalchemy", specifier = ">=0.60b0" }, { name = "opentelemetry-sdk", specifier = ">=1.39.0" }, { name = "prometheus-client", specifier = ">=0.23.1" }, @@ -1814,6 +1816,21 @@ wheels = [ { url = "https://mirrors.aliyun.com/pypi/packages/00/89/6d4f5d8d03376637bff5b8d9e91356104a6f1ce9a34a2099bb2f4bf5e2b5/opentelemetry_instrumentation_logging-0.60b0-py3-none-any.whl", hash = "sha256:af75b3020911b9b6a1b4b19819a165eb131ce9bfdd313062d578fc2dc9a5cd0f" }, ] +[[package]] +name = "opentelemetry-instrumentation-redis" +version = "0.60b0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "wrapt" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/b0/54/e08c60b3cc7aadcdd91c6cf83bb69b9b6ba88b6a1fb75e4893fbd2571211/opentelemetry_instrumentation_redis-0.60b0.tar.gz", hash = "sha256:e97121942d9cf8705e310fee3f1413d74356bf0426b96bf9508385e63fb8ab85" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/31/6d/0ae60b2e6989bd35b8a2dc9e3a8842ecbd7c7e37639d6e69684493911736/opentelemetry_instrumentation_redis-0.60b0-py3-none-any.whl", hash = "sha256:f22aeea7de815228fede1a1bc139bc1634f45af4878c2e9a5fc159913d031d6d" }, +] + [[package]] name = "opentelemetry-instrumentation-sqlalchemy" version = "0.60b0"