第五期: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




