如何基于 Cloud Monitoring 告警空闲连接数?
解读
在国内金融、电商与政企云项目中,空闲连接数(idle connections) 是衡量 Cloud SQL 实例健康度的关键指标。空闲连接长期占用后端进程与内存,会导致:
- 新连接无法建立,触发 “too many connections” 错误;
- 连接池膨胀,引发 OOM 风险;
- 高并发场景下 连接风暴 被误判为业务高峰,造成资源浪费。
面试官希望候选人能闭环回答:指标来源 → 阈值设计 → 告警通道 → 自动化处置,并体现 “可观测性+可运维性” 的云原生思维。
知识点
- Cloud SQL 自身指标:
database/postgresql/num_backends、database/mysql/threads_connected、database/sqlserver/connections;它们包含 idle + active 总量,需配合state = 'idle'的自定义指标或代理层指标。 - Cloud Monitoring 指标类型:GAUGE,采样周期 60 s,支持 reducer = MAX 聚合。
- MQL(Monitoring Query Language):国内大厂面试常要求手写,用于 过滤 idle 连接 并计算比例。
- 告警策略四要素:条件窗口、阈值、通知渠道(短信/钉钉/飞书 webhook)、文档化 Runbook。
- 合规要求:央行《金融云规范》要求 7×24 可观测,告警须 双通道(邮件+短信)并落库审计。
- 自动化响应:通过 Cloud Functions 调用 Cloud SQL Admin API 执行
pg_terminate_backend()或mysql_kill,实现 自愈。
答案
步骤一:暴露空闲连接指标
PostgreSQL 示例:
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
在 Cloud Monitoring 使用 MQL 自定义指标:
fetch gce_instance
| metric 'workload.googleapis.com/postgresql.idle_connections'
| filter (metric.database_id == 'project:region:instance-id')
| group_by 1m, [value_idle_connections_mean: mean(value.idle_connections)]
| every 1m
MySQL 可通过 performance_schema.threads 计算 PROCESSLIST_COMMAND='Sleep' 的数量,同样推送自定义指标。
步骤二:创建告警策略
- 在 Cloud Console → Monitoring → Alerting → Create Policy;
- 选择 “User-defined metric” 作为条件;
- 设置 窗口期 5 分钟、阈值 ≥ 200 个 idle 连接(可根据实例规格 max_connections × 20% 调整);
- 配置通知渠道:
- 国内短信:绑定 阿里云短信网关 的 webhook;
- 飞书群机器人:URL 填入 飞书自定义机器人;
- 撰写 Runbook 链接(Confluence 页面),包含一键 kill 脚本与值班 escalation 表。
步骤三:自动化处置
部署 Cloud Functions(2nd gen),监听 Pub/Sub 告警 topic:
from google.cloud.sql.connector import Connector
import google.auth
def kill_idle(event, context):
credentials, project = google.auth.default()
connector = Connector()
conn = connector.connect(
"project:region:instance",
"pg8000",
user="cloudsqlsuperuser",
db="postgres"
)
with conn.cursor() as cur:
cur.execute("""
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle'
AND state_change < now() - interval '30 min'
LIMIT 50;
""")
函数通过 IAM 条件角色 roles/cloudsql.editor 授权,遵循 最小权限 原则。
步骤四:灰度与回滚
在 非生产环境 先压测,确认 kill 操作不会破坏长事务;使用 Terraform 管理告警策略,实现 GitOps 回滚。
拓展思考
- 连接池治理:结合 HikariCP 的
idleTimeout、maxLifetime参数,与 Cloud SQL 告警形成 双层防护; - 容量预测:利用 Cloud Monitoring 的 Forecasting API,提前 24 h 预测 idle 连接趋势,触发 自动扩容 read replica;
- 多引擎统一观测:用 Grafana Cloud 侧加载 Cloud SQL 插件,把 MySQL、PostgreSQL、SQL Server 的 idle 指标归一到 “idle_conn_ratio” 一个面板,满足 混合云审计;
- 成本优化:idle 连接长期高水位会抬高 最小 vCPU 计费基线,通过 Alert + Cloud Scheduler 每周生成 资源浪费报告,推动业务方整改,实现 FinOps 闭环。