这个项目我投了,给 OB 数据库诊断提提速!

2024年 5月 6日 67.0k 0

1. 前言

昨天晚上公司内部直播分享了一下OceanBase敏捷版诊断工具obdiag,主要的目的是拉齐一下前线和后端开发人员的诊断OceanBase问题的信息,众人拾柴火焰高,大家一起把obdiag做起来。晚上回去想了想,obdiag既然是开源项目,除了原厂的这些人的经验,社区的力量也是不容忽视的,所以写下此文章,诚邀大家一同来共建obdiag。

OceanBase敏捷诊断工具相关链接:

github仓库 https://github.com/oceanbase/oceanbase-diagnostic-tool
rpm包下载 https://www.oceanbase.com/softwarecenter
文档链接 https://www.oceanbase.com/docs/obdiag-cn

2. obdiag简介

obdiag是一款为OceanBase量身定制的敏捷版诊断工具,有如下的特点:

这个项目我投了,给 OB 数据库诊断提提速!-1

这个项目我投了,给 OB 数据库诊断提提速!-2

3. OceanBase诊断三板斧

有了obdiag之后,OceanBase数据库诊断可以总结为三步走策略,也就是我说的三板斧。第一步先来一次obdiag 巡检,可以帮你把问题扫出来,会生成一份巡检报告,按照报告把对应的点解决一下,如果问题还没解决;第二步,obdiag进行日志分析或者根因分析,找出问题的原因;如果第二步还没解决;直接第三步,一键收集诊断信息,当然这一步也可以放到一开始的时候做,避免故障场景转瞬即逝。

这个项目我投了,给 OB 数据库诊断提提速!-3

3. obdiag使用

这个项目我投了,给 OB 数据库诊断提提速!-4

这个项目我投了,给 OB 数据库诊断提提速!-5

主体功能一键巡检、一键根因分析、一键信息采集、一键日志分析等请移步官网文档:  https://www.oceanbase.com/docs/obdiag-cn

4. obdiag设计与实现

这个项目我投了,给 OB 数据库诊断提提速!-6

代码整体结构:

├── common/ 一些通用的功能抽取到common目录下,便于其他模块调用
├── conf/ obdiag的内置的配置文件,编译的rpm包安装的时候放在了/usr/local/oceanbase-diagnostic-tool/conf
│   └── inner_config.yml
├── dependencies/ 依赖的包,比如obstack的二进制文件等存放的目录
├── docs/ 文档
├── example/ 用户侧配置样例,安装后会放在~/.obdiag/example/
├── handler/ 诊断核心代码
│   ├── analyzer/ 一键诊断分析功能
│   │   ├── analyze_flt_trace.py 全链路分析代码
│   │   ├── analyze_log.py 日志分析代码
│   │   └── log_parser/ 日志解析
│   ├── checker/ 一键巡检的代码
│   │   ├── check_exception.py 巡检异常处理的代码
│   │   ├── check_handler.py 巡检模块的代码入口,调用从这出发
│   │   ├── check_list.py 巡检场景列表展示的代码
│   │   ├── check_report.py 巡检报告代码
│   │   ├── check_task.py 巡检任务分发
│   │   ├── result/ 巡检结果处理
│   │   │   ├── result.py
│   │   │   └── verify.py
│   │   ├── step/ 巡检步骤拆解
│   │   │   ├── get_system_parameter.py
│   │   │   ├── sql.py
│   │   │   ├── ssh.py
│   │   │   └── stepbase.py
│   │   └── tasks/ 实际的巡检的yaml,开发者可以再这个目录下添加巡检场景
│   │       ├── obproxy/
│   │       └── observer/
│   ├── gather/ 一键收集功能
│   │   ├── gather_awr.py awr报告收集代码
│   │   ├── gather_log.py 日志收集代码
│   │   ├── gather_obadmin.py 解析clog/slog的代码
│   │   ├── gather_obproxy_log.py 收集obproxy代码
│   │   ├── gather_obstack2.py 收集堆栈信息的代码
│   │   ├── gather_perf.py 收集火焰图的代码
│   │   ├── gather_plan_monitor.py 收集并行SQL的代码
│   │   ├── gather_scenes.py 场景化收集的入口代码
│   │   ├── gather_sysstat.py 收集主机信息的代码
│   │   ├── scenes/ 场景化信息采集的处理代码
│   │   │   ├── base.py
│   │   │   ├── cpu_high.py cpu高场景
│   │   │   ├── list.py 场景列表展示的代码
│   │   │   ├── register.py 硬编码场景注册代码
│   │   │   └── sql_problem.py sql问题采集的代码
│   │   ├── step/ 场景化采集的执行器
│   │   │   ├── base.py 
│   │   │   ├── sql.py sql执行器
│   │   │   └── ssh.py ssh执行器
│   │   └── tasks/ 收集场景的yaml文件
│   ├── meta/ 一些元信息存储的文件夹,比如错误码对应关系
│   └── rca/ 根因分析文件夹
│       ├── rca_exception.py 异常处理
│       ├── rca_handler.py 根因分析的入口
│       ├── rca_list.py 根因分析场景列表展示代码
│       └── rca_scene/ 根因分析场景
│           ├── disconnection_scene.py 断连接场景代码
│           ├── lock_conflict_scene.py 锁冲突场景代码
│           ├── major_hold_scene.py 合并卡住场景的代码
│           └── scene_base.py
├── main.py 整个项目的入口
├── cmd.py 命令行注册解析
├── config.py 用户侧配置文件以及系统配置文件解析和生成
├── core.py 被main.py调用,调用对应诊断模块
├── context.py 封装context,透传到各个诊断模块的上下文全靠这部分能力来实现
├── stdio.py 日志打印、动画、进度条等打印相关
├── obproxy_check_package.yaml
├── observer_check_package.yaml
├── resources/ 一些css资源
├── rpm/ 打rpm包的文件夹
├── telemetry/ 遥测功能
├── test/ 测试模块
└── update/ 热更新代码

这个项目我投了,给 OB 数据库诊断提提速!-7

详细开发者文档请参见: https://oceanbase.yuque.com/org-wiki-obtech-vh7w9r/imzr6c/or82ioetg06ta27e

5. 场景共建

这个项目我投了,给 OB 数据库诊断提提速!-8

这个项目我投了,给 OB 数据库诊断提提速!-9

这个项目我投了,给 OB 数据库诊断提提速!-10

这个项目我投了,给 OB 数据库诊断提提速!-11

6. 未来规划

这个项目我投了,给 OB 数据库诊断提提速!-12

7. 写在最后

大道至简,最简单的才是最有用的,诚邀大家一同共建OceanBase数据库诊断。

相关文章

Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库
27 期 | 死锁(3)解决死锁

发布评论