分布式数据库的运维和管理比传统的集中式数据库复杂得多 ,虽然OceanBase提供了OCP这样强大的白屏运维工具,但是OCP还是很难覆盖用户日常运维中的一些复杂场景,特别是故障诊断、根因分析等需要大量运维经验,需要运维专家甚至原厂研发介入的工作。我一直认为要把OceanBase数据库用好,或者在核心系统中稳定运行OceanBase,除了OCP,还需要一款迭代速度比较快,能够进行诊断分析,辅助专家工作的工具。
一年前 ,靖顺和我谈起一个OB的运维辅助工具,obdiag。当时我们正在开发D-SMART的OceanBase专版,发现这个工具在某些功能上和我们要干的事情有些相似,于是我接受了邀请,参加了这个开源项目。一年过去了,前几天obdiag V2.3正式发布了。obdiag从一个仅仅能够帮助DBA采集日志的小工具发展成了目前这样一个功能强大的工具,目前也有越来越多的开发者加入到这个项目里。

在这一年时间里,在靖顺、谷渐等蚂蚁的同学的努力工作下,obdiagd的功能迭代得十分迅速,功能已经初步成形了。目前D-SMART也完成了与obdiag的集成。基石数据的小伙伴们也喜欢上了这款 工具,并开始加入到 开发者的行列里,希望为这款工具贡献一些力量。

上面这张图可以十分形象地描述obdiag的主要功能与应用场景。当OB用户遇到一些疑难杂症无法解决的时候,可能需要和专家或者原厂工程师进行沟通。在缺乏工具的情况下,这种沟通是十分低效的。因为OB是一种十分复杂的分布式数据库,故障可能来自于硬件环境、网络、服务器配置、数据库参数配置、应用等多个方面。哪怕要帮助专家把他们分析问题所需要的日志和指标数据都收集齐了,也一件十分难以完成的任务。对于一些对 OB不是那么熟悉的小白DBA来说,每一次这样的故障分析都是一场灾难。
有了 obdiag就简单多了,利用obdiag的一键集群巡检、一键诊断分析和 一键根因分析就能够自动帮你分析一些简单的问题 ,一些比较明显的数据库问题 ,这几个工具就能帮你指出问题所在了。如果你自己还看不明白工具输出的结果,可以把生成的报告发给远程的专家,由专家帮你分析。如果专家需要一些其他的数据,通过“一键信息收集”工具就可以轻松搞定了。

obdiag的信息收集分为常规收集和场景化收集两种类型。常规收集可以通过gather命令来收集日志、主机信息、clog/slog等日志,以及OS的stack/perf数据等 。还可以 采集ash数据,用于更为复杂的分析。

场景化收集可以帮助用户采集一系列场景的信息,因为obdiag里已经内置了大量的专家经验,因此场景化收集的时候会根据场景的不同采集大量个性化的数据。

一键诊断可以实现OceanBase数据库的日志诊断,flt_trace功能提供了一个全链路诊断的工具,这是一个十分有用的工具。如果你发现某条SQL执行效率存在问题 ,通过flt_trace的输出可以了解到这条SQL执行的全链路上的各种时间消耗和等待。另外一键诊断还提供了参数和集群变量分析功能,如果你不小心做了错误的配置,这个工具可以帮你快速分析。flt_trace是obdiag中举中真正帮到我的第一个工具,帮我定位了一个比较复杂的OB SQL性能问题。

通过RCA命令可以实现很多故障和性能问题的根因分析,V2.3里已经提供了12种场景的根因分析功能。目前obdiag的RCA功能与D-SMART在做一定的打通,我们也准备将D-SMART里的RCA场景迁移到obdiag中,每个场景功能被提出时,团队都会与OB运维专家以及OB数据库研发团队做十分细致的沟通,尽可能让RCA能力覆盖最全面的场景。
目前RCA这个功能也是目前发展比较快的,如果你有一些RCA的功能需求和建议,也可以在社区留言,共同探讨如何把这些场景做得更好。

obdiag是一个黑屏运维工具,不过目前我们的D-SMART已经集成了obdiag的功能。我们也正在对obdiag的分析报告做二次加工,结合D-SMART里采集的历史数据,让obdiag的分析功能更加全面。
看到这里,对obdiag有兴趣的朋友,可以去github或者oceanbase官网看看,了解一下这个挺有用的小工具。
https://github.com/oceanbase/obdiag
https://www.oceanbase.com/docs/obdiag-cn




