暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

笔记 | OceanBase DBA 实战营2 - obdiag

chkl 2025-08-11
184

第五期:obdiag ——从 “问题发现” 到 “根因定位” 的实战指南

obdiag 是一款适用于 OceanBase 的黑屏诊断工具,支持一键集群巡检、一键诊断分析、一键根因分析、一键信息收集、一键集群洞察 5 大诊断功能。

obdiag 具有以下特点:

部署简单:提供 RPM 包和 obd 上部署的模式,均可一键部署安装,可以选择部署到任意一台能连接到集群各个节点的机器上,并不局限于 OBServer 节点。

集中式收集:obdiag 程序单点部署,无需每台服务器部署,使用的时候只需要在部署机器上执行收集、巡检或分析命令即可。

简单易用:一条命令搞定安装,一键集群巡检、一键信息收集、一键诊断分析、一键根因分析等功能全部可以通过一条命令搞定,简单易用。

完全开源:obdiag 是 python 代码开发的,源代码100%开源,详细信息请参见 GitHub代码仓库

高度可扩展:obdiag 的一键巡检功能、一键场景化信息收集功能、一键根因分析功能、一键信息展示功能都是插件化的,用户可自行低成本的添加场景来定制化诊断的场景。

安装配置 obdiag

1.安装 obdiag

联网在线独立安装obdiag:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/0ceanBase.reposudo yuminstall -yoceanbase-diagnostic-toolsh /opt/oceanbase-diagnostic-tool/init.sh

注意:obdiag 在某个用户下安装就在哪个用户下使用,不可跨用户使用
离线独立安装obdiag:
下载地址:https://www.oceanbase.com/softwarecenter

yoceanbase-diagnostic-tool*.rpm
sh /opt/oceanbase-diagnostic-tool/init.sh

已下载好 obdiag 安装包,无需执行获取安装包操作。

cd /root
rpm -ivh oceanbase-diagnostic-tool-3.6.0-22025080417.el7.x86_64.rpm
source /opt/oceanbase-diagnostic-tool/init.sh
2.配置 obdiag 用户侧配置文件

可通过 obdiag config -h <db_host> -u <sys_user> [-p password] [-P port] 命令快速生成或者直接编辑配置文件,文件的默认路径是 ~/.obdiag/config.yml,其样板文件位于 ~/.obdiag/example。

obdiag config -h127.0.0.1 -uroot@sys -P2881

交互配置的时候填入信息如下:username为root,home_path为/home/admin/oceanbase/observer/,obproxy:输入N。其余回车键保持默认即可

一键集群洞察

使用 obdiag display 命令可帮助洞察 OceanBase 数据库相关的信息。

1.查看当前支持的场景

obdiag display scene list

2.例子: 集群信息洞察

obdiag display scene run --scene=observer.cluster_info

3.例子: 集群的节点信息洞察

obdiag display scene run --scene=observer.server_info

4.例子: 集群内存信息洞察

obdiag display scene run --scene=observer.memory

5.例子:集群cpu信息洞察

obdiag display scene run --scene=observer.cpu

6.例子:集群topsql信息洞察

obdiag display scene run --scene=observer.topsql --env tenant_name=test --env mtime=10

一键集群巡检

1.列出所有巡检套餐

obdiag check list

2.全量巡检 (最常用)

obdiag check run

执行全量巡检之后,会生成一份巡检结果,名为:./check_report/obdiag_check_report_observer_YYYY-MM-HH-MM-xx-xx.table

cat ./check_report/obdiag_check_report_observer*

一键诊断分析

1.OceanBase 日志分析

obdiag analyze log --since 30m

2.OceanBase 内存分析

obdiag analyze memory

一键根因分析

1.查看已经支持的所有根因分析场景

obdiag rca list 

2.按场景执行根因分分析
obdiag rca run --scene=<scene_name>

scene_name 包含如下:

disconnection:一键断连诊断,基于 OBProxy 的诊断日志。
major_hold:一键卡合并诊断。
lock_conflict:一键锁冲突诊断。
ddl_disk_full:DDL 过程中报磁盘空间不足的问题诊断。
ddl_failure:诊断 DDL 失败。
clog_disk_full: clog 盘满场景根因分析
log_error: 日志流无主的场景根因分析
index_ddl_error:建索引报错根因分析
transaction_disconnection:针对事务断连场景的根因分析。
log_error:日志相关问题排查。目前支持:无主场景。
transaction_not_ending:事务不结束场景,目前使用较为复杂。
transaction_rollback:事务回滚报错。
transaction_execute_timeout:事务执行超时报错。
clog_disk_full:clog 日志磁盘空间满的问题。
transaction_wait_timeout:事务等待超时报错。
transaction_other_error:事务其他错误,除了目前已经列出的错误,比如错误码为:-4030,-4121,-4122,-4124,-4019。
suspend_transaction 悬挂事务根因分析。
index_ddl_error:建索引执行报错问题排查。
unit_gc:unit GC 问题排查。
oms_full_trans:OMS 全量迁移异常场景根因分析。
oms_obcdc: OMS obcdc 组件分析场景根因分析。
3.例子:卡合并根因分析

obdiag rca run --scene=major_hold 

4.例子:所冲突根因分析

obdiag rca run --scene=lock_conflict --env tenant_name=sys

查看根因分析结果

cat ./obdiag_rca/obdiag_major_hold_*/record.table

一键诊断信息收集

常规诊断信息收集

通过 obdiag gather -h 可查看所有的收集功能,本小节仅用其中部分功能举例
1.例子:收集最近一小时的日志

obdiag gather log --since 1h

2.例子:主机信息收集

obdiag gather sysstat
基于场景的信息采集

基于场景的诊断信息收集是上面的常规诊断信息收集的排列组合,用于快速收集具体场景的诊断问题排查所需要的全部信息。

使用方法:

1.查看当前支持的场景

obdiag gather scene list

2.例子:集群基本信息收集

obdiag gather scene run --scene=observer.base

3.例子:io问题信息收集,默认不需要添加任何参数的话收集最近30分钟的信息

obdiag gather scene run --scene=observer.io

4.例子:内存问题信息收集,默认不需要添加任何参数的话收集最近30分钟的信息

obdiag gather scene run --scene=observer.memory
最后修改时间:2025-08-11 15:52:24
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论