Files
fastapi-best-architecture/backend/common/observability/prometheus/sqlalchemy.py
T
Wu Clan e9b83d3c93 Optimize Grafana observability metrics and config (#1188)
* Optimize Grafana observability metrics and config

* Update docker images
2026-05-29 09:41:50 +08:00

34 lines
1.2 KiB
Python

from typing import Any
from prometheus_client import Gauge
from sqlalchemy.pool import QueuePool
from backend.core.conf import settings
_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=settings.GRAFANA_PROMETHEUS_APP_NAME, state='size'
).set(total_size)
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(
app_name=settings.GRAFANA_PROMETHEUS_APP_NAME, state='checked_out'
).set(checked_out_size)
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(
app_name=settings.GRAFANA_PROMETHEUS_APP_NAME, state='idle'
).set(idle_size)
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(
app_name=settings.GRAFANA_PROMETHEUS_APP_NAME, state='overflow'
).set(overflow_size)