提质增效:去哪儿网数据库巡检报警系统优化之路
目录
一 前言
二 巡检系统优化历程
2.1 面对的问题
2.2 优化之路
2.2.1 优化方案设计
2.2.2 方案实施
三 告警系统优化历程
3.1 面对的不足
3.2 优化之路
四 优化效果
五 未来展望
作者介绍
刘鹏飞,2021年4月加入去哪儿网DBA团队,主要负责公司的MySQL的管理和运维,以及数据库的自动化平台开发。具有多年的数据库管理和优化经验。
一 前言
原巡检系统在巡检内容上过于狭窄,仅涵盖了主机层面的磁盘使用情况和集群实例的表和索引相关问题,而忽略了集群实例负载和性能相关的关键指标。这意味着系统无法及时发现潜在的性能瓶颈或负载问题,从而无法提前预警或采取措施来避免潜在的风险。 原巡检系统缺乏对巡检上来的信息进行风险等级划分的机制。这导致用户无法准确判断集群实例的风险程度,以及风险点在哪里,风险等级是高还是低。这样的缺陷使得用户无法采取针对性的措施来降低或消除风险,从而可能对系统的稳定性和可用性造成严重影响。
首先,需要扩展巡检内容,增加对集群实例负载和性能相关指标的检测和评估。 其次,需要引入风险等级划分的机制,以便准确判断集群实例的风险程度和风险点,从而采取相应的措施来降低或消除风险。
指标健全
指标分类
指标分级
综合研判
实例级巡检报告
活跃线程巡检报告
agent 端每隔 2s 循环抓取 information_schema.processlist 的数据,去除特定状态的线程后,总数据量和 Threads_running 状态值就能相互对应;
若上面抓取数据的总量超过设定的阈值就将抓取的 information_schema.processlist 信息全量的推送到巡检记录数据库;
server 端循环分析上报上来的 information_schema.processlist 信息:计算 SQL 指纹和 MD5 值-->按照 MD5 直进行 SQL 分类-->计算出 SQL 总执行时间和最大执行时间;
分析结果呈现,形成报告:
① 巡检报告汇总:可以对部门、集群、实例等进行筛选。 ②具体实例的活跃线程记录:可以查看活跃线程异常值和对应的出现时间点。 ③活跃线程详情:分析处理哪类 SQL 并发高,总执行时间,最大执行时间等。点击最后一列的查看操作按钮能查看具体 SQL 的执行状态(这里不再展示)。 通过对活跃线程的监控分析能快速定位引起并发异常的问题原因所在,是集群性能下降、慢查询还是应用端没有控制好请求并发导致的问题,一目了然。从而也能很好的回答 DBA 经常被问到一个问题:我的应用日常执行这些 SQL 不慢,人为测试执行一次也非常快,为啥有时突然就成了慢查询? 意外惊喜:通过对活跃线程的监控分析,我们还发现在很多活跃线程异常高的时刻都伴随着删除用户和授权的操作。通过进一步分析发现, MySQL 的删除用户、创建用户、授权和回收权限操作具有较高的优先权,在同一时刻,这些操作会优先被执行,获取线程资源。去哪儿网 MySQL 数据库用户授权方式使用的是具体 IP 授权,在每次应用发布和扩容时都会伴随着大量的删除用户、创建用户和授权操作,这些操作就会导致 MySQL 的线程资源短时无法被正常应用获取到,从而导致活跃线程异常升高的现象。为此,我们和 TC 组合作进行了授权方式的改造和优化,消除了这种情况导致的异常。
慢查询巡检报告
数据库扫描行数巡检报告
三 告警系统优化历程
3.1 面对的不足
之前的告警系统能满足基本的日常告警需求,但是也存在几个比较突出的问题:
无效告警繁多:虽然对告警项做了分级,但是依然会发送告警消息,导致消息太多,造成日常干扰。
动态调整低效:在计划性维护前,对数据库告警不能进行有效的事前静默,且告警屏蔽维度设置不足。
自动化覆盖率低:对于异常告警不能抓取问题时刻的现场信息,不能自动分析原因,导致告警处理速度较慢,问题定位有时会出现偏差。
告警报表缺失:没有一个成熟的告警平台展示告警数据的变化趋势,多维度统计分析告警分布情况。
3.2 优化之路
针对告警系统的不足,参考其他告警系统的优势,对我们的告警系统采取了三个方向的优化:
(一)告警降噪
分级处理
重新设定告警阈值,将告警项根据不同的阈值依然划分成 WARNING,CRTICAL 和 CALL 级别,对于 CALL 级别以下的告警,仅做记录,不再发送消息,而对 CALL 级别告警会通过 QT 消息和电话两个通道进行通知,从而减少 CALL 级别以下的无效告警通知,提高了值班人员对重要紧急告警的专注度和处理速度。动态屏蔽
在一些计划维护,故障处理等场景中,可以对集群、实例、特定告警项设置告警屏蔽起止时间,屏蔽时长等,消除了计划性维护时和故障处理期间的“无效”告警。定制阈值
不同应用使用数据库会有些许区别,且高峰时间段也不尽相同,所以优化后的告警系统,能对集群或者实例告警项的阈值和生效时间灵活设置。
(二)告警处理
一键拉群
在告警通知卡片中点击“一键拉群”,可以自动创建 Qtalk (内部办公IM软件)群聊,并将告警信息和分析结果发送到相应群聊里。自动处理
部分告警项根据告警内容设置自愈方案,只需 DBA 确认即可,无需过多人工介入。如主从复制中断的一些场景,磁盘可用空间不足的场景,慢查询和长事务查杀的场景等。根因分析
对于不同的告警项设置不同的自动抓取规则,在告警时刻会对实例的状态指标和运行的 SQL 自动抓取和分析,并将分析结果呈现到告警卡片中。其主要实现如下:
告警问题分类:根据告警项监控内容将告警分类,从而指定不同的信息采集规则; 实例信息采集:根据告警项命命中的采集规则,采集实例相应的状态参数和当前线程执行情况 SQL 的状态;
状态自动分析:将采集到的信息进行综合分析,判断可能的问题原因。是 PXC 流控导致,还是半同步退化导致,亦或长事务或者锁等待导致等;
分析结果呈现:将分析结果以报告形式呈现给 DBA ,协助 DBA 进行处理。在告警卡片中 DBA 点击相应按钮即可查看分析报告。
去哪儿网的 MySQL 集群大量的使用 PXC 架构,集群发起流控或者某一个节点性能严重抖动时,集群中的其他节点性能也就会受到严重影响,造成性能急剧下滑,自动根因分析功能能高效的识别这种情况,避免了 DBA 繁琐的去分析各个节点的指标来查找原因。
(三)告警运营
告警检索:告警平台提供了历史和当前告警的检索功能,支持按不同条件查询告警信息的需求
告警看板:通过对所有告警的聚合分析,告警平台支持了从不同视角展示告警数据的变化趋势,多维度统计分析告警分布情况。
另外告警运营相关功能和数据库巡检形成相互补充,进一步提高数据库日常风险排查效率。
持续提升处理效率:丰富自动根因分析的使用场景,持续优化相关分析规则,从仅在数据库实例层的分析扩展到相关主机层的自动分析,为故障定位提供更多的因素参考,并增加一定的自动处理和优化措施,从而使故障处理效率再次提升。 告警降噪:根据集群中实例之间的关系,告警可以进行合并,减少冗余信息,可以更加清晰地了解数据库集群各个节点的健康状态,快速定位问题所在。 提升告警配置效率:借助DBA自助机器人功能,告警配置可以变得更加智能化和高效,甚至可以根据不同的集群情况实现不同阈值的定制化配置,大大提高了配置效率和准确性。
以上就是本次分享的所有内容啦!
最后,给大家带来一些岗位招聘信息。
你与驼厂只差一份简历的距离
快扫码投递吧!
划重点啦!
内推投递可添加小助手微信(qtsalon)跟进进度呦!