银行数据库智能运维平台建设实践:从人肉监控到智能自治

发布时间:2026/9/6 15:34:19
银行数据库智能运维平台建设实践:从人肉监控到智能自治 简介面向银行科技团队与运维架构师的一份数据库智能运维平台建设方案聚焦AIOps在核心交易系统中的应用针对传统人工监控效率低、故障定位慢等痛点系统阐述基于机器学习实现异常检测、根因分析、SQL性能优化及容量预测的落地路径。文档共1个docx文件包体约580KB正文按当前智能运维现状、数据库运维挑战、平台实践等章节展开重点覆盖洞察整体运行情况、异常定位与检测算法、指标关系模型、一键智能分析、SQL性能分析、故障预测与容量预测等内容适合作为银行数据库智能化改造的参考蓝本或汇报材料。目前已有113人学习内容源自真实银行项目经验既能帮助理解AIOps在数据库场景的具体做法也可为同类金融机构规划智能运维体系提供框架性借鉴。 干了十年银行数据库运维见过凌晨三点的机房也经历过核心库宕机时业务方连环夺命call。今天想聊聊我们团队去年落地的一个项目——银行数据库智能运维平台建设。这个项目的核心目标就一句话把数据库运维从人肉盯监控、半夜跑脚本的状态逐步推向系统自动感知、自动诊断、辅助决策的智能化方向。如果你也在银行或者金融机构做数据库运维、SRE或者DevOps相关工作这篇东西应该对你有参考价值。1. 项目背景银行数据库运维到底难在哪1.1 传统运维模式的真实困境在银行这个场景里数据库不只是存数据的软件它是账务系统的命根子。核心交易库、支付结算库、信贷系统库任何一次抖动都可能引发业务投诉甚至监管关注。传统运维模式的问题我总结下来是这几点监控指标碎片化。主机监控一套、数据库监控一套、中间件监控又一套告警口径不统一出了问题要在多个平台之间来回切换一个故障的定位链路往往要跨三四个系统才能拼出全貌。告警风暴严重。我们当时接入了600多套数据库实例一个晚上能产生2000多条告警其中大量是重复告警和无效告警真正需要人工介入的可能就三五条。值班DBA每天被海量告警淹没反而容易漏掉真正重要的那一条。知识经验个人化。老DBA的脑子就是个知识库哪个库有什么脾气、哪个时间段跑什么批处理任务全靠个人记忆。人一旦休假或者离职这些隐性知识就断层了。更要命的是很多经验是只可意会不可言传的靠文档根本沉淀不下来。响应速度跟不上业务预期。业务方要求故障恢复时间在分钟级甚至秒级但人工排查链路是接到告警-登录跳板机-逐台检查-定位根因-执行处置这一套下来半小时是常态。遇到跨机房、跨网络的复杂问题一两个小时也很正常。1.2 为什么需要平台而不是工具很多人会把上套监控工具等同于建设运维平台这是两码事。工具解决的是看得到的问题平台解决的是管得住的问题。银行需要的不是一个能画曲线图的系统而是一个能覆盖感知-诊断-决策-执行全链路的自动化体系。感知是指标采集和异常发现诊断是根因分析决策是处置方案的生成与审批执行是变更动作的下发和验证。这四个环节缺一个智能运维就是空话。所以这个项目从立项开始我们就定了目标不是做一个炫酷的监控大屏而是构建一个能真正辅助DBA日常工作的作业平台。核心指标有三个一是告警准确率提升、二是故障定位时间缩短、三是重复性运维工作自动化率提升。这三个指标贯穿整个建设过程每个阶段都拿它们来验收。2. 平台架构设计与技术选型的底层逻辑2.1 整体架构分层解耦不搞铁板一块我们最终确定的架构分为五层采集层、存储层、分析层、决策层、执行层。这里有个原则——分层解耦每层之间通过标准接口通信避免做成一个耦合度极高的大单体。采集层优先采用agentless方式。银行对生产主机的管控非常严格安装agent需要走安全审批还得考虑agent自身对主机资源的占用。所以对于Oracle、MySQL、PostgreSQL、国产数据库达梦、GaussDB我们都优先走数据库自身的协议做采集。实在采不到的系统指标再考虑在独立旁路机器上部署采集器。存储层指标类数据进时序库我们最开始用InfluxDB后面因为国产化要求换成了TDengine日志类数据进Elasticsearch告警、工单、元数据等结构化数据进MySQL。各归其位不混用。这里要特别强调千万不要把指标数据塞进关系型数据库数据量上来之后查询性能会让你怀疑人生。分析层用Flink做流式处理把异常检测算法跑在数据流上实现秒级检测。批处理部分用Spark做离线分析比如慢SQL聚合、容量趋势预测。流批分离的好处是实时任务和离线任务互不干扰各自按需扩展。决策层规则引擎兜底加算法模型提升准确率。规则引擎我们用的Drools负责处理明确已知的场景比如连接数超阈值、主从延迟过大。算法模型负责处理不确定的场景比如基于时序数据的异常检测、容量趋势预测。执行层对接工单系统、脚本执行通道、消息通知网关。所有变更动作留痕支持一键回滚。这一层在银行环境里必须做到全程可审计每一步操作都要能追溯到人和时间点。当时选这个架构考虑的是银行环境的特殊性网络隔离严格、安全合规要求高、数据库种类多且版本杂。分层的好处是某一层出问题不影响其他层而且未来替换某个组件时影响面可控。比如我们把InfluxDB换成TDengine只动了存储层上层分析逻辑完全不用改。2.2 关键选型为什么没有直接买商业产品立项之初我们也考察了几款成熟商业产品。功能确实全界面也好看但实际用起来有几个绕不开的问题第一黑盒。商业产品的告警算法和诊断逻辑是封死的出了问题你只能提工单等厂商回复没法自己排查。银行的环境太复杂我们需要的是一套能看得懂、能改得动的系统。第二国产化适配滞后。当时我们的规划里已经确定了要逐步把数据库迁移到达梦、GaussDB等国产库上商业产品对国产数据库的适配普遍滞后很多高级功能用不上。比如有个产品Oracle支持得特别好但切到达梦之后连基本的采集都跑不通。第三二开成本和License费用加起来并不便宜。与其每年付高昂的服务费不如自研一套贴合自身场景的平台。当然自研也有自研的代价——周期长、需要养团队、踩坑要自己扛。所以我的建议是如果你的场景相对简单、数据库种类单一买商业产品没毛病但如果像我所在的银行一样数据库种类多、监管要求高、未来方向不确定自研是值得投入的。前提是团队里至少有两三个能扛事的技术骨干否则项目容易烂尾。3. 核心功能模块的实现与关键算法3.1 智能告警从静态阈值到动态基线传统告警的痛点在于静态阈值。比如连接数告警阈值设在500业务高峰时阈值明显不够用低谷时又太敏感。我们做了动态基线告警来解决这个问题。具体做法对每个指标取过去N天同时段的数据做周期分解用的STL算法拆成趋势项、周期项、残差项。用残差的标准差σ作为波动范围的度量。当实时值偏离基线超过3σ时触发告警。这里有一个计算细节基线窗口默认取14天每天凌晨2点重算一次避开业务高峰期的数据冲击。新接入的实例前两周只采集不告警等积累了足够的历史数据再启用基线告警。落地中需要注意的几个点数据清洗必须先做。变更窗口、维护窗口产生的数据如果混进基线的训练集基线会被污染。我们专门维护了一个黑名单时间段配置把每周的变更窗口、每月的批次任务时间都标注出来。特殊日期要能打标签。比如双十一、年终结算日业务量是平时的好几倍基线告警这时候必然误报。我们做了特殊日期白名单机制遇到这类日期自动切换到弹性阈值模式。动态基线不是万能的。对于突发性的短时尖峰基线检测有天然延迟需要配合瞬时阈值做兜底。比如某个指标超过固定上限的2倍直接告警不等基线判断。动态基线上线后告警量下降了约70%。这个数字很能说明问题——不是我们的系统比以前稳定了而是无效噪音被过滤掉了真正需要人看的告警才推出来。3.2 自动巡检把DBA从深夜解放出来传统巡检模式是DBA半夜起来跑脚本、看报告遇到异常还得翻历史记录对比。我们做的自动巡检核心是任务编排加智能报告解读。平台每天凌晨自动执行巡检脚本覆盖124个检查项包括实例存活状态、会话数、连接数、锁等待、死锁检测、慢SQL数量、表空间使用率、备份是否成功、主从复制延迟、归档日志空间等。巡检脚本按数据库版本分分支维护避免出现同一份脚本在11g上能跑、在12c上报错的尴尬。巡检结果的呈现方式也很关键。一开始我们做的是把所有检查项的结果全列出来DBA看十页报告才能确认没问题。后来优化成只报异常模式正常项折叠起来异常项按严重级别排序自动生成处置建议。比如某个表空间使用率超过85%系统直接给出扩容SQL语句和操作步骤DBA确认后就能执行。3.3 SQL审核与变更执行把管控前置银行对数据库变更的管控极其严格变更窗口通常每周只有一次漏一次就得再等一周。传统的SQL审核靠DBA人工review效率低且依赖个人经验。我们把SQL审核前置到了开发阶段平台接入CI/CD流水线开发提交SQL脚本后自动进行解析和评估。具体实现上我们基于各数据库的解析器做了SQL语法树分析提取关键信息后给出风险评分。评分维度包括是否全表扫描、是否大事务、是否涉及锁表、影响行数预估、是否有DDL变更等。例如一条UPDATE语句如果预估影响超过100万行风险评分直接拉满提示必须走审批流程并且分批执行。这里有个实践经验要分享SQL审核的关键不是卡而是导。如果只是生硬地打回开发同学的脚本协作关系会越来越僵最终规则也会被绕过。我们做了审核建议功能对每一条风险SQL自动给出优化建议比如增加索引idx_user_id可避免全表扫描预计扫描行数从100万降到1000。开发同学看到的是有帮助的建议配合度自然就高了。3.4 故障自愈半自动比全自动更符合银行气质故障自愈是这个平台里最敏感、也最难做的模块。银行体系的风格是稳字当头完全自动化执行变更操作出了问题没人愿意承担责任。所以我们没有做全自动处置而是做了半自动模式平台自动诊断出根因生成处置建议推送给值班DBADBA一键确认后执行。这个策略非常明智。全自动处置在银行环境下大概率过不了安全评审半自动模式既保留了人的决策权又大幅缩短了处置链路。比如检测到主从切换场景平台自动检查备库延迟、数据一致性、切换脚本有效性给出建议切换或不建议切换的结论并附上依据DBA确认后点击执行整个切换过程脚本自动完成并附上切换日志。4. 落地实施全过程与踩坑记录4.1 分阶段推进别想一口吃成胖子平台建设最忌讳的是一步到位。我们分了三个阶段推进第一阶段1-3个月打通数据采集和统一监控目标是看得见。把所有数据库实例的指标、日志、告警统一接入平台搭建监控大盘。这个阶段不追求智能先把数据地基打牢。第二阶段4-8个月上线智能告警、自动巡检、SQL审核目标是管得住。这个阶段开始引入算法能力同时推动开发团队接入SQL审核流程改变原有的变更习惯。第三阶段9-12个月试点故障自愈和容量预测目标是少出事。在核心库之外的非核心系统上试点自愈能力验证稳定后再逐步扩大范围。这个节奏我们自己拿捏过很多次总的原则是每一阶段都要有可量化的成果落地否则项目很难拿持续投入。第一阶段结束的时候我们给领导看的是监控覆盖率和告警集中度两个指标第二阶段结束的时候给了告警量下降和审核拦截率的数据第三阶段结束给了故障定位时间变化。有了这些数字后续资源争取就顺畅很多。4.2 采集层踩过的坑采集是整个平台的数据基础这一层出的问题最多我单独拎出来说。第一个坑是采集账号权限。银行对数据库账号管控很严DBA权限不能随便给采集程序。我们和运维安全团队反复对齐最终确定了一个最小权限集合连接权限、查询动态性能视图权限、查询系统表权限全部只读。这个看似简单的事情协调了快一个月。建议在项目一开始就把权限清单拿出来找安全团队评审别等部署阶段再卡壳。第二个坑是采集频率和性能开销的平衡。采集频率太高会影响生产库性能太低又满足不了实时性要求。我们最终的方案是关键指标连接数、CPU、会话数秒级采集普通指标表空间、慢SQL分钟级采集全量巡检类采集放在凌晨批次执行。实测下来对生产库的性能开销控制在5%以内。第三个坑是时钟同步。跨机房部署时各节点时间不一致会导致数据错乱比如告警时间线和日志时间线对不上定位问题时特别痛苦。解决办法是在所有采集节点和数据库主机上统一配置NTP时钟同步并且每天做一次时间偏差检查。4.3 组织协同的阻力技术问题好解人的问题难解做这种平台最大的阻力往往不是技术是组织和流程。我遇到的核心阻力有三个一是DBA的抵触情绪。不少DBA担心平台上线后自己的价值被削弱甚至被取代。我的处理方式是让DBA深度参与平台设计把他们的经验和方法论沉淀到平台的规则和算法里。当DBA发现平台是自己教出来的抵触情绪自然消散还会主动贡献自己的经验。二是运维团队的流程阻力。平台要接入变更流程、审批流程这必然动了原有流程的奶酪。我的做法是找运维流程负责人做结对改造让流程负责人参与到平台流程设计里确保平台流程跟现有制度兼容而不是冲突。三是开发团队的配合问题。SQL审核刚推的时候开发团队意见最大觉得流程变慢了。我们调整策略后先跟几个核心开发团队做对齐把审核规则一条条摆出来讨论能优化的优化能合并的合并。第一批跑通之后开发同学看到审核建议确实能帮他们提前发现潜在问题配合度明显提升。5. 常见问题排查与效果复盘5.1 常见问题速查表平台上线大半年我把遇到最多的几类问题整理成速查表方便后面接手的人快速定位现象可能原因解决方法指标数据出现断点采集账号密码过期或权限被回收建立密码自动轮转机制定期核对账号权限告警延迟超过1分钟消息队列消费堆积增加消费者组并行度监控消费Lag基线告警误报频发遇到业务突发活动或新系统上线维护特殊日期白名单人肉打标签巡检脚本偶发报错数据库版本差异或参数不一致按版本维护脚本分支做好版本管理自愈任务执行失败操作账号权限不足或回滚脚本有误上线前在预发环境做完整演练保留手工介入通道这张表看着简单每一条都是实际踩坑踩出来的。比如密码轮转这个事刚开始没做结果某个采集账号密码过期导致一个分区的监控数据断了三天。后来我们接入了密码管理平台做自动轮转这个坑才彻底填上。5.2 上线后的真实效果数据平台上线一年几个核心指标的变化拿出来晒一晒都是真实数据告警量下降约70%。从日均2000多条降到600条左右DBA不再被噪音淹没。故障平均定位时间从40分钟缩短到10分钟以内。主要归功于根因分析模块系统能把关联指标自动串起来比如连接数飙升的同时锁等待和慢SQL也在涨平台会自动提示疑似慢SQL引发连接池耗尽而不是让人逐个指标排查。日常巡检人工投入每周节省约8人时。自动巡检报告代替了DBA手动跑脚本和翻看结果。SQL审核提前拦截了约15%的高风险变更。这个数字听着不高但每拦截一次可能就避免一次生产事故。5.3 几点真实体会最后聊几句心里话。运维平台建设技术只占一半另外一半是管理、流程和人心。算法再牛如果采集数据不准、流程不顺畅、DBA不愿意用平台就是摆设。自动化的前提是标准化标准化前提是流程梳理。所以我的建议是先别急着上算法、上AI先花时间把每一个运维场景的流程捋清楚搞清楚每一步的输入、输出、负责人、审批条件再去做自动化。故障自愈这种事情银行场景里做成半自动是最优解别追求全自动。平台给出建议、人来拍板既可靠又安全责任归属也清晰。最后再分享一个小技巧平台的告警推送一定要分级。一级告警影响业务走短信加电话二级告警潜在风险走企业微信三级告警周期性问题走邮件日报。如果不分级所有告警都一个渠道推送用不了多久大家就麻了真正的重大故障也被淹没。本文还有配套的精品资源点击获取