Files
fastapi-best-architecture/backend/common/observability/prometheus/sqlalchemy.py
T
Wu Clan 576b2fc5d0 Add database and queue observability (#1160)
* Add database and queue observability

* Update prometheus

* Delete the wrong changes
2026-04-26 13:07:03 +08:00

30 lines
1.2 KiB
Python

from typing import Any
from prometheus_client import Gauge
from sqlalchemy.pool import QueuePool
from backend.common.observability.prometheus.config import PROMETHEUS_APP_NAME
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE = Gauge(
name='fba_sqlalchemy_pool_connections',
documentation='SQLAlchemy 连接池状态',
labelnames=['app_name', 'state'],
)
def observe_sqlalchemy_pool_connections(*_event_args: Any, pool: QueuePool) -> None:
"""监听 SQLAlchemy 连接池状态"""
total_size = pool.size()
checked_out_size = pool.checkedout()
overflow_size = pool.overflow()
idle_size = max(total_size + overflow_size - checked_out_size, 0)
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(app_name=PROMETHEUS_APP_NAME, state='size').set(total_size)
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(app_name=PROMETHEUS_APP_NAME, state='checked_out').set(
checked_out_size
)
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(app_name=PROMETHEUS_APP_NAME, state='idle').set(idle_size)
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(app_name=PROMETHEUS_APP_NAME, state='overflow').set(
overflow_size
)