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

1. 前言

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

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

github仓库GitHub - oceanbase/oceanbase-diagnostic-tool: OceanBase Diagnostic Tool is designed to help OceanBase users quickly gather necessary information and analyze the cause of the problem.
rpm包下载OceanBase分布式数据库-海量数据 笔笔算数
文档链接OceanBase分布式数据库-海量数据 笔笔算数

2. obdiag简介

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

1713232845

1713233292

3. OceanBase诊断三板斧

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

1713233368

3. obdiag使用

1713233901

1713233945

主体功能一键巡检、一键根因分析、一键信息采集、一键日志分析等请移步官网文档:  OceanBase分布式数据库-海量数据 笔笔算数

4. obdiag设计与实现

1713234111

代码整体结构:

├── 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/ 热更新代码

1713234166

详细开发者文档请参见: obdiag项目开发手册(新) · OceanBase 技术交流

5. 场景共建

1713234268

1713234292

1713234318

1713234422

6. 未来规划

1713234569

7. 写在最后

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/548538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SiLM5350系列带米勒钳位的单通道隔离驱动器 助力汽车与工业应用实现稳定与高效的解决方案

带米勒钳位的隔离驱动SiLM5350系列 单通道 30V,10A 带米勒钳位的隔离驱动 具有驱动电流更大、传输延时更低、抗干扰能力更强、封装体积更小等优势, 为提高电源转换效率、安全性和可靠性提供理想之选。 SiLM5350系列产品描述: SiLM5350系列是单通道隔离驱…

[入门]测试原则-ApiHug准备-测试篇-002

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 写在前面…

GT资源-CPLL QPLL

一、前言 QPLL与CPLL是两种为GT Channel提供时钟的锁相环,其中CPLL与GT Channel绑定,每一个通道都有一个CPLL,而QPLL是与Quad绑定,每一个Quad有一个QPLL,4个通道共享一个QPLL 二、CPLL 每个GTX/GTH收发器通道包含一…

luigi,一个超级厉害的 Python 库!

什么是 Python Luigi? Python Luigi 是一个用于构建复杂数据处理管道(工作流)的Python模块。Luigi由Spotify开发并维护,旨在简化和管理大规模数据处理任务的执行。 关键特点包括: 1.任务定义: Luigi允许…

TypeError: Cannot read properties of undefined (reading ‘tapAsync‘)

项目启动,一直报tabAsync未定义,整个项目中没有找到引用的地方; 最终重新安装webpack4版本 解决问题; npm install webpack4

【重回王座】ChatGPT发布最新模型gpt-4-turbo-2024-04-09

今天,新版GPT-4 Turbo再次在大型模型排行榜上荣登榜首,成功超越了此前领先的Claude 3 Opus。另外,新模型在处理长达64k的上下文时,性能竟能够与旧版在处理26k上下文时的表现相当。 目前GPT-4 Turbo仅限于ChatGPT Plus的用户&…

苍穹外卖项目总结1-12

苍穹外卖 文章标题地址苍穹外卖Day01——总结1https://lushimeng.blog.csdn.net/article/details/135466359苍穹外卖Day02——总结2https://lushimeng.blog.csdn.net/article/details/135484126苍穹外卖Day03——总结3https://lushimeng.blog.csdn.net/article/details/1363788…

PyTorch与深度学习:探索现代神经网络的魅力

在科技飞速发展的今天,深度学习作为人工智能领域的重要分支,已经在图像识别、自然语言处理、语音识别等多个领域取得了突破性的进展。而PyTorch,作为一款开源的深度学习框架,以其简洁易用、动态计算图等特性,赢得了广大…

修改百度百科的条件

百度百科,作为全球最大的中文百科全书,每天吸引着无数用户前来浏览和编辑。然而,要修改百度百科的内容,并非易事。本文将详细介绍修改百度百科的条件,帮助有志于参与编辑的用户更好地了解并做好准备。 1. 注册百度账号…

2024 计算机毕业设计之SpringBoot+Vue项目合集(源码+L文+PPT)

各位朋友大家好,有幸与屏幕前你们相识,博主现已经搬砖9年,趁着头发还充裕,希望给大家提供一些编程领域的帮助,深知计算机毕业生这个阶段的崩溃与闹心,让我们共同交流进步。 博主给大家列举了项目合集&#…

Springboot+Vue项目-基于Java+MySQL的房产销售系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

【从浅学到熟知Linux】进程控制上篇=>进程创建、进程终止与进程等待(含_exit与exit的区别、fork函数详解、wait与waitpid详解)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程创建fork函数写时拷贝 进程退出进程退出操作系统做了什么?进程退出场景进程退出的常见方法…

Vue3 + Element-Plus 使用 Table 预览图片发生元素遮挡

Vue3 Element-Plus 使用 Table 预览图片发生元素遮挡 问题代码问题重现解决方法最终效果 问题代码 <el-table-column label"视频" align"center"><template #default"scope" style"display: flex;"><div style"…

【RV1106的ISP使用记录之基础知识】硬件连接关系与设备树的构建

RV1106具备2个mipi csi2 dphy硬件&#xff0c;1个VICAP硬件和1个ISP硬件。其中&#xff1a; 1、mipi csi2 dphy 用于对数据流的解析&#xff0c;支持MIPC,LVDS,DVP三种接口&#xff1b; 2、VICAP用于数据流的捕获&#xff1b; 3、ISP用于对图像数据进行处理&#xff1b; 这三个…

架构设计-灰度发布系统架构设计

灰度发布的定义 互联网产品需要快速迭代开发上线&#xff0c;又要保证质量&#xff0c;保证刚上线的系统&#xff0c;一旦出现问题可以很快控制影响面&#xff0c;就需要设计一套灰度发布系统。 灰度发布系统的作用&#xff0c;可以根据配置&#xff0c;将用户的流量导到新上…

【Kafka】Zookeeper集群 + Kafka集群

Zookeeper 概述 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制★★★ Zookeeper从设计模式角度来理解&#xff1a; 1&#xff09;是一个基于观察者模式设计的分布式服务管理框架&#xff1b; 它负责存储和管理大家都关…

HashMap的扩容看这一篇足够

在Java中&#xff0c;对于HashMap这样的实现&#xff0c;put方法是用来将一个键值对插入到Map中的核心方法。以下是HashMap类中put方法的大致执行流程&#xff1a; 计算Hash值&#xff1a; 首先&#xff0c;put方法会接收一个键&#xff08;Key&#xff09;和一个值&#xff0…

A股风格因子看板 (2024.4 第4期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格景 露等。 今日为该因子跟踪第4期&#xff0c;指数组合数据截止日2024-03-31&#xff0c;要点如下 近1年A股风格因子收益走…

【Spring系列】- Spring事务底层原理

实验准备 配置文件 首先在配置文件中配置jdbcTemplate和事务管理器&#xff0c;并且需要开启事务的注解EnableTransactionManagement以及Configuration注解 ComponentScan("com.lyd") EnableTransactionManagement Configuration public class ApplicationConfig …

【C++从练气到飞升】07---内存管理

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 一、 C/C内存分布 二、 C语言中动态内存管理方式 三、 C中动态内存管理 1. new/delete操作内置类型 2. new和delete操作…