Skip to main content

用户指南-下册

|产品版本:V3.3.0|文档版本:20220425

11.使用系统管理

11.1. 角色概述

本节介绍 OCP 角色的概念及 OCP 角色的分类。

概念

OCP 中的角色是一组权限的集合,角色需要被分配给用户才能实际生效。被分配了角色的各用户只能在自己的授权范围内进行操作,避免非专业人员的误操作及信息泄露,从而实现信息安全和传统安全。

OCP 角色包括默认角色和自定义角色。最小权限集合是 PROFILE 角色,具备该角色的用户可以访问个人中心、修改个人信息、修改密码箱等。

默认角色

注意

默认角色不可编辑或删除。

默认角色是系统自带的预置角色,基本覆盖常见对用户的权限管理的要求。例如具备全部管理权限的系统管理员角色 ADMIN、具备所有 OceanBase 租户管理权限的 TENANT_MANAGER 角色等。

OCP 所有 默认角色 及对应权限均可在 系统管理 > 安全角色管理 页签中查看。

自定义角色

自定义角色是用户在 OCP 中自定义创建的角色,相对于初始默认角色来说,可以具备集群和租户级别更细粒度管理权限,例如指定用户仅能查看指定集群、指定集群中的指定租户。和默认角色配合使用时,可以提供多样化的授权策略。

目前,在自定义角色中可被授予的权限如下表。

权限类别权限内容
集群权限指定集群的 创建租户只读更新删除以上全部 权限。
租户权限指定 OB 集群中 OB 租户的 只读更新删除以上全部 权限。
备份恢复权限指定集群的以下权限: 创建:安装组件、发起备份和恢复 只读:查看备份和配置情况 更新:更新配置、组件运维 删除:删除配置
系统权限创建 OB 集群 的权限。

11.2. 新建角色

本节介绍如何在 OCP 中新建角色。

背景说明

如果 OCP 预置的默认角色无法满足实际需求,系统管理员或角色管理员可以创建新的自定义角色,为自定义角色赋予更细粒度的管理权限。和默认角色配合使用时,可以提供多样化的授权策略。

注意

自定义角色只能被赋予集群、租户、备份恢复的相关管理权限、创建集群的系统权限。

前提条件

当前登录用户拥有系统管理员(ADMIN)或角色管理(ROLE_MANAGER)角色,具备对应的权限。

操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 角色管理 页签右上角单击 新建角色

    系统进入新建角色页面。

  4. 新建角色 页面配置 基础信息 及相关权限。

    说明

    创建、编辑等管理权限和只读权限之间没有交集,如果需要为角色赋予管理权限,需要同时添加只读权限。

    1. 基础信息 中输入 角色名称说明

      角色名称以英文字母开头、英文或数字结尾,可包含英文、数字和下划线,且长度为 2 ~ 32。

    2. 集群权限 中配置该角色对某一个或多个集群的 只读更新删除全部权限

      通过 + 添加 OB 集群权限 按钮可为多个集群设置权限。

    3. 租户权限 中配置该角色对某一个租户或多个租户的 只读更新删除全部权限

      注意

      如果需要租户相关的只读或管理权限,必须同时赋予角色此租户对应集群的只读或管理权限。

      通过 + 添加 OB 租户权限 按钮可为多个租户设置权限。

    4. 备份恢复权限 中配置该角色对某一个或多个集群的备份恢复的相关操作权限。

      可根据 权限 下拉框中的提示配置。

      通过 + 添加备份恢复权限 按钮可为多个集群设置权限。

    5. 系统权限 中配置该角色是否有 Create Cluster的权限。

      05101125

  5. 在页面右下角单击 提交

11.3. 角色管理

本节介绍如何查看、修改和删除角色。

前提条件

当前登录用户拥有系统管理员(ADMIN)或角色管理(ROLE_MANAGER)角色,具备对应的权限。

查看角色

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 单击 角色管理 ,进入 角色管理 页签。

    该页签的角色列表默认展示所有角色。

    角色过多时会分页展示,可通过列表下方的分页功能换页或调整每页展示角色数量。

    07021655

  4. 角色管理 页签中的搜索栏中填写角色名称关键字,并单击 搜索

    角色列表中显示符合条件的角色。

  5. 单击角色列表中具体某个角色的名称。

    进入该角色的 角色详情 页,该页中可查看角色的详细信息。

    编辑角色

说明

默认角色不可编辑。

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 角色管理 页签中的搜索栏中填写角色名称关键字,并单击 搜索

    角色列表中显示符合条件的角色。

  4. 单击要编辑角色 操作 列的 编辑 按钮。

    进入 编辑角色 界面,可参考 新建角色 中的步骤 4 重新编辑这个角色的权限。

  5. 单击 提交

    修改角色权限成功。

    删除角色

说明

默认角色不可删除。

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 角色管理 页签中的搜索栏中填写角色名称关键字,并单击搜索。

    角色列表中显示符合条件的角色。

  4. 单击要编辑角色 操作 列的 删除 按钮。

    系统提示 确定要删除角色 xxx 吗?

  5. 单击 删除

    角色删除成功。

11.4. 复制角色

如需创建的角色与已有角色的权限大致相同,可参考本节通过复制已有角色,从而快速创建新的角色。

前提条件

当前登录用户拥有系统管理员(ADMIN)或角色管理(ROLE_MANAGER)角色,具备对应的权限。

操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 角色管理 页签中的搜索栏中填写角色名称关键字,并单击 搜索

    角色列表中显示符合条件的角色。

  4. 单击要编辑角色 操作 列的 复制 按钮。

    系统进入 复制角色 界面。

  5. 复制角色 界面修改 角色名称角色说明 及角色权限。

    角色权限可参考 新建角色 步骤 4 中的说明进行修改。

  6. 单击 提交

    新角色创建成功。

11.5. 创建用户

本节介绍如何创建用户。

背景信息

OCP 建议使用具有不同权限的用户去使用和管理 OCP,授于用户所需的最小权限,则各用户只能在自己的授权范围内进行操作,避免非专业人员的误操作及信息泄露,从而实现信息安全和传统安全。

OCP 的最小权限集合是 PROFILE 角色,具备该角色的用户可以访问个人中心、修改个人信息、修改密码箱等。

前提条件

当前登录用户拥有系统管理员(ADMIN)或用户管理(USER_MANAGER)角色。

操作步骤

  1. 登录 OCP。
  2. 在左侧导航栏中单击 系统管理 > 安全
  3. 用户管理 页签的右上角单击 创建用户
  4. 设置新用户的基础信息。
参数说明
用户名必填。 规则:用户名应为小写英文字母开头,支持小写英文、数字、下划线、中横线和 ‘.’ 的组合,长度为 4 ~ 48 位。 用户名创建后不可修改。
密码必填。 规则:长度为 8~32 个字符,支持字母、数字和特殊字符,且至少包含大、小写字母、数字和特殊字符各 2 个,支持的特殊字符为 ~!@##%\^&*_-+=`|(){}[]:;',.?/
邮箱必填。
手机号码选填。
组织选填。
部门选填。
说明选填。

image.png

  1. 设置新用户的角色信息。

    • 可以根据实际需要勾选已有的角色,至少勾选一个。

    • 若已有角色不合适,可单击区域右上角 新建角色 并参考 新建角色 配置,创建一个新的角色,并将其分配给新用户。

      050807

  2. 打开 访问控制 的开关,配置该用户访问控制。

    • 访问次数上限

      设置该用户单位时间内访问 OCP 系统的次数上限。

    • 细粒度访问控制

      设置该用户单位时间内访问主机、租户、告警和监控资源的次数上限。

      050806

  3. 单击页面右下角 提交

11.6. 查看用户

参考本节可查看用户的详细信息。

前提条件

当前登录用户拥有系统管理员(ADMIN)或用户管理(USER_MANAGER)角色。

操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 用户管理 页签单击用户列表的用户名。

    系统弹出 用户详情 页。

    在该页面用户可查看用户的基础信息和拥有的权限信息。

    也可在该界面右上角进行 修改用户密码复制用户编辑用户删除用户

    07050953

11.7. 编辑用户

本节介绍如何编辑用户、修改用户信息。

前提条件

当前登录用户拥有系统管理员(ADMIN)或用户管理(USER_MANAGER)角色。

操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 用户管理 页签单击用户列表 操作 列的 编辑

    参考 创建用户 小节中的参数说明重新编辑用户信息。

  4. 单击 提交

11.8. 复制用户

如需创建与已有用户 A 配置大致相同的用户 B,可通过复制用户的方法来快速创建新的用户。

前提条件

当前登录用户拥有系统管理员(ADMIN)或用户管理(USER_MANAGER)角色。

操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 用户管理 页签单击用户列表 操作 列的 复制

    参考 创建用户 小节中的参数说明,重新定义部分用户信息。

    其中 基础信息用户名密码邮箱 必须重定义。

  4. 单击 提交

    系统新建与 A 用户角色或访问控制一样的 B 用户。

11.9. 修改用户密码

本节介绍如何修改用户密码。

前提条件

当前登录用户拥有系统管理员(ADMIN)或用户管理(USER_MANAGER)角色。

操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 用户管理 页签单击用户列表 操作 列的 修改密码

    系统弹出修改用户密码的对话框。

  4. 在对话框中填写新的密码。

    密码复杂度需符合:长度为 8~32 个字符,支持字母、数字和特殊字符,且至少包含大、小写字母、数字和特殊字符各 2 个,支持的特殊字符为 ~!@##%\^&*_-+=`|(){}[]:;',.?/

  5. 单击 确定

11.10. 删除用户

本节介绍如何删除用户。

前提条件

  • 当前登录用户拥有系统管理员(ADMIN)或用户管理(USER_MANAGER)角色。

  • 待删除的用户不是 admin 。

    操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 安全

  3. 用户管理 页签单击用户列表 操作 列的 删除用户,或 ... 中的 删除用户

    系统提示“确定要删除用户吗?”。

  4. 单击 删除

    注意

    用户删除后不可恢复,请谨慎操作。

11.11. 登录历史

本节介绍如何查看用户在指定时间范围内的登录信息、客户端信息、登录结果、是否触发自动锁定情况。

前提条件

当前登录用户拥有系统管理员(ADMIN)或用户管理(USER_MANAGER)角色。

操作步骤

  1. 单击左导航栏 系统管理 > 安全,进入安全界面,进入 用户管理 页签,在 用户管理 页签中右上角选择 登录历史

  2. 用户名 下拉框中选择想要查看的用户。

  3. 登录时间 中选择时间区间。

  4. 单击 查询

    05101552登录列表 中返回所有符合查询条件的用户。

    • 您可在 登录列表 中查看 用户名、IP 来源、客户端、登录时间、登录结果自动锁定账号 情况。

      05101553

    • 您可单击 登录列表 中的用户名,系统跳转到用户详情页,用户详情页也可参考 查看用户理解。

11.12. 系统参数管理

本节介绍如何查看和修改系统参数。

背景知识

系统参数控制 OCP 系统备份恢复等功能的开关、资源监控的频率等一系列不建议普通用户自行修改的复杂配置。

OCP 系统在部署成功后为这些系统参数预置了默认值,以保证用户能够正常使用 。如客户有特殊需求可要求管理员修改这些参数。

前提条件

当前登录的用户拥有系统管理员(ADMIN)或 OCP 系统参数管理(PROPERTY_MANAGER)角色。

查看系统参数

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 系统参数

    参数列表 中默认显示所有可修改的全部参数。

    可通过参数列表右下方的翻页功能换页或调整每页显示数量。

    07021722

  3. 参数列表 右上角的搜索框中输入系统参数名的关键字,并单击搜索符号。

    参数列表 中返回符合条件的系统参数。

    修改系统参数

  4. 登录 OCP。

  5. 在左侧导航栏中单击 系统管理 > 系统参数

    参数列表 中默认显示可修改的全部参数。

  6. 参数列表 右上角的搜索框中输入系统参数名的关键字,并单击搜索符号。

    参数列表 中返回符合条件的系统参数。

  7. 单击该参数 参数值 列的编辑按钮。

    系统弹出 修改参数值 对话框。

  8. 参考 OCP 配置参数列表 中的参数说明,在该对话框中填写该参数的取值。

  9. 单击 确定

    参数修改成功,修改参数后约 10 分钟生效,部分参数需要重启才能生效。

11.13. 日志查询

本节为您介绍如何使用 OCP 查询 OBServer、OBProxy 和主机的日志。

前提条件

当前登录 OCP 的用户具有您的日志查询对象的 只读 权限。

操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中选择 系统管理 > 日志查询

    进入 日志查询 界面。除此之外,通过如下入口您也可以进入该界面。

    说明

    通过如下方式进入到 日志查询 页面的,系统将会根据入口自动填充查询条件的 对象范围日志类型

    • 在集群 总览 页的右上角,单击 ... 并选择 下载日志
    • 在集群 总览 页的 OBServer 列表 中,单击 ... 并选择 下载日志
    • 单击 左侧导航栏 主机,在主机列表中勾选多个 IP 地址,单击页面右下方将出现 批量下载日志 按钮。
    • 在 OBProxy 集群 总览 页的右上角,单击 ... 并选择 下载全部日志
    • 在 OBProxy 集群 总览 页的 OBProxy 列表 中,单击 操作 列的 下载日志 按钮。
  3. 日志查询 界面中设置查询条件。

    1216

条件类别设置说明
时间范围默认为近一个小时。 您可通过左边框快速定义范围为近 5/10/15/30 分钟或近 24 小时,也可通过右边时间起始框自定义时间范围。
对象范围必填项,选择要日志查询的范围。 前框选择日志查询的对象,可选 OceanBase 集群、OBProxy 集群、主机 后框选择该对象的具体服务器,可多选。
日志类型必填项,关于日志类型您可参考 日志类型说明。 前框选择日志大类,可选 OB 日志、OBProxy 日志、主机日志、OCP Agent 日志。 后框选择需查看的该类日志下的具体日志文件,可多选。
关键字日志查询时会筛选出含该关键字的日志。
排除关键字日志查询时会过滤含该关键字的日志。
日志级别选择要查看的日志级别,您可选择:ERROR、WARN、INFO、DEBUG。
  1. 单击 查询 按钮。

    界面下方展示符合查询条件的日志记录。

    1216

    • 您可通过 ① 处,切换服务器,查看不同服务器上的日志详情。
    • 您可通过 ② 处,切换日志文件。
  2. 单击 下载全部日志 按钮。

    可满足选择(填入)条件的全部日志。

    日志类型说明

    日志类型信息如下:

日志类型说明
OBServer 日志安装路径/log/ 目录下所有的日志。日志清理策略由 OCP 系统参数 ocp.agent.ob-cleaner.config 控制,具体为: 日志盘使用率小于阈值时(默认为 80%),不清理。 日志盘使用率大于阈值时,首先根据保留天数,清理超过指定时间之前的日志。 如果清理后日志盘使用率小于阈值则清理结束。 如果当前日志盘仍然超过阈值,则按照保留百分比删除多余的日志。
OBProxy 日志/home/admin/logs/obproxy/log/ 目录下所有的日志。
主机日志/var/log 路径下的 message- 文件。
OCP Agent 日志/home/admin/ocp_agent/log/ 目录下所有的日志。

11.14. 任务管理

本节介绍如何查看任务详情、如何处理失败的任务。

前提条件

登录用户拥有系统管理员(ADMIN)或任务管理(TASK_MANAGER)角色。

查看任务详情

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > 任务

  3. 任务列表 的右上角选择任务的状态,输入集群名,并单击搜索按钮。

    07021600任务列表 中将返回所有符合条件的任务。

  4. 单击要查看的任务名,进入该任务的详细界面。

    任务详情页中默认以日志视图展示,可通过如图中 1 处的按钮切换成流转视图。

    日志视图下,提供对进展的多个任务日志的展示,可通过图中区域 2 进行切换。当 Prepare upgrade cluster

    步骤失败后有重试或回滚的操作,则区域 2 中会显示三个按钮分别针对首次执行、回滚和重试,单击对应按钮则会切换到相应的操作日志。

    07021544

  5. 任务详情页中,以流转视图为例,单击指定步骤右侧的 ... 中的操作项即可操作当前步骤。步骤的状态不同所支持的操作也不同,具体以 ... 中显示的为准。日志视图下也支持此操作。

    说明

    任务详情页中 流转视图 通过拓扑图展示各个步骤的上下游关系。通过鼠标在空白处拖拽可以移动拓扑图,通过鼠标滚轮滑动可以进行缩放,也可以通过右上方的缩放控件调整画布大小。拓扑图缩放是以鼠标指针为中心进行的,对于任务流程比较长的情况,可以先缩小,快速定位到关心的步骤,再进行放大,达到快速定位的目的。

    • 成功状态的节点可执行查询日志操作。

      展开折叠菜单后,在屏幕的下方会出现折叠窗口展示日志信息,窗口可以拖动进行放大。

    • 失败状态的节点可执行如下操作。

      • 查看日志信息。
      • 重新运行:重新运行当前节点,即先回滚再执行,成功执行的话继续执行下游节点。
      • 设置为成功:将当前节点的状态直接设置为成功状态,继续执行下游节点。
    • 运行状态的节点可查看日志或者终止运行,终止运行后该节点会变为失败状态。

    • 等待运行的节点不可进行任何操作。

      image.png

      重试/放弃失败任务

  6. 登录 OCP。

  7. 在左侧导航栏中单击 系统管理 > 任务

  8. 任务列表 的右上角选择任务的状态,输入集群名,并单击搜索按钮。

  9. 单击要查看的任务名,进入该任务的详细界面。

  10. 在任务详情页面的右上角单击 放弃任务重试

    05101010

    • 放弃任务:从失败处向任务的根结点,执行每一个步骤的回滚操作,主要用于任务的资源回收、状态修改等目的。
    • 重试:回滚当前步骤所有失败节点并再次执行,如果执行成功则继续执行后续步骤。

11.15. 使用巡检功能

11.15.1. 发起巡检

本页面为您介绍发起巡检的操作步骤。

背景信息

进行发起巡检操作后,OCP 将会立即按照巡检规则的设置对集群进行检查,更多内容参见 巡检管理

操作步骤

  1. 登录 OCP 云平台,在左侧导航栏单击 系统管理>巡检

  2. 单击巡检规则列表中操作列的 发起巡检,单击弹出框中的 确定

    1

  3. 单击弹出框中的 查看任务 或在巡检规则详情页查看任务进展,详情参见 查看巡检规则

    1

11.15.2. 新建巡检规则

本页面为您介绍新建巡检规则的操作步骤。

背景信息

在进行新建巡检规则前,请在巡检脚本页签查看并确认您需要使用的脚本,详情参见 巡检管理

操作步骤

  1. 登录 OCP 云平台,在左侧导航栏单击 系统管理>巡检

  2. 单击巡检规则页签中的 新建巡检规则

    1

  3. 单击弹出框中填写 基础信息调度配置 等信息。

    1. 按规则填写基础信息

      1

参数说明
巡检规则名可包含中文、英文、数字、下划线、中横线,且长度为 2 ~ 32。
巡检脚本根据实际业务情况,选择需要的脚本,详情参见 巡检脚本
巡检对象选择当前 OCP 中已有的集群、租户、主机、数据库等。
选择风险等级包括高、中、低三种等级。
描述可选,您可简要记录该巡检规则的信息。
  1. 打开调度配置后的开关,按规则填写相关信息。

    1

参数说明
调度类型包括 定时调度单次调度。 定时调度:OCP 将在调度生效日期内,在固定时间进行周期性巡检。 单次调度:OCP 将在固定时间进行一次巡检。
调度生效日期仅在调度类型为定时调度时显示。
调度时间点仅在调度类型为定时调度时显示。
调度时间仅在调度类型为单次调度时显示。
  1. 单击 提交,可在巡检规则列表中查看,详情参见 巡检规则
11.15.3. 修改巡检调度

本页面为您介绍修改巡检调度的操作,您可切换已有规则的调度类型。

前提条件

您当前运维的 OCP 中已存在巡检规则列表,并且需要对原规则的调度配置进行修改。

操作步骤

  1. 登录 OCP 云平台,在左侧导航栏单击 系统管理>巡检

  2. 单击需要修改的规则后的图标,选择 编辑调度

  3. 在右侧弹出框中进行如下修改,详情参见 新建巡检规则

    1. 关闭或开启调度配置。

    2. 变更调度类型。

    3. 修改调度时间。

      1646

  4. 单击 确定,完成修改。

11.15.4. 修改巡检规则

本页面为您介绍修改巡检规则的操作,您可修改已有规则的基础信息。

前提条件

您当前运维的 OCP 中已存在巡检规则列表,并且需要对原规则的规则配置进行修改。

操作步骤

  1. 登录 OCP 云平台,在左侧导航栏单击 系统管理>巡检

  2. 单击需要修改的规则后的图标,选择 编辑规则

  3. 在右侧弹出框中进行如下修改,详情参见 新建巡检规则

    1. 修改巡检名称。

    2. 变更巡检脚本。

    3. 修改巡检对象。

    4. 修改风险等级。

      09071346

  4. 单击 确定,完成修改。

11.15.5. 删除巡检规则

本页面为您介绍删除巡检规则的操作。

前提条件

您拥有删除规则的权限,添加权限的具体操作参见 角色管理

操作步骤

  1. 登录 OCP 云平台,在左侧导航栏单击 系统管理>巡检

  2. 单击巡检规则列表中操作列的 删除

    1

  3. 单击弹出框中的 确定。在巡检规则列表查看该规则已被删除。

11.15.6. 查看巡检规则

本页面为您介绍巡检规则页面的详细内容,您可在巡检规则页面查看规则的基本信息、调度配置及巡检任务列表。

操作步骤

  1. 登录 OCP 云平台,在左侧导航栏单击 系统管理>巡检

  2. 在巡检规则列表中,单击 巡检规则名,进入规则详情页。

  3. 在巡检规则页面您可进行规则常见维护操作,详情参见 发起巡检修改巡检调度修改巡检规则删除巡检规则

    1

  4. 查看巡检规则详细信息。

    1. 您可单击 巡检脚本 后的 查看,查看脚本详细信息。

    2. 查看 风险等级、创建人、巡检对象描述

      1

  5. 查看调度配置。

    1. 当调度类型为定时调度时,您可查看 生效日期单独时间点
    2. 当调度类型为单次调度时,您可查看 调度时间
  6. 查看巡检任务列表。您可查看 巡检任务 ID、创建时间、任务结束时间、任务状态巡检结果

    1. 单击巡检任务 ID,你可进入任务详情页面,查看 任务状态、当前进度、开始执行时间、任务累计时间发起人 等信息,切换 日志视图流转视图,并进行 定位当前进度下载日志 等操作。

      1

    2. 单击 巡检结果,当巡检结果为 不通过 时,可单击详情列表下的 查看,查看巡检详情。

      1654

12.管理多集群模式 OCP

12.1. 注册 OCP 集群

本节介绍 OCP 多集群模式下,首次登录备 OCP 集群时,如何将备 OCP 集群绑定到主 OCP 集群。若非 OCP 多集群模式,请跳过本节。

前提条件

  • 多集群模式的主备 OCP 集群已创建。

    • 已参考 部署多集群 OCP 中的流程部署好主备 OCP 集群。

    • 如需将多个普通模式的单节点 OCP 改造成多集群 OCP ,可参考 多集群模式开关 将其中一个集群改造成主集群,并将其余普通模式单点 OCP 改造成备集群。

      说明

      该场景下,主备 OCP 集群中不能存在同名的 OceanBase 主集群。

  • 已获取主集群 MetaDB 的 JDBC 访问信息。

    操作步骤

  1. 在备 OCP 的登录界面填写 用户名密码,并单击 登录

    系统进入 欢迎使用多集群模式 的界面。

    07271009

  2. 填写 主 OCP metadb 的连接信息 中的参数

参数说明
主机地址主 OCP MetaDB 所在节点的 IP。如:192.168.0.1。
端口主 OCP MetaDB 的访问端口。如:2881。
用户名主 OCP MetaDB 的访问用户。如:ocp@ocp_meta##ocp321。
密码主 OCP MetaDB 的访问用户的密码,如:aA******1j 。
数据库主 OCP MetaDB 的数据库名,如:meta_01。

说明

表格中的信息即为 MetaDB 的 JDBC 访问信息,也可被用来后台访问该 MetaDB。如果绑定到主 OCP 失败,可使用如下命令后台访问该 MetaDB 实现基本定位。

######客户端执行obclient 命令连接数据库服务端
obclient -h192.168.0.1 -P2881 -uocp@ocp_meta##ocp321 -paA******1j -Dmeta_01

  1. 单击 绑定到主 OCP

    系统跳转进入业务模式,则该备 OCP 集群被绑定到主 OCP 集群中。

    若该主 OCP 集群还绑了其他的备 OCP,则受 ocp.multi-cluster.replication.interval.seconds

    参数设置的主备数据同步间隔影响,备 OCP 的 主备列表 中可能会短暂不显示其他备 OCP,详见 主备详情页说明主备列表 的说明。

12.2. 主备详情页说明

本节介绍如何查看多集群模式下各 OCP 的信息和相互之间的关系。

前提条件

当前登录的 OCP 已开启了多集群模式。

操作步骤

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > OCP 多集群模式

  3. 单击 主备详情 页签。

    该界面分 当前 OCP 基本信息主备列表 两部分。

    • 当前 OCP 基本信息

      展示当前 OCP 的基本信息,包括当前 OCP 的状态、角色、版本、心跳、同步、访问地址等信息。同时提供与该 OCP 相关的操作入口。

      • 版本:如果该 OCP 的版本与主 OCP 的版本不一致,则会有 的提示。
      • 切换为主 OCP:当前 OCP 为备 OCP 时才展示该入口。
      • 解除主备关系:当前 OCP 为备 OCP 时才展示该入口。
    • 主备列表

      展示当前集群内所有 OCP 及其基本信息,包括角色、版本、状态、访问地址等信息。同时提供操作这些 OCP 的入口。

      • 版本:如果该 OCP 的版本与主 OCP 的版本不一致,则会有 的提示。

      • 删除:仅当备 OCP 心跳异常时,会在主 OCP 环境上显示。

        说明

      • 主备列表完全不显示:主备列表的数据来源于主 OCP 的 MetaDB,当集群中没有主 OCP 时,主备列表则失去了数据来源,所以不会显示。常见于 日常切换 OCP 集群容灾切换 OCP 集群 ,操作过程中会出现短暂不显示的情况。

      • 主备列表显示不全:列表中未显示刚加入的备集群,因 ocp.multi-cluster.replication.interval.seconds 当前值控制着该备集群与主集群之间的数据同步间隔,除绑定当事集群外的其他集群同步间隔内还未同步到主 OCP 集群的数据,就会不显示刚加入的备集群。

        06031951

12.3. 管理 OCP 集群参数

参考本节可查看和修改 OCP 多集群模式相关的参数。

前提条件

当前登录的 OCP 已开启了多集群模式,详情请参见 多集群模式开关开启普通 OCP 的多集群模式

查看 OCP 多集群参数

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > OCP 多集群模式

  3. 选择 当前 OCP 参数列表 页签。

    该页签中的参数列表展示了所有 OCP 多集群相关参数的基本信息,包括 默认值、当前值、参数含义、生效类型及修改时间等。

    06031557

    如参数说明过长不能显示完全,可将鼠标悬停于该说明之上,系统会展示完整的说明。

    修改 OCP 多集群参数

  4. 登录 OCP。

  5. 在左侧导航栏中单击 系统管理 > OCP 多集群模式

  6. 选择 当前 OCP 参数列表 页签。

    参数列表中展示所有 OCP 相关的参数。

  7. 找到需要修改的参数,并单击该参数 操作 列的 修改

    系统弹出修改参数的对话框。

    06031603

  8. 在弹出框中填写参数值。

  9. 单击 提交

    提示 参数值修改成功

    此时 参数列表 中该参数的 当前值 即变为刚才修改的值。如需生效请参照 生效类型 列决定是否需要重启。

12.4. 日常切换 OCP 集群

本页面为您介绍将 OCP 备集群日常切换为主集群的操作。

前提条件

当进行 OCP 主集群删除操作时,需进行日常切换,将主集群切换为备集群后进行下线,详情参见 下线 OCP 集群。其它情况下,请谨慎进行日常切换操作。

操作步骤

  1. 登录 OCP 云平台。

  2. 在左侧导航栏中单击 系统管理>OCP 多集群模式

  3. 主备详情 页签,当前 OCP 基本信 息中,单击 切换为主 OCP

    1

  4. 单击 日常切换

    2

  5. 完成切换后可在 系统管理>任务 中查看详细进展,详情参见 任务管理

12.5. 容灾切换 OCP 集群

本页面为您介绍将 OCP 备集群容灾切换为主集群的操作。当主机群不可连接时,可通过灾备切换,将备集群切换为主集群。

背景信息

当 OCP 主备集群网络连接出现故障时,您可根据实际业务场景选择备集群,通过容灾切换,将备集群切换为主集群。容灾切换完成后,该备集群成为其能正常连接的所有 OCP 集群的主机群。容灾切换的具体场景参见 多集群模式概述

前提条件

进行容灾切换时,请保证所有 OCP 备集群正常。

操作步骤

  1. 登录 OCP 云平台。

  2. 在左侧导航栏中单击 系统管理>OCP 多集群模式

  3. 主备详情 页签,当前 OCP 基本信 息中,单击 切换为主 OCP

    1

  4. 单击 容灾切换

    1

  5. 完成切换后可在 系统管理>任务 中查看详细进展,详情参见 任务管理

    后续操作

    容灾切换后的主集群列表中,存在如下两种情况:

  6. 原 OCP 主集群此时成为心跳超时的备集群,需要手动删除原 OCP 主集群信息,详情参见 删除 OCP 集群

  7. 原 OCP 主集群在灾容切换后恢复正常运行,需要先在原 OCP 主集群里,将其他 OCP 集群删除。然后修改其 OCP 集群角色为 FOLLOWER,再通过注册流程,注册到新 OCP 主机群上。详情参见 删除 OCP 集群注册 OCP 集群

12.6. 删除 OCP 集群

本节介绍如何从集群中删除心跳异常的备 OCP。

背景信息

场景举例:

发生灾容切换后,主备列表中的 OCP 便不会再向原主 OCP 集群汇报心跳,因此原主 OCP 的 主备列表 中会存在心跳检测异常的 OCP。 此时原主 OCP 中仍残留其他 OCP 信息。

该场景下可通过删除功能,删除原主 OCP 集群中残留的 OCP 及其管理的 OceanBase 集群信息。

前提条件

  • 已执行了 注册 OCP 集群

  • 当前 OCP 的 主备列表 中存在心跳异常的 OCP 集群。且集群满足如下条件:

    • 当前集群无法连接心跳异常的 OCP 的 MetaDB。
    • 当前集群能连接上心跳异常的 OCP 的 MetaDB,但连上后发现其主集群不再是当前 OCP 集群。
  • 待删除的 OCP 集群中不存在跨 OCP 管理的主备模式的主 OceanBase 集群。

    若有,请对照如下场景做相应处理后再删除 OCP。

    • 该主 OceanBase 集群异常,则参考 主备库容灾切换 将该主 OceanBase 集群切换到归属于其他 OCP 管理。

    • 该主 OceanBase 集群正常,原则上不建议删除该 OCP 集群。若想删除,则先参考 主备库日常切换 将该主 OceanBase 集群切换到归属于其他 OCP 管理,再删除该 OCP 集群。

      说明

      删除 OCP 集群时会进行下面的操作:

    • 将该 OCP 集群信息在 OCP 主集群中删除。

    • 将该 OCP 集群管理的 OceanBase 集群信息从 OCP 主集群中删除。

      随着其他备 OCP 集群从主集群同步这些信息,该 OCP 集群和其管理的 OceanBase 集群信息将会从多集群中永久删除。

      若该 OCP 管理着 OceanBase 主集群,且该 OceanBase 主集群的备集群在其他 OCP 集群中,那么删除该 OCP 集群后,这个 OceanBase 备集群在整个 OCP 多集群环境中,将会找不到其关联的主集群,涉及该 OceanBase 备集群的 Failover、Siwtchover 和升级都会失败。

      删除 OCP

  1. 登录 OCP。

  2. 在左侧导航栏中单击 系统管理 > OCP 多集群模式

  3. 单击 主备详情 页签。

  4. 主备列表 中找到需要删除的 OCP ,并单击其后的 删除 按钮。

    06032016

    说明

    仅当 OCP 心跳检测异常时,系统才会显示 删除 入口。

    系统提示如下。

    06031630

  5. 单击 删除

    提示 备 OCP 删除成功

12.7. 下线 OCP 集群

本节介绍如何将备 OCP 与主 OCP 的关系解除。备 OCP 如有其他用处,可参考本节先解除主备关系,再用作其他业务实现。

前提条件

  • 备 OCP 已执行了 注册 OCP 集群

  • 当前备 OCP 与主 OCP 集群间通信正常,如不正常可通过 删除 OCP 集群 下线有问题的备 OCP。

    下线备 OCP 集群

  1. 登录备 OCP。

  2. 在左侧导航栏中单击 系统管理 > OCP 多集群模式

  3. 单击 主备详情 页签。

  4. 单击 当前 OCP 基本信息 中的 解除主备关系 按钮。

    06032000系统弹出确定解除 OCP 主备关系的提示。

    说明

    解除主备关系后,备 OCP 可绑定到其他主,或恢复为普通模式,建议谨慎操作。

  5. 提示框中单击 解除主备关系

    下线主 OCP 集群

  6. 登录正常的备 OCP。

  7. 参考 日常切换 OCP 集群 将该备 OCP 切主。

    等待切主成功。

  8. 登录原主 OCP。

    此时该 OCP 已为备 OCP 。

  9. 在左侧导航栏中单击 系统管理 > OCP 多集群模式

  10. 主备详情 页签中的 当前 OCP 基本信息 中单击 解除主备关系

    提示主备关系解除成功。系统返回到 欢迎使用多集群模式

    此时原来的主 OCP 就从集群中删除了,可以重新绑定到之前的主 OCP 集群或其他主 OCP,也可作为普通 OCP 对外提供服务。

13.管理多 AZ 模式 OCP

13.1. 查看多 AZ

本节将为您介绍多可用区详情页面可查看到的信息。

前提条件

当前 OCP 已参考 部署 OCP 部署为多可用区模式。

操作步骤

  1. 登录 OCP。

  2. 选择 系统管理 > OCP 多可用区模式

  3. 单击 可用区详情 页签。

    该页签展示当前 全部可用区未关联可用区的机房

    • 全部可用区

      08311744

      该列表中展示了当前全部可用区、各可用区 OCP 所起的实例、各可用区包含的机房,同时也标识了当前 OCP 所属的可用区。

      如图中 ① 表示:可用区 az0 为当前 OCP 所属可用区,该可用区包含两个机房 bj1 和 bj2,OCP 在该可用区上创建了两个实例来管理这两个机房涉及的业务。其中:

      • 访问地址:用户通过浏览器访问该可用区 OCP 的地址。
      • ConfigUrl:归属于该可用区的 OBProxy 代理该可用区内的 OCP 或 OceanBase 集群时优先使用该 ConfigUrl。
      • monitordb:该可用区的 OCP 所使用的 MonitorDB 地址,可供多个可用区使用。
    • 未关联可用区的机房

      08311757

      该列表展示所有未关联可用区的机房。

      多可用区模式下,OCP 优先管理所属可用区上的业务。OCP 运维管理业务时若涉及未关联任何可用区的机房时会正常运维,但该 OCP 可能与该可用区跨区域。

      说明

      在当前可用区的 OCP 上创建机房,该机房自动关联当前可用区。

13.2. 管理多可用区参数

本节将为您介绍多可用区的相关参数及修改方法。

前提条件

已开启多可用区模式。

修改参数

  1. 登录 OCP。

  2. 选择 系统管理 > OCP 多可用区模式

  3. 单击 参数列表 页签。

  4. 参数列表 中找到需修改的参数,并单击其对应的 操作 列的 修改

    08301602

    页面右侧弹出该参数的修改页面。

  5. 在修改页面配置该参数的修改值。

    09081828

  6. 单击 确定

    参数说明

    OCP 多可用区相关的参数及说明如下表所示。

参数说明
ocp.config-url.site.url外部访问 OCP config url 服务的地址。 默认为空,表示使用和 ocp.site.url 相同的值;如果 config url 服务单独部署,需配置和 ocp.site.url 不同的值。
ocp.site.url外部访问 OCP 网站的地址,需要以http/https 开始,包含 VIP 地址/域名/端口,且结尾不含斜杠(/)。例如:http://localhost:8080
ocp.monitordb.databaseOCP 监控数据库的数据库名,重启生效。
ocp.monitordb.passwordOCP 监控数据库的连接密码,重启生效。
ocp.monitordb.usernameOCP 监控数据库的连接用户名,重启生效。
ocp.monitordb.portOCP 监控数据库的连接端口,重启生效。
ocp.monitordb.hostOCP 监控数据库的连接地址(OBServer 地址或 OBProxy 地址),重启生效。

14.附录

14.1. OCP 配置参数列表

本节列取了当前 OCP 所有系统参数,供 OCP 管理员参考。参数修改后默认约 10 分钟即可自动生效。部分参数需要重启OCP Server 后生效,详见参数说明列中包含“重启生效”的特别说明。

全局配置

参数名默认值参数说明
ocp.version2.5.0OCP 版本号。
server.port8080设置应用服务器启动的端口号,默认为 8080,重启生效。
ocp.envprivateOCP 环境,2.3.x 之前版本兼容配置项。
ocp.site.urlhttp://localhost:8080外部访问 OCP 网站的地址: 要求以 http 开始(不支持https),包含VIP地址/域名/端口的网址,且结尾不含斜杠(/),比如 http://localhost:8080。
ocp.config-url.site.url-外部访问 OCP config url 服务的地址,默认为空,表示使用和 ocp.site.url 相同的值;如果 config url 服务单独部署,需配置和 ocp.site.url 不同的值。
ocp.config-url.use-request-addressTRUEConfig url 服务的 response 使用请求端使用的地址,默认为 true,如设置为 false,response 中使用 ocp.config-url.site.url 配置的地址。
ocp.system.default.timezone系统默认时区,若不设置则使用 system default time zone,重启生效。
ocp.system.default.languagezh-CN系统默认语言(非前端语言设置),若不设置则使用 zh-CN,重启生效。
ocp.active.standby.cluster.enabledTRUE是否支持 OceanBase 热备库功能,默认开启。OCP 老版本升级到 2.4.x 版本时,默认关闭此功能,如要开启,需要先确保 OBProxy 版本不小于 1.7.2。

安全与登录模块

参数名默认值参数说明
server.servlet.session.timeout30m登录会话 /Session 超时的时间,默认是 30m,e最少 60s。如果不加后缀单位,则默认是秒。
ocp.iam.authlocalWeb 页面登录选项:目前支持 local(本地 MetaDB中的OCP 账户)、和 buc (Alibaba 集团员工账户);默认local。重启生效。
ocp.iam.auth.whitelist/api/v2/time,/ocp/obpaas/.*,/gateway.do,.*Action=(ObRootServiceInfo|ObRootServiceRegister|ObIDCRegionInfo|GetObProxyConfig|AllocateClusterIdByNameAndIdx|DeleteObRootServiceInfoByClusterName|GetObRootServiceInfoUrlTemplate).*OCP 免登录接口的白名单列表,以逗号分隔的接口URL字符串,支持正则表达式匹配,默认:/api/v2/time。重启生效。
ocp.iam.auth.basic.enabledTRUE是否启用 Basic Auth 登录模式,通常供程序和 SDK等客户端场景使用,默认true。本配置与ocp.iam.auth 可同时开启。重启生效。
ocp.iam.csrf.enabledTRUE是否启用CSRF跨站点请求伪造安全保护,通常基于网页登录的方式都推荐要启用,默认true。重启生效。
ocp.iam.csrf.url.excluded/api/v2/iam/login.*,/ocp/obpaas/.*,/gateway.do,.*Action=(ObRootServiceInfo|ObRootServiceRegister|ObIDCRegionInfo|GetObProxyConfig|AllocateClusterIdByNameAndIdx|DeleteObRootServiceInfoByClusterName).*可指定跳过 CSRF 保护的 URL 列表,支持正则表达式匹配,默认为:/api/v2/iam/login.*。如果启用CSRF跨站点请求伪造安全保护,该选项才生效;URL是包含 path 和 query param 的完整字符串。
ocp.iam.login.max-attempts5登录时允许连续输错用户名或密码的次数,如果超过限制则会临时阻止客户端IP的登录,默认是 5 次。
ocp.iam.login.lockout-minutes30如果超过登录失败限制,则会临时阻止客户端IP的登录的时间,单位是分钟,默认是 30 分钟。
ocp.iam.login.client.max-attempts20同一客户端连续访问登录接口的次数,如果超过限制则会临时阻止客户端的登录请求,默认是 20 次。
ocp.iam.login.client.lockout-minutes10如果同一客户端登录请求超过限制,则会临时阻止客户端的登录请求,单位是分钟,默认是 10分钟。

OCP 元信息数据库连接(MetaDB)

参数名默认值参数说明
spring.datasource.druid.namemetadb-connect-poolMetaDB 的 druid 连接池名称。重启生效。
spring.datasource.druid.initialSize10初始化时建立物理连接的个数。重启生效。
spring.datasource.druid.minIdle2最小连接池数量。重启生效。
spring.datasource.druid.maxActive100最大连接池数量。重启生效。
spring.datasource.druid.testWhileIdleTRUE建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测。重启生效。
spring.datasource.druid.keepAliveTRUE连接池中的 minIdle 数量以内的连接,空闲时间超过 minEvictableIdleTimeMillis(缺省值 1800 秒),则会执行keepAlive操作。重启生效。
spring.datasource.druid.validationQuerySELECT 1 FROM DUAL用来检测连接是否有效的 SQL。重启生效。
spring.datasource.druid.maxWait2000获取连接时最大等待时间,单位毫秒。重启生效。
spring.datasource.druid.keepAliveTRUE连接池中的 minIdle 数量以内的连接,空闲时间超过minEvictableIdleTimeMillis(缺省值 1800 秒),则会执行 keepAlive 操作。重启生效。

OCP 监控数据库连接(MonitorDB)

参数名默认值参数说明
ocp.monitordb.host10.101.194.179监控数据存储数据库主机名。
ocp.monitordb.port2888监控数据存储数据库端口。
ocp.monitordb.database监控数据存储数据库 database名。
ocp.monitordb.passwordroot监控数据存储数据库密码。
ocp.monitordb.usernameroot@ocp_meta##obocp监控数据存储数据库用户名。
ocp.monitordb.driverClassNamecom.alipay.oceanbase.obproxy.mysql.jdbc.Driverjdbc 驱动。重启生效。
ocp.monitordb.druid.namemonitordb-connect-pooldruid 连接池名称。重启生效。
ocp.monitordb.druid.initialSize10初始化时建立物理连接的个数。重启生效。
ocp.monitordb.druid.minIdle2最小连接池数量。重启生效。
ocp.monitordb.druid.maxActive100最大连接池数量。重启生效。
ocp.monitordb.druid.testWhileIdleTRUE建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测。重启生效。
ocp.monitordb.druid.validationQuerySELECT 1 FROM DUAL用来检测连接是否有效的 sql。重启生效。
ocp.monitordb.druid.maxWait2000获取连接时最大等待时间,单位毫秒。重启生效。
ocp.monitordb.druid.keepAliveTRUE连接池中的 minIdle 数量以内的连接,空闲时间超过minEvictableIdleTimeMillis(缺省值 1800 秒),则会执行keepAlive操作。重启生效。

监控模块

参数名默认值参数说明
ocp.monitor.collect.obcluster.enabledtrue是否开启 OceanBase 集群的监控采集,开启后将对所有 OceanBase 集群进行监控采集。 OCP V3.2.1 对监控采集实现后台精细化控制,可控制仅对某些集群进行监控采集。您可联系技术支持人员为您设置。
ocp.monitor.collect.obproxy.enabledtrue是否开启 OBProxy 的监控采集,开启后将对所有 OBProxy 集群进行监控采集。 OCP V3.2.1 对监控采集实现后台精细化控制,可控制仅对某些集群进行监控采集。您可联系技术支持人员为您设置。

SQL 性能模块

表中介绍 SQL 性能诊断参数的配置,表中所属“诊断对象”都是针对 SQL。

参数名默认值参数说明
ocp.perf.sql-diag.awful-performance-index-used-config{"enabled":true, "cpuTimeLimitUs":100000, "execPsLimit":5.0, "fullLogicalReadsLimit":10000}走索引性能依然差的诊断配置。 enabled:是否打开该检测项。 execPsLimit:每秒执行次数。 cpuTimeLimitUs:平均 CPU 时间(μs)。 fullLogicalReadsLimit:逻辑读次数。 诊断对象:平均 CPU 时间 > cpuTimeLimitUs && 实际逻辑读 > fullLogicalReadsLimit && 未进行全表扫描 && 执行频率 > \$execPsLimit
ocp.perf.sql-diag.cpu-time-proportion-high-config{"enabled":true, "cpuTimeLimitUs":10000, "execPsLimit":10.0, "maxCpuTimeLimitUs":30000, "affectedRowsLimit":100, "execLimit":30, "sqlCountLimit":20, "cpuTimePercentLimit":20}执行占比较高诊断的配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 maxCpuTimeLimitUs:最大 CPU 时间。 affectedRowsLimit:影响行数。 execLimit:执行次数。 sqlCountLimit:SQL 数。 cpuTimePercentLimit:CPU 占比。 诊断对象:平均 CPU 时间 > \$cpuTimeLimitUs || 影响行数 > \$affectedRowsLimit || 最大 CPU 时间 > \$maxCpuTimeLimitUs && 执行频率 >= \$execPsLimit 判断标准:诊断时间内,被诊断的 SQL 的 CPU 时间占租户 CPU 时间超过\$cpuTimePercentLimit,且租户的 SQL 执行总次数大于 \$execLimit,且租户执行的不同 SQL 数大于 \$sqlCountLimit,则视为占比过高。
ocp.perf.sql-diag.database-white-listoceanbase,information_schema,mysql,recyclebin,sys,publicSQL 诊断时过滤掉的数据库名。
ocp.perf.sql-diag.execution-spike-config{"enabled":true, "cpuTimeLimitUs":3000, "execPsLimit":5.0, "pointsLimit":5, "compareMin":20, "avgExecutionMultiply":{"0":6, "1":5, "5":4, "10":3, "50": 2.5, "100": 2, "500": 1.6}, "stdExecutionMultiply":{"0":80, "1":60 , "3": 30,"5":20, "10":15, "20":8, "30":6, "50":5, "80":4}}执行次数突刺诊断的配置。 enabled:是否打开该检测项 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 pointsLimit:点数。 compareMin:比较时间(min)。 avgExecutionMultiply:执行频率均值倍率。 stdExecutionMultiply:执行频率标准差的倍率。 诊断对象:平均 CPU 时间 >= \$cpuTimeLimitUs && 平均每秒执行次数 >= \$execPsLimit 。 判断标准: 取前 \$compareMin 时间内满足诊断对象条件的 SQL,统计这些 SQL 前 compareMin 时间内每分钟执行频率的均值 avg_exec_ps,以及前 \$compareMin 时间内执行频率的标准差std_exec_ps 和 标准差与均值的百分比 range_percent,即统计如下信息: 历史平均执行频率(avg_exec_ps) 标准差(std_exec_ps) range_percent(std_exec_ps / avg_exec_ps * 100)。 然后计算该 SQL 的平均每秒执行次数(exec_ps)。当 exec_ps 同时满足以下条件时则该 SQL 被认为是执行次数突刺。 exec_ps>=avg_exec_ps*\$multiple_value_1 exec_ps >= avg_exec_ps + std_exec_ps * \$multiple_value_2 说明 multiple_value_1,随 avg_exec_ps 变化情况,依赖配置项 avgExecutionMultiply。 当 avg_exec_ps>500,multiple_value_1=1.6,以此类推:100->2, 50->2.5, 10->3, 5->4, 1->5。 multiple_value_2,range_percent变化情况,依赖配置项stdExecutionMultiply。当 range_percent>80,multiple_value_2=4,以此类推:50->5, 30->6, 20->8, 10->15, 5->20, 3->30, 1->60, 0->80。
ocp.perf.sql-diag.index-diagnoser-config{"enabled":true,"schedulePeriodMin":5, "coreThreadSize":10, "maxThreadSize":50,"maxQueueSize":10000,"diagPeriodSec":300,"diagOffsetSec":60,"maxDiagPeriodSec":1800}SQL 索引诊断配置参数,重启生效。 不建议用户自行配置。
ocp.perf.sql-diag.ineffective-hint-config{"enabled":true, "execPsLimit":5.0, "cpuTimeLimitUs":20000}Hint 未生效诊断的配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 诊断对象:CPU 时间 >= \$cpuTimeLimitUs && 执行频率 >= \$execPsLimit 判断标准:解析诊断对象,满足“Hint 中指定的索引的与执行计划里的不一致。”则认为是 Hint 未生效。
ocp.perf.sql-diag.perf-diagnoser-config{"enabled":true,"schedulePeriodMin":5, "coreThreadSize":10, "maxThreadSize":50,"maxQueueSize":10000,"diagPeriodSec":300,"diagOffsetSec":60,"maxDiagPeriodSec":1800}SQL 性能诊断配置参数,重启生效。 不建议用户自行配置。
ocp.perf.sql-diag.performance-degradation-after-plan-changed-config{"enabled":true, "compareMin":5, "cpuTimeMultiply":{"0":50, "1":30, "10":10, "100":8, "1000":6}}执行计划变化且性能下降诊断的配置。 enabled:是否打开该检测项。 cpuTimeMultiply:CPU 倍率,若当前平均 CPU 时间大于 0 ms,则执行计划变化后的 CPU 时间应该下降 50 倍才算性能下降,若大于1ms 则为 30 倍,依此类推。 compareMin:性能比较时间(min)。 判断条件:该 SQL 在 \$compareMin 时间内平均 CPU 时间,在计划变化后增加的倍数大于此处设置的 CPU 倍率,则视为性能下降。
ocp.perf.sql-diag.performance-degradation-config{"enabled":true, "cpuTimeLimitUs":10000, "execPsLimit":5.0, "maxCpuTimeLimitUs":30000, "affectedRowsLimit":100, "execLimit":5, "compareMin":20, "cpuTimeMultiply":{"0":50, "1":30, "10":10, "100":8, "1000":6}}性能下降诊断的配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 maxCpuTimeLimitUs:最大 CPU 时间。 affectedRowsLimit:影响行数。 execLimit:执行次数。 compareMin:基线数据的来源时间(min),为检测时间的前 \$compareMin 时间。 cpuTimeMultiply:CPU 倍率,若当前 CPU 时间大于 0 ms, 则执行计划变化后的 CPU 时间应该下降 50 倍才算性能下降,若大于1ms 则为 30 倍,依此类推。 诊断对象:诊断时间内满足下述条件的 SQL,平均 CPU 时间 > \$cpuTimeLimitUs || 影响行数 > \$affectedRowsLimit || 最大CPU 时间 > \$maxCpuTimeLimitUs && 执行频率 > \$execPsLimit。 判断标准: 基线作为比较对象,需满足“基线执行次数 > \$execLimit”,否则不可作为比较对象。有了比较对象后,当检测的 SQL 同时满足下述条件则认为是性能比以前下降。 当前平均 CPU 时间 >= 基线 CPU 时间 * \$cpuTimeMultiply,cpuTimeMultiply 默认值为 6。 当前执行频率 >= 基线执行频率 * 0.5
ocp.perf.sql-diag.query-timeout30000000SQL 诊断查询时的超时时间(μs)。
ocp.perf.sql-diag.row-lock-contention-high-config{"enabled":true, "execPsLimit":0, "cpuTimeLimitUs":1000, "elapsedTimeLimitUs":0}热点行锁诊断的配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 elapsedTimeLimitUs:平均响应时间(μs)。 检测对象:检测时间段内满足下述条件的 SQL 。 执行频率 > \$execPsLimit && 平均 CPU 时间 > \$cpuTimeLimitUs && 平均响应时间 > \$elapsedTimeLimitUs 说明 elapsedTimeLimitUs 不配置的话,则不作为过滤检测对象的条件。 判断标准: 检测对象中类型为“%select%for%update%”的即为造成热点行锁诊断的 SQL。
ocp.perf.sql-diag.table-scan-index-not-exists-config{"enabled":true, "execPsLimit":1.0, "cpuTimeLimitUs":20000}全表扫描且无可用索引的诊断配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 诊断对象:v\$sql_audit 中 table_scan >0 的 SQL,即进行了全表扫描的 SQL。 判断标准:满足下述条件则认为是无索引。 单表,该表无索引 。 多表,有的表没有索引。
ocp.perf.sql-diag.table-scan-index-not-used-config{"enabled":true, "execPsLimit":1.0, "cpuTimeLimitUs":2000}全表扫描有索引未走的诊断配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 检测对象:检测时间段内满足下述条件的 SQL 。 执行频率 > \$execPsLimit && 平均 CPU 时间 > \$cpuTimeLimitUs && 进行了全变扫描 判断标准:有索引未走。
ocp.perf.sql.diag-plan-change-config{"enabled":true,"schedulePeriodMin":5, "coreThreadSize":10, "maxThreadSize":50,"maxQueueSize":10000,"diagPeriodSec":300,"diagOffsetSec":300,"maxDiagPeriodSec":1800}诊断任务调度参数配置。 不建议用户自行配置。
ocp.perf.sql.max-query-range24hSQL 性能数据查询时的最大时间区间长度。默认值"24h"。 若 TopSQLSlowSQL 界面配置的查询时间超过该值,则提交查询时会报错。
ocp.perf.sql.plan-hist-level0-granularity30sOCP 聚合第 0 级 SQL 的 Plan 性能数据的时间粒度。 OCP 默认 30s 采集并聚合一次 SQL 的 Plan 性能数据并存于固定表中,供 TopSQL 查询时使用。 通过调大该值可以降低 OCP 监控元数据存储空间的压力。
ocp.perf.sql.plan-hist-level0-query-interval2h第 0 级 Plan 性能数据的最大查询时间区间。 超过该值,OCP 会去查看聚合时间粒度更大的数据表。
ocp.perf.sql.plan-hist-level0-retention5d第 0 级 Plan 性能数据的分区保留时间。 性能数据的分区按天创建,系统默认只保留 5 天内的数据,超过 5 天的分区将会被删除。
ocp.perf.sql.prepare-partition-ahead8指定提前创建多少天的性能数据分区。要求传入以天为单位的时间。
ocp.perf.sql.query-timeout30000000SQL 性能数据查询时的超时时间(μs)。
ocp.perf.sql.sql-hist-level0-granularity30sOCP 聚合第 0 级 SQL 性能数据的时间粒度。 说明 为提高 OCP 监控采集性能,OCP 将按不同的时间粒度采集并聚合 SQL 的性能数据以供 TopSQL 的诊断时查询。共分三级,不同级别的数据被采集来后会按天存储到对应级别表的分区中。分区的保留时间由固定参数配置。 同样的性能数据,时间粒度越大则消耗的存储空间越小。
ocp.perf.sql.sql-hist-level0-query-interval2h第 0 级 SQL 性能数据的最大查询时间区间。 当用户在 TopSQL 界面中配置的查询时间区间超过该值时,系统将会从第 1 级 SQL 性能数据表中查询。
ocp.perf.sql.sql-hist-level0-retention2d第 0 级 SQL 性能数据的分区保留时间。 对于按天创建用来存储第 0 级 SQL 性能数据的分区表,监控元数据库默认仅保留两天内创建的。
ocp.perf.sql.sql-hist-level1-granularity2mOCP 聚合第 1 级 SQL 性能数据的时间粒度。OCP 默认每 2 分钟聚合一次 SQL 性能数据并写入第 2 级 SQL 性能数据表中。
ocp.perf.sql.sql-hist-level1-query-interval12h第1级SQL性能数据的最大查询时间区间。 当用户在 TOPSQL 界面中配置的查询时间区间超过该值时,系统将会从第 2 级 SQL 性能数据表中查询。
ocp.perf.sql.sql-hist-level1-retention8d第 1 级 SQL 性能数据的分区保留时间。
ocp.perf.sql.sql-hist-level2-granularity10mOCP 聚合第 2 级 SQL 性能数据的时间粒度。OCP 默认每 10 分钟聚合一次 SQL 性能数据并写入第 2 级 SQL 性能数据表中。
ocp.perf.sql.sql-hist-level2-query-interval48h第 2 级 SQL 性能数据的最大查询时间区间。 因无更高级别的的采集粒度,即使超过该值,OCP 仍会从第 2 级 SQL 性能数据表中查询。
ocp.perf.sql.sql-hist-level2-retention15d第 2 级 SQL 性能数据的分区保留时间。

主机模块

参数名默认值参数说明
ocp.host.remote-command.default-timeout-millis30000主机远程命令默认超时(毫秒)。
ocp.host.remote-command.min-timeout-millis30000主机远程命令最低超时,远程命令的实际超时不会低于此值(毫秒)。
ocp.host.ssh-ping.max-delay-millis3000ocp server 通过 ssh 执行whoami的时间间隔(请求收发的时间差,单位毫秒),如果大于该阈值,则会影响添加主机等操作。
ocp.host.check.clock-diff.max-diff500ocp server 与远程服务器的最大时钟偏移(单位毫秒),如果大于该阈值,则会影响主机管理和监控。

告警模块

参数名默认值参数说明
ocp.alarm.send.once-timeout-ms10000每次发送发送告警的超时时间。
ocp.alarm.send.once-retry-times3每次发送告警的最大重试次数。
ocp.alarm.send.batch-max20一次捞取的新通知的最大数目。
ocp.alarm.send.retry-timeout-minutes60重试超时时间(分钟),超过此时间的通知不再会重试发送,默认60分钟。
ocp.alarm.send.total-failed-retry-times3通知发送失败时最大重试次数。
ocp.alarm.send.total-timeout-seconds60单台机器发送一条通知的超时时间。
ocp.alarm.send.period.ms2000通知发送间隔(毫秒),默认2000 毫秒,重启生效。
ocp.alarm.recover-message-template告警通道恢复消息模板,默认为空表示使用系统自带模板,设置此参数可覆盖系统自带模板。

备份恢复模块

参数名默认值参数说明
backup.dbname.prefixbackup备份恢复的元数据库名的自定义前缀,默认是 backup 开头。如果修改,则只会在 ocp 初始化或者升级时影响新建库的名称,对已建库不做任何修改。
ocp.backup.agent.relation.file.full-path.name##{systemProperties['user.home'].concat('/ocp-server/etc/backup_agent_ob_relations_config.yaml')}描述备份恢复组件版本,依赖的元数据库,以及与业务 OB 版本的匹配关系文件。
ocp.backup.alarm.backup-data-retention-days7备份数据保留的最近天数。
ocp.backup.alarm.backup-liboblog-expire-days7备份 liboblog 保留的最近天数。
ocp.backup.alarm.last-data-backup-max-interval-minutes1440检查最近时间内的基线备份任务是否失败,默认 1 天,单位分钟。
ocp.backup.alarm.inc-backup-delay-threshold3600增量备份延迟告警阈值(秒)。
ocp.backup.alarm.base-backup-last-finished-threshold12960已经有 9 天没有成功备份过基线,初始设置阈值为 9 天(12960 分钟),单位为分钟。
ocp.backup.alarm.base-backup-timeout10基线备份调度超时时间(分钟)。
ocp.backup.storage.collect.task.timeout9000备份恢复容量采集每个目录任务的采集超时时间
ocp.backup.storage.collect.rpc.timeout3000备份恢复容量采集每个rpc调用的超时时间(一个目录采集任务多次rpc调用)。
ocp.backup.storage.collect.max.retry.times2备份恢复容量采集每个采集任务重试的次数限制。

OCP-Agent 与 OB-Agent

参数名默认值参数说明
ocp.agent.rpc.port62888OCP-Agent 服务端口,RPC使用。
ocp.ob-agent.versiont-oceanbase-ob-agent-2.4.0-1884988.alios7.x86_64.rpmOB-Agent 版本。
ocp.ocp-agent.versiont-oceanbase-ocp-agent-2.4.0-1884049.alios7.x86_64.rpmOCP-Agent 版本。

OBProxy 连接

参数名默认值参数说明
ocp.system.obproxy.addresslocalhostOBProxy 地址,用于连接 OB 集群。
ocp.system.obproxy.metadb.cluster-nameobdv1OBProxy 元数据所在集群(如OBProxy 部署未使用MetaDB,本配置可忽略)。
ocp.system.obproxy.metadb.databaseobproxyOBProxy 元数据库 DataBase(如 OBProxy 部署未使用MetaDB,本配置可忽略)。
ocp.system.obproxy.metadb.userroot@obproxyOBProxy 元数据库用户 (如 OBProxy 部署未使用 MetaDB,本配置可忽略)。
ocp.system.obproxy.port2883OBProxy 端口,用于连接 OB 集群。

后台任务与调度

参数名默认值参数说明
ocp.task.executor.core-pool-size16任务执行线程池核心线程数,默认 16,重启生效。
ocp.task.executor.keep-alive-seconds120任务执行线程池 IDLE 线程保持存活时间(单位:秒),默认 120 秒,重启生效。
ocp.task.executor.max-pool-size64任务执行线程池最大线程数,默认 64,重启生效。
ocp.task.executor.queue-capacity1000任务执行线程队列大小,默认 1000,重启生效。

OceanBase 远程连接管理

参数名默认值参数说明
obsdk.connectors.cache.cleanup.period.second300obsdk 清理连接器缓存的时间间隔,单位秒,取值范围30~1800,默认值 300。
obsdk.connectors.cache.max.idle.second3600obsdk 空闲连接器的过期时间,单位秒,取值范围 300~18000,默认值3600。
obsdk.connectors.cache.size50obsdk 连接器缓存大小,取值范围 5~100,默认值 50。
obsdk.connectors.print.sqlTRUEobsdk 中 sql 打印开关,默认开启。
obsdk.connectors.slow.query.threshold.millis1000obsdk 中慢查询日志阈值,单位毫秒,默认值 1000 毫秒。
obsdk.ob.connection.modeproxy连接 OB 的方式,取值 proxy|direct,默认为 proxy。

日志模块

参数名默认值参数说明
logging.file\${user.home}/logs/ocp/ocp.log日志文件的完整名字(绝对路径+文件名字),可以用 Linux/macOS 系统环境变量如\${HOME} 或者 java 系统变量\${user.home};默认是\${user.home}/logs/ocp/ocp.log。
logging.file.max-history100当配置了 logging.file 后,设置最多保留的归档日志文件的个数。
logging.file.max-size100MB当配置了 logging.file 后,通过本配置指定日志文件大小,如 30MB、1GB 等;默认是 100MB。
logging.level.com.alipay.ocpINFO设置 ocp 程序的日志级别,默认为 INFO。
logging.level.org.hibernate.SQLINFO设置 spring sql 框架的日志级别,默认为 INFO。
logging.level.webINFO设置 spring web 框架的日志级别,默认为 INFO。

文件管理

参数名默认值参数说明
ocp.file.local.dir##{systemProperties['user.home'].concat('/data/files')}OCP 文件模块 文件本地路径。
ocp.file.local.built-in.dir##{systemProperties['user.home'].concat('/ocp-server/lib')}OCP 文件模块 内置文件的本地路径。
ocp.file.default-block-split-size1048576OCP 文件模块 默认文件块大小(单位:字节),默认 1MB。
ocp.file.max-concurrent-count16OCP 文件模块 单个节点同时处理文件的最大并发数,默认16。
ocp.file.try-lock-timeout-milliseconds10000OCP 文件模块 单个节点锁超时毫秒数,默认 10000。

流控管理

参数名默认值参数说明
ocp.iam.rate-limit.enabledTRUE全局流控开关,支持动态启停。
ocp.iam.rate-limit.internal-api.connect.timeout1000流控内部接口调用时,连接的超时时间,(单位:毫秒)重启生效。
ocp.iam.rate-limit.internal-api.read.timeout1000流控内部接口调用时,读取的超时时间,(单位:毫秒)重启生效。
ocp.iam.rate-limit.task.schedule.period3流控主备角色管理任务的调度周期,(单位:秒)重启生效。
ocp.iam.rate-limit.on-user.enabledTRUE流控是否对用户限流,支持动态启停。

14.2. SQL 性能模块

本节描述 OCP 系统参数中与 SQL 性能诊断相关的参数配置。

SQL 性能模块

表中介绍 SQL 性能诊断参数的配置,表中所属“诊断对象”都是针对 SQL。

参数名默认值参数说明
ocp.perf.sql-diag.awful-performance-index-used-config{"enabled":true, "cpuTimeLimitUs":100000, "execPsLimit":5.0, "fullLogicalReadsLimit":10000}走索引性能依然差的诊断配置。 enabled:是否打开该检测项。 execPsLimit:每秒执行次数。 cpuTimeLimitUs:平均 CPU 时间(μs)。 fullLogicalReadsLimit:逻辑读次数。 诊断对象:平均 CPU 时间 > cpuTimeLimitUs && 实际逻辑读 > fullLogicalReadsLimit && 未进行全表扫描 && 执行频率 > \$execPsLimit
ocp.perf.sql-diag.cpu-time-proportion-high-config{"enabled":true, "cpuTimeLimitUs":10000, "execPsLimit":10.0, "maxCpuTimeLimitUs":30000, "affectedRowsLimit":100, "execLimit":30, "sqlCountLimit":20, "cpuTimePercentLimit":20}执行占比较高诊断的配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 maxCpuTimeLimitUs:最大 CPU 时间。 affectedRowsLimit:影响行数。 execLimit:执行次数。 sqlCountLimit:SQL 数。 cpuTimePercentLimit:CPU 占比。 诊断对象:平均 CPU 时间 > \$cpuTimeLimitUs || 影响行数 > \$affectedRowsLimit || 最大 CPU 时间 > \$maxCpuTimeLimitUs && 执行频率 >= \$execPsLimit 判断标准:诊断时间内,被诊断的 SQL 的 CPU 时间占租户 CPU 时间超过\$cpuTimePercentLimit,且租户的 SQL 执行总次数大于 \$execLimit,且租户执行的不同 SQL 数大于 \$sqlCountLimit,则视为占比过高。
ocp.perf.sql-diag.database-white-listoceanbase,information_schema,mysql,recyclebin,sys,publicSQL 诊断时过滤掉的数据库名。
ocp.perf.sql-diag.execution-spike-config{"enabled":true, "cpuTimeLimitUs":3000, "execPsLimit":5.0, "pointsLimit":5, "compareMin":20, "avgExecutionMultiply":{"0":6, "1":5, "5":4, "10":3, "50": 2.5, "100": 2, "500": 1.6}, "stdExecutionMultiply":{"0":80, "1":60 , "3": 30,"5":20, "10":15, "20":8, "30":6, "50":5, "80":4}}执行次数突刺诊断的配置。 enabled:是否打开该检测项 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 pointsLimit:点数。 compareMin:比较时间(min)。 avgExecutionMultiply:执行频率均值倍率。 stdExecutionMultiply:执行频率标准差的倍率。 诊断对象:平均 CPU 时间 >= \$cpuTimeLimitUs && 平均每秒执行次数 >= \$execPsLimit 。 判断标准: 取前 \$compareMin 时间内满足诊断对象条件的 SQL,统计这些 SQL 前 compareMin 时间内每分钟执行频率的均值 avg_exec_ps,以及前 \$compareMin 时间内执行频率的标准差std_exec_ps 和 标准差与均值的百分比 range_percent,即统计如下信息: 历史平均执行频率(avg_exec_ps) 标准差(std_exec_ps) range_percent(std_exec_ps / avg_exec_ps * 100)。 然后计算该 SQL 的平均每秒执行次数(exec_ps)。当 exec_ps 同时满足以下条件时则该 SQL 被认为是执行次数突刺。 exec_ps>=avg_exec_ps*\$multiple_value_1 exec_ps >= avg_exec_ps + std_exec_ps * \$multiple_value_2 说明 multiple_value_1,随 avg_exec_ps 变化情况,依赖配置项 avgExecutionMultiply。 当 avg_exec_ps>500,multiple_value_1=1.6,以此类推:100->2, 50->2.5, 10->3, 5->4, 1->5。 multiple_value_2,range_percent变化情况,依赖配置项stdExecutionMultiply。当 range_percent>80,multiple_value_2=4,以此类推:50->5, 30->6, 20->8, 10->15, 5->20, 3->30, 1->60, 0->80。
ocp.perf.sql-diag.index-diagnoser-config{"enabled":true,"schedulePeriodMin":5, "coreThreadSize":10, "maxThreadSize":50,"maxQueueSize":10000,"diagPeriodSec":300,"diagOffsetSec":60,"maxDiagPeriodSec":1800}SQL 索引诊断配置参数,重启生效。 不建议用户自行配置。
ocp.perf.sql-diag.ineffective-hint-config{"enabled":true, "execPsLimit":5.0, "cpuTimeLimitUs":20000}Hint 未生效诊断的配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 诊断对象:CPU 时间 >= \$cpuTimeLimitUs && 执行频率 >= \$execPsLimit 判断标准:解析诊断对象,满足“Hint 中指定的索引的与执行计划里的不一致。”则认为是 Hint 未生效。
ocp.perf.sql-diag.perf-diagnoser-config{"enabled":true,"schedulePeriodMin":5, "coreThreadSize":10, "maxThreadSize":50,"maxQueueSize":10000,"diagPeriodSec":300,"diagOffsetSec":60,"maxDiagPeriodSec":1800}SQL 性能诊断配置参数,重启生效。 不建议用户自行配置。
ocp.perf.sql-diag.performance-degradation-after-plan-changed-config{"enabled":true, "compareMin":5, "cpuTimeMultiply":{"0":50, "1":30, "10":10, "100":8, "1000":6}}执行计划变化且性能下降诊断的配置。 enabled:是否打开该检测项。 cpuTimeMultiply:CPU 倍率,若当前平均 CPU 时间大于 0 ms,则执行计划变化后的 CPU 时间应该下降 50 倍才算性能下降,若大于1ms 则为 30 倍,依此类推。 compareMin:性能比较时间(min)。 判断条件:该 SQL 在 \$compareMin 时间内平均 CPU 时间,在计划变化后增加的倍数大于此处设置的 CPU 倍率,则视为性能下降。
ocp.perf.sql-diag.performance-degradation-config{"enabled":true, "cpuTimeLimitUs":10000, "execPsLimit":5.0, "maxCpuTimeLimitUs":30000, "affectedRowsLimit":100, "execLimit":5, "compareMin":20, "cpuTimeMultiply":{"0":50, "1":30, "10":10, "100":8, "1000":6}}性能下降诊断的配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 maxCpuTimeLimitUs:最大 CPU 时间。 affectedRowsLimit:影响行数。 execLimit:执行次数。 compareMin:基线数据的来源时间(min),为检测时间的前 \$compareMin 时间。 cpuTimeMultiply:CPU 倍率,若当前 CPU 时间大于 0 ms, 则执行计划变化后的 CPU 时间应该下降 50 倍才算性能下降,若大于1ms 则为 30 倍,依此类推。 诊断对象:诊断时间内满足下述条件的 SQL,平均 CPU 时间 > \$cpuTimeLimitUs || 影响行数 > \$affectedRowsLimit || 最大CPU 时间 > \$maxCpuTimeLimitUs && 执行频率 > \$execPsLimit。 判断标准: 基线作为比较对象,需满足“基线执行次数 > \$execLimit”,否则不可作为比较对象。有了比较对象后,当检测的 SQL 同时满足下述条件则认为是性能比以前下降。 当前平均 CPU 时间 >= 基线 CPU 时间 * \$cpuTimeMultiply,cpuTimeMultiply 默认值为 6。 当前执行频率 >= 基线执行频率 * 0.5
ocp.perf.sql-diag.query-timeout30000000SQL 诊断查询时的超时时间(μs)。
ocp.perf.sql-diag.row-lock-contention-high-config{"enabled":true, "execPsLimit":0, "cpuTimeLimitUs":1000, "elapsedTimeLimitUs":0}热点行锁诊断的配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 elapsedTimeLimitUs:平均响应时间(μs)。 检测对象:检测时间段内满足下述条件的 SQL 。 执行频率 > \$execPsLimit && 平均 CPU 时间 > \$cpuTimeLimitUs && 平均响应时间 > \$elapsedTimeLimitUs 说明 elapsedTimeLimitUs 不配置的话,则不作为过滤检测对象的条件。 判断标准: 检测对象中类型为“%select%for%update%”的即为造成热点行锁诊断的 SQL。
ocp.perf.sql-diag.table-scan-index-not-exists-config{"enabled":true, "execPsLimit":1.0, "cpuTimeLimitUs":20000}全表扫描且无可用索引的诊断配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 诊断对象:v\$sql_audit 中 table_scan >0 的 SQL,即进行了全表扫描的 SQL。 判断标准:满足下述条件则认为是无索引。 单表,该表无索引 。 多表,有的表没有索引。
ocp.perf.sql-diag.table-scan-index-not-used-config{"enabled":true, "execPsLimit":1.0, "cpuTimeLimitUs":2000}全表扫描有索引未走的诊断配置。 enabled:是否打开该检测项。 execPsLimit:执行频率(每秒执行次数)。 cpuTimeLimitUs:平均 CPU 时间(μs)。 检测对象:检测时间段内满足下述条件的 SQL 。 执行频率 > \$execPsLimit && 平均 CPU 时间 > \$cpuTimeLimitUs && 进行了全变扫描 判断标准:有索引未走。
ocp.perf.sql.diag-plan-change-config{"enabled":true,"schedulePeriodMin":5, "coreThreadSize":10, "maxThreadSize":50,"maxQueueSize":10000,"diagPeriodSec":300,"diagOffsetSec":300,"maxDiagPeriodSec":1800}诊断任务调度参数配置。 不建议用户自行配置。
ocp.perf.sql.max-query-range24hSQL 性能数据查询时的最大时间区间长度。默认值"24h"。 若 TopSQLSlowSQL 界面配置的查询时间超过该值,则提交查询时会报错。
ocp.perf.sql.plan-hist-level0-granularity30sOCP 聚合第 0 级 SQL 的 Plan 性能数据的时间粒度。 OCP 默认 30s 采集并聚合一次 SQL 的 Plan 性能数据并存于固定表中,供 TopSQL 查询时使用。 通过调大该值可以降低 OCP 监控元数据存储空间的压力。
ocp.perf.sql.plan-hist-level0-query-interval2h第 0 级 Plan 性能数据的最大查询时间区间。 超过该值,OCP 会去查看聚合时间粒度更大的数据表。
ocp.perf.sql.plan-hist-level0-retention5d第 0 级 Plan 性能数据的分区保留时间。 性能数据的分区按天创建,系统默认只保留 5 天内的数据,超过 5 天的分区将会被删除。
ocp.perf.sql.prepare-partition-ahead8指定提前创建多少天的性能数据分区。要求传入以天为单位的时间。
ocp.perf.sql.query-timeout30000000SQL 性能数据查询时的超时时间(μs)。
ocp.perf.sql.sql-hist-level0-granularity30sOCP 聚合第 0 级 SQL 性能数据的时间粒度。 说明 为提高 OCP 监控采集性能,OCP 将按不同的时间粒度采集并聚合 SQL 的性能数据以供 TopSQL 的诊断时查询。共分三级,不同级别的数据被采集来后会按天存储到对应级别表的分区中。分区的保留时间由固定参数配置。 同样的性能数据,时间粒度越大则消耗的存储空间越小。
ocp.perf.sql.sql-hist-level0-query-interval2h第 0 级 SQL 性能数据的最大查询时间区间。 当用户在 TopSQL 界面中配置的查询时间区间超过该值时,系统将会从第 1 级 SQL 性能数据表中查询。
ocp.perf.sql.sql-hist-level0-retention2d第 0 级 SQL 性能数据的分区保留时间。 对于按天创建用来存储第 0 级 SQL 性能数据的分区表,监控元数据库默认仅保留两天内创建的。
ocp.perf.sql.sql-hist-level1-granularity2mOCP 聚合第 1 级 SQL 性能数据的时间粒度。OCP 默认每 2 分钟聚合一次 SQL 性能数据并写入第 2 级 SQL 性能数据表中。
ocp.perf.sql.sql-hist-level1-query-interval12h第1级SQL性能数据的最大查询时间区间。 当用户在 TOPSQL 界面中配置的查询时间区间超过该值时,系统将会从第 2 级 SQL 性能数据表中查询。
ocp.perf.sql.sql-hist-level1-retention8d第 1 级 SQL 性能数据的分区保留时间。
ocp.perf.sql.sql-hist-level2-granularity10mOCP 聚合第 2 级 SQL 性能数据的时间粒度。OCP 默认每 10 分钟聚合一次 SQL 性能数据并写入第 2 级 SQL 性能数据表中。
ocp.perf.sql.sql-hist-level2-query-interval48h第 2 级 SQL 性能数据的最大查询时间区间。 因无更高级别的的采集粒度,即使超过该值,OCP 仍会从第 2 级 SQL 性能数据表中查询。
ocp.perf.sql.sql-hist-level2-retention15d第 2 级 SQL 性能数据的分区保留时间。

14.3. OCP 资源单元规格表

本节介绍 OCP 内置的 Unit 规格。租户以 Unit 的方式来占有 OceanBase 集群的资源,Unit 规格的大小及数量将决定租户能够使用的资源的多少。您可选择自定义 Unit 规格也可选择使用本节介绍的内置 Unit 规格,内置的 Unit 规格不可修改。

OCP内置了一组资源单元规格,如下:

说明

OceanBase V2.0 及以上版本,支持的最小规格为 S1。

规格名最小CPU数最大CPU数最小内存最大内存
B0.250.251G1G
LogOnlyNormal112G2G
LogOnlySystem5535G35G
S00.50.52G2G
S11.51.56G6G
S23312G12G
S36620G20G
S4121240G40G

14.4. OCP 错误信息表

本节简单说明 OCP 系统错误码的含义。

错误码错误信息
1001传入的参数为空或者不合法:{0},请检查后重试。
1002没有找到指定 {0} 类型的记录,参数:{1},请检查后重试。
1003错误的请求, 错误原因: {0}。
1004请求处理超时,请重试。
1005请求处理遇到冲突,请重试。
1006重名的资源已存在(类型:{0},参数:{1}),请换其他的名字后重试。
1007不支持的单位: {0}。
1008不支持的方法。
1010传入的起止时间不正确,请修改后重试。
1011不支持的排序字段 {0}。
1012未找到配置项: {0}。
1013传入的起止时间需要同时不为空,或者同时为空,请修改后重试。
1113序列获取下一个值失败。
1114尝试在多节点 OCP Server 集群中进行并发保护时出错,错误信息 {0},请稍后重试。
1115不该发生的错误。
1116指定的对象不存在。
1117给定参数的大小不合法,参数最少 {0} 个,最多 {1} 个。
1118时间范围选择过大,请减小时间范围后重试。
1200rpc 调用 io 异常, server: {0} port: {1}。
1201rpc 调用执行失败, server: {0} port: {1} command: {2} code: {3} result: {4}。
1500操作 OB 失败,错误信息: {0}。
1999发生一个未知的错误:错误原因={0},错误信息={1},请联系管理员。
3000当前用户没有登录或登录出错了,请登陆后重试。
3001当前登录账户已被禁用,请联系管理员。
3002当前登录账户已超期,请联系管理员。
3003当前登录账户已被锁定,请联系管理员。
3004用户名或者密码错误,请重试。您还剩余{0}次机会。
3005密码已过期,请联系管理员重制密码。
3006用户名或者密码错误,请重试。您还剩余{0}次机会。
3007当前账户的登录已被暂时禁止,请联系管理员。
3008用户名{0}不合法,小写英文字母开头,支持小写英文、数字、下划线和‘.’的组合,长度为 4 ~ 48 位。
3009密码不合法,密码长度8~32位,至少包含2位数字、2位大写字母、2位小写字母和2位特殊字符(._+@##\$%)。
3010该操作需要集群{0}下租户{1}的{2}用户密码,请先添加到密码箱。
3011账户的登陆密码与提供的密码不匹配,请检查后重试。
3012错误的密码ID格式。
3013密码箱中不存在ID为{0}的密码。
3014ip {0} 请求受限,请稍后重试 。
3015密码箱中集群{0}下租户{1}的{2}用户密码不可用 。
3016角色名称不合法,角色名称长度2~32位,以英文字母开头、英文或数字结尾,可包含英文、数字和下划线 。
3100没有权限进行对应操作,请联系管理员。
3101权限的表达式不能为空,请检查权限设置后重试。
3102给定的权限表达式{0}无效,请检查权限设置后重试。
3103系统默认的角色{0}不可以被删除。
3104系统默认的账户{0}不可以被删除。
3105{0}是系统预留的用户名,请选择其他用户名后重试,请尽量避免含admin/sys/dba/proxy等词汇。
3016不允许修改系统指定用户的角色, 用户名: {0}。
3200不支持的流控策略类型 :{0} 。
3201不支持的流控资源 :{0} 。
3202不支持的流控对象类型 :{0} 。
3203不支持的固定窗口 , 时间单位:{0}, 时间长度:{1}, 窗口长度:{2} 秒。
3204非法的流控次数限制值 :{0} 。
3205流控对象类型为空。
3206流控对象ID为空 。
3207无效的创建流控策略参数:{0}。
4001任务 {0} 不存在。
4002Dag {0} 不存在。
4003存在循环结构。
4004任务上下文错误。
4005在主机{1}上执行命令{0}失败。
4006在主机{1}上保存文件{0}失败。
4007任务{0}, 状态{1}, 不能进行此操作。
4008定时任务{0}不存在。
6000错误的请求,参数{0}校验错误,请修改!
6001告警服务内部错误,请联系管理员!
6002用户(id: {0})无权限进行该操作,确认权限后重试!
6003当前用户没有权限更新其他用户的配置,请确认用户权限后重试!
6004当前用户没有所有集群的读权限,请确认用户权限后重试!
6005有订阅配置引用了该告警分组({0}),请确认没有订阅配置引用后重试!
6006有告警分组引用了该告警规则,告警规则id:{0},请确认没有告警分组引用后重试!
6007系统内建告警项无法删除!
6008默认通道无法删除!
6009告警规则不存在,告警规则类型:{0},请检查!
6010告警分组(id: {0})不存在,请检查!
6011告警屏蔽配置(id:{0})不存在,请检查!
6012用户(id:{0})不存在,请检查!
6013告警不存在,id:{0},请检查!
6014告警规则{0}引用的告警指标不存在,请确认后重试!
6015无效的告警规则表达式,请修改。
6016同名告警项已存在,id:{0},请修改告警项名!
6017系统内建告警分组无法删除!
6018模板配置了变量循环引用(变量名:{0}),请修改配置模板!
6019模板{0}配置了错误的变量引用(变量名:{1}),请修改配置模板!
6020告警规则持续周期({0})小于评估周期({1}),请确保持续周期大于或等于评估周期!
6021无效的告警屏蔽条件{0},请修改!
6022告警分组复制需指定不同的分组名称,请使用不同的名称后重试!
6023接收人地址不能为空,请填写!
6024接接收人地址{0}不可用,请确认地址可用后重试!
6025接收人不能为空,请填写!
6026无效的接收人地址字段:{0},请确认地址有效后重试!
6027通道不存在,请检查!
6028通道(id:{0})已被订阅(id:{1})引用,请确认该通道没有被任何订阅引用后重试!
6029脚本内容不能为空,请填写!
6030脚本内容缺少 shebang 程序指定,请检查!
6031不支持该脚本程序:{0},请使用python/bash脚本程序!
6032脚本文件名称不能为空,请填写!
6033错误的脚本文件名称({0}),脚本文件名称只能包含字母、数字、点号和下划线(半角),请修改!
6034脚本文件不存在,请将文件上传到OCP /home/admin目录!
6035给定的脚本文件名称({0})是一个路径,不是文件,请确认后重试!
6036尝试读取脚本文件失败,请检查文件访问权限!
6037通知中的通道不能为空,请填写!
6038通知中的通道的代理格式({0})错误,请检查后重试!
6039发送通知时出现异常,请稍后重试!
6040通知中的通道的Header({0})格式错误,请检查后重试!
6041通知中的通道的Method({0})不支持,请联系管理员!
6042通道暂未实现,请联系管理员!
6043更新通知{0}失败,请稍后重试!
6044发送测试消息失败,错误信息:{0} 。
6045URL格式错误({0}),请修改后重试!
6046获取任务失败,请检查后重试!
6047生成告警事件失败,告警事件id:{0},请联系管理员!
6048创建告警分组失败,分组名:{0},请联系管理员!
6049创建告警屏蔽失败,告警屏蔽id:{0},请联系管理员!
6050告警通道名称 ({0}) 已存在。
6051告警通道名称不能为空。
6052告警通道名称前后不能使用空格, 给定名称为 ({0})
6053告警分组名称 ({0}) 已存在。
6054名称不能为空。
6055名称前后不能使用空格,给定名称为 ({0})。
7000指定的资源{0}:{1}包含一个或多个子资源,请清空子资源后再重试。
7001主机\<{0}:{1}>已经存在,请修改后重试。
7002测试建立SSH连接到目标主机{0}@{1}:{2}失败,原因是{3},请修改连接信息后重试。
7004当前主机{0}离线或使用中,请释放主机并恢复状态为{1}再重试。
7005主机\<{0}:{1}>不存在。
7006当前主机{0}状态不支持此操作。
7007主机{0}所在idc与目标observer的idc不匹配。
7008主机{0}所在idc与目标zone的idc不匹配。
7009主机{0}所在region与目标observer的region不匹配。
7010不支持在主机{0}部署多个同类型的服务{1},请选择其他主机再重试。
7011不支持在容器类型主机{0}部署多个服务{1},请选择其他主机再重试。
7012当前主机{0}已经部署了agent服务,请卸载后重试。
7013IP为\<{0}>的主机不存在。
7014IP为\<{0}>的主机不唯一。
7015通过 SSH 访问主机失败,请确认输入的 ip、凭据、端口是否正确,失败的主机 ip=[{0}]
7016获取主机{0}的凭据信息失败,请确认凭据信息是否存在。。
7017批量选择中存在操作系统不同的主机,请重新选择。
7018批量选择中存在架构不同的主机,请重新选择 。
7019当前主机{0}的OCP agent状态不支持此操作 。
7020SSH 网络延时过高,延时是{0}毫秒,预期最大延时是{1}毫秒 。
7021OCP 与主机时间差较大,主机时间{0},OCP时间{1},最大时间差{2}毫秒 。
7022添加主机输入IP与主机IP不匹配,输入ip是{0},主机ip是{1}。
7023主机缺少OCP Agent 依赖,缺少的依赖是[{0}]
7024执行SSH命令返回结果不符合预期,请检查SSH操作是否有其他内容输出到控制台 。
7500文件 {0}:{1} 不存在。
7501找不到文件块 {0}:{1}。
7502已存在类型为 {0} 名称为 {1} 的文件。
7503文件后缀校验错误,后缀为{0}, 应为{1}。
7504文件真实类型校验错误,类型为{0},应为{1}。
7505等待其它请求操作文件完成超时,请重试。
7506解析软件包信息失败,请确认文件类型。
7507操作失败,软件包当前正在使用中。
7508存储空间格式不正确,必须以小写字母或者数字开头和结尾,只能包括小写字母、数字和短划线(-),长度必须在3~63字节之间。
7509存储空间 {0} 不存在 。
7510存储空间名称已存在。
7511存储空间为 {0} 的文件 {1} 正在上传中,请稍后查看上传结果。
7512软件包已经存在,软件包名称为 {0}。
7513不支持的软件包类型,软件包类型是 {0},输入的软件包是 {1}。
7514软件包 {0} 不存在。
8000目前无法访问你的个人中心,请过一段时间重试。
8001不允许删除别人的密码箱内容,参数{0}。
8002相同的连接信息已存在,请删除原记录后重建,参数{0}。
8010凭证验证失败,原因:{0}, 请确保该凭证可以连接指定的资源。
8011凭证解密失败,凭证信息:{0}, 原因:{1}, 请检查凭证加解密使用的Key是否一致, 比如:是否手动修改了OCP用户的登录密码。
8012使用凭证:{0}连接资源失败,请确保该凭证可以正确连接该资源。
8013使用SSH凭证:{0}测试sudo权限失败,请确保该用户被授予了的sudo权限,且在'/etc/sudoers'中配置了sudo命令免密:NOPASSWD。
8014不支持的ssh私钥,凭证信息:{0},请检查SSH私钥格式是否正确,并检查生成SSH密钥的OpenSSL版本是否小于7.8,否则需要制定 '-m PEM' 重新生成私钥。
8500参数{0}为空或者不合法:{1},需要http/https开头包含域名、端口号的网站根路径,请检查后重试。
11001指定的集群id={0}不存在。
11002指定的集群name={0}不存在。
11003指定的集群id={0},当前类型不支持此操作。
11004指定的集群id={0},当前版本不支持此操作,最小支持版本={1}。
11005传入的root server信息不正确。
11007集群{0}当前状态不支持此操作。
11008集群{0}状态为{1}时才支持此操作。
11009rootserver json 不合法 {0}。
11010集群id={0}下未找到 root server。
11011密码错误,请确认输入的旧密码是否正确。
11012传入的密码参数不能为空。
11013传入的rpm包名不能为空。
11014待创建集群已经存在。
11015当前集群存在备集群,不允许此操作。
11016该集群的 config url 不属于当前 OCP。
11017集群{0}的主集群未找到。
11018集群{0}下发现多个主集群。
11019集群{0}的server列表为空。
11020该集群上一次运维任务还未结束。
11021传入的机器已经部署了集群。
11022集群热备库功能未开启。
11023指定的集群{0},不具备切换条件。
11024指定的备集群{0},添加还未完成。
11025指定的集群{0},不具备切换条件 。
11026指定的备集群{0},添加还未完成。
11030传入的机器数量与待导入集群 observer 数量不符。
11031传入的机器IP与待导入集群 observer 的 IP 不符。
11032请先导入主集群,再导入备集群。
11033待导入的集群已经存在。
11034待导入的集群下zone={0}缺少region信息。
11035待导入的集群下zone={0}缺少idc信息。
11036待接管的集群下zone={0}缺少idc信息。
11037待接管集群下zone={0}的idc为{1}、region为{2},与OCP当前idc、region映射关系不符合。
11038待接管的集群名={0}不合法。
11039待接管的集群中包含不合法的租户名{0}。
11040传入的连接方式不合法,取值: proxy|direct。
11041当连接方式为proxy时,传入的集群名不能为空。
11042接管集群预检查失败,失败原因: {0}。
11043OBServer 检查不通过。
11044请传入待接管集群的主机信息。
11045请传入待接管集群的主机类型。
11046请传入待接管集群的主机机型 id。
11047请传入待接管集群的主机凭据 id。
11050未找到指定参数={0}。
11051参数{0}的值{1}格式错误。
11052设置集群参数生效范围只允许指定集群、ZONE或SERVER,当前的值{0}不合法,请重试。
11060备集群id={0},当前同步状态不支持升级 。
11061不支持对低于{0}版本的集群进行升级操作。
11062集群升级目标版本不正确。
11063未找到从版本{0}到版本{1}的升级路径。
11065当前用户不具备对集群{0}:{1}的更新权限。
11066不支持对低于{0}版本的主备集群进行升级操作。
11070该操作中租户{0}将不满足多数派,无法按zone滚动重启。
11100连接集群{0}失败, 请检查密码箱中该集群sys租户{1}用户密码是否正确,sys租户白名单设置是否正确,以及网络是否连通。
11101连接集群{0}失败, 请检查该集群sys租户{1}用户密码是否正确,sys租户白名单设置是否正确,以及网络是否连通。
11102连接集群{0}:{1}失败, 无法找到可连接的OBServer。
11201集群id={0}的version={1}合并版本号不存在。
11202合并查询超时,请重试。
11203不支持的合并统计指标名称 {0}。
11204合并参数更新失败,可能存在冲突请求,请几秒钟之后查看确认是否更新成功。
11205无法发起从非PRIMARY集群的合并,集群id={0}的集群是STANDBY集群。
11501在主机{0}上启动ob agent失败。
12001输入的zone名格式不正确,需要以英文字母开头,可包括大小写字母、数字和下划线,长度在2与64之间。
12002集群id={0}下未找到zone={1}。
12003集群id={0}已存在zone={1}。
12004指定的zone={0},当前状态不支持此操作。
12005停止zone={0}失败。
12006指定的zone={0}上存在unit,不允许删除。
12007该zone上一次运维任务还未结束。
12008传入的zone名有重复。
12009传入的zone名有重复。
13001未找到指定的observer,id={0}。
13002未找到指定的observer,ip={0},port={1}。
13003指定的observer={0},当前状态不支持此操作。
13004observer {0} 未退出。
13005observer {0} 启动失败。
13006目标observer的ip不合法。
13007目标observer的rpc端口不合法。
13008目标observer的sql端口不合法。
13009剩余的server数不能小于租户={0}在zone={1}下的 unit 数。
13010剩余的server数不能小于租户{0}在zone={1}下的unit数。
13011observer无法删除,原因:{0}。
13012该observer上一次运维任务还未结束。
13013未找到指定的observer,ip={0}。
13014指定的observer不唯一,ip={0}。
13015obagent {0} 未退出。
15001指定的规格id={0}不存在。
15002指定的规格名={0}不存在。
15003输入的规格名格式不正确,需要以英文字母开头,可包括大小写字母、数字和下划线,长度在2与32之间。
15004输入的规格名={0}已经存在。
15005输入的 cpu 数值不正确,最小值0.5。
15006输入的 memory 数值不正确,最小值 1073741824,单位 Byte。
15007输入的 disk 数值不正确,最小值 10737418240,单位 Byte。
15008输入的 iops 值不正确,最小值 128。
15011最小 cpu 数值不能大于最大 cpu 数值。
15012最小 memory 数值不能大于最大 memory 数值。
15013修改规格参数不能为空。
15014不允许修改类型为 SYSTEM 的规格。
15015不允许删除类型为 SYSTEM 的规格。
15020输入的租户名格式不正确,需要以英文字母开头,可包括大小写字母、数字和下划线,长度在2与64之间。
15021集群{0}下租户{1}已经存在。
15022集群{0}下未找到租户{1}。
15023指定的租户id={0}不存在。
15024指定的租户id={0},已经删除。。
15025指定的租户{0},当前状态不支持此操作。
15026指定的租户{0},不允许删除。
15027指定的租户{0},不允许进行该操作。
15028指定的租户id={0},设置密码失败。
15030输入的租户模式不正确,可选值MYSQL|ORACLE。
15031输入的primary zone长度不正确,需小于128。
15032输入的primary zone不正确。
15033输入的白名单长度不正确,需小于65535。
15034输入的密码长度不正确,需小于32。
15035输入的description长度不正确,需小于1024。
15036oracle模式最小支持版本={0}, 当前版本={1}。
15037传入的zone不正确。
15038传入的collation不正确。
15039租户剩余zone个数不得少于1。
15040传入的zone={0}不合法。
15041未找到zone={0}。
15042指定的zone={0}下,没有可用的资源池。
15043未找到指定的unit={0}。
15044指定unit={0}为所属zone下唯一的资源单元,不允许删除。
15045传入的unit个数不合法。
15046传入的unit个数不能超过该zone下处于active状态的server数量。
15050租户{0}下没有可用server。
15060未找到指定的租户参数={0}。
15061指定的租户参数={0}为只读类型。
15062指定的租户参数={0}的旧值获取不到。
15080传入的副本类型不正确。
15082租户{0}, locality修改进度未找到。
15083租户{0}, locality修改未完成。
15084租户{0}, 资源池缩容未完成。
15100连接租户{0}失败,请检查密码箱中所存的该租户下root用户的密码是否正确,以及租户白名单设置是否正确。
15200输入的数据库名格式不正确,需要以英文字母开头,可包括小写字母、数字和下划线,长度在2与128之间。
15201输入的数据库名{0}已经存在。
15202指定的数据库{0}不存在。
15203修改数据库传参不能为空。
15204数据库{0}不允许进行该操作。
15205传入的collation不正确。
15206Oracle租户不支持该操作。
15250输入的用户名格式不正确,需要以英文字母开头,可包括小写字母、数字和下划线,长度在2与128之间。
15251输入的用户名{0}已经存在。
15252指定的用户{0}不存在。
15253用户{0}不允许进行该操作。
15254Oracle租户不支持该操作。
15255数据库{0}权限不合法。
20000备份恢复不支持{0}版本的ob。
20001存在配置文件{0},但没有适用于{1}版本的集群{2}的备份组件。
20002ip为{0}的安装目录{1}已存在,请手动检查。
20003集群{0}需要先进行备份调度配置。
20004参数错误。
20005组件中未配置适用于{0}版本的集群{1}的备份配置,请配置!
20006适用于该集群的组件{0}均不在线,请检查!
20007集群或者租户的基线备份任务已经存在。
20008集群的立即备份失败。
20009发起恢复数据失败。
20010备份配置{0}中的URI为空。
20011备份配置{0}中的endpoint为空。
20012备份配置{0}中的accessKeyId为空。
20013备份配置{0}中的secretAccessKey为空。
20014备份文件中找不到租户{0}的备份版本号。
20015解析备份文件中的租户信息失败。
20016新增配置文件失败。
20017配置正在被组件{0}使用,删除失败!
20018配置名{0}已存在!
20020{0}组件失败!
20021该主机已经有在运行中的运维任务(TaskId:{0}),请等该任务完成后再发起新的运维操作!
20022该主机已经被集群或备份恢复使用。
20023更新主机状态失败,hostId:{0},agentStatus:{1}
20024未找到指定的备份恢复参数{0}。
20025备份恢复参数{0}的值{1}格式错误。
20030数据备份未启动。
20031日志备份未启动。
20032同一集群或者同一集群下的租户,只能有一份调度配置。已存在cluster:{0},tenant:{1},请删除已有配置后,再增加。
20033停止日志备份失败,错误信息:{0}。
20040在恢复租户过程中,创建ResourceUnit:{0}失败,{1}。
20041输入的pool list中{0}格式有误,请检查!
20042输入的pool list中的pool已存在,请修改pool name!
20043提交的新租户{0}已经在恢复中,请检查!
20044提交的新租户名{0}已经存在,请修改租户名!
20045内部异常,匹配的恢复任务多于一条!
20046任务{0}不存在!
20047任务{0}处于{1}状态,不能被取消!只有失败的任务,才能被取消。
20048不支持清理非数据恢复阶段时失败任务的恢复残留数据!
20050集群{0}可能发生过主备库切换,暂不支持备库{1}备份。请将当前主库{1}备份到新的备份目录!
20060输入的配置名格式不正确,需要以英文字母开头,可包括大小写字母、数字和下划线,长度在2与32之间。
20061服务配置发生变更 20062 error.backup.config.name.existed 名字{0}已存在,请修改!
20063存储配置名或者路径已存在,请修改!
20064在{0}上,存储配置测试失败,请确保配置可访问!
20065存储配置名{0}已存在,请修改!
20066没有任何存储配置,请通过安装服务进行设置!
20067配置项{0}为必填项,不能为空!
20070安装服务失败!
20071操作主机失败!
20072备份恢复服务{0}未正常运行,影响备份功能,请检查!
20073没有备份恢复元数据库为{0}的服务,请先安装服务!
20074缺少配置项{0}!
20075未找到ID为{0}的备份恢复服务。
20076未找到名称为{0}的备份恢复服务。
20077没有存储配置为{0}的服务,请先安装服务!
20078匹配的备份恢复服务{0}并未在运行中,请进行上线操作!
20079备份恢复服务其下还有{0}个节点,暂不能删除!请先卸载节点上的备份恢复软件。
20080备份恢复服务{0}下的主机{1}进行{2}操作的前置状态校验失败,期望状态为{3},实际状态为{4}!
20081备份恢复服务{0}不能被删除,因为目前还被以下集群的备份策略使用:{1}
20082备份恢复服务配置未发生任何变更!
20083服务{0}中没有{1}类型的配置。
20090请求参数{0}非法!
20091请求对象{0}不存在!
20092请求sql{0}非法!
20093请求sql中的参数{0}非法!
20100集群{0}(id:{1})已经存在备份策略,请删除原策略或者直接更新原策略!
20101集群集群{0}(id:{1})下租户{2}(id:{3})已经存在备份策略,继续新建备份策略,将导致租户{2}的策略被覆盖!
20102集群{0}(id:{1})中租户{2}(id:{3})已经存在备份策略,请删除原策略或者直接更新原策略!
20103集群集群{0}(id:{1})下租户{2}(id:{3})已经存在备份策略,如果多于两个租户,建议使用集群备份策略!
20104集群{0}(id:{1})已经存在备份策略,不需要再以租户维度创建备份策略!
20105调度时间{0}不符合格式{1}错误,请检查!
20106备份对象{0}无备份策略!
20107备份对象为空,请检查!
20108备份对象{0}不支持备份方式{1}。
20109无备份策略时,不支持测试非物理备份方式的集群的存储配置!
20110逻辑备份下,仅支持对数据进行全量备份。
20111物理备份下,增量备份之前必须有一次全量的数据备份。
20112不支持备份策略中的备份方式由物理备份改为逻辑备份。
20120解析备份文件异常,内容为{0}。
20121解析文件名{0}失败,不符合预期的数字命名!
20130获取备份文件失败,在主机{0}上执行命令{1}失败!
20140在物理备份下,该功能暂不支持!
20141OB版本{0}不支持{1}备份方式!
20150设置备份路径失败,错误信息:{0}。
20151该集群已经在往{0}进行备份,无法变更为新的备份路径{1}。
21001未找到obproxy cluster, id={0}。
21002未找到obproxy server, id={0}。
21003未找到obproxy server, id={0}, 状态={1}。
31100高级搜索的属性 {0} 无效。
31101高级搜索的操作符 {0} 无效。
31102高级搜索的值 {0} 无效 。
31103计划的UID {0} 无效。
31104选择时间范围超出最大时间区间 {0},请减小时间区间后重试。
31105选择时间范围过大导致查询超时,请减小时间区间后重试。

14.5. OCP 告警模板变量

本节介绍告警模板中相关变量的含义。

告警模板变量用于告警规则配置、告警通道配置。

类别名称描述
告警规则app_type应用类型
告警规则alarm_type告警类型
告警规则alarm_target告警对象
告警规则alarm_scope范围
告警规则alarm_level告警级别
告警规则alarm_evaluation_interval告警评估间隔(秒)
告警规则alarm_duration持续时长(秒)
告警规则alarm_status告警状态
告警规则alarm_active_at告警触发时间
告警规则alarm_resolved_at告警消除时间
告警规则alarm_last_interval持续时长(秒)
告警规则alarm_name告警名称
告警规则value指标值
告警规则alarm_threshold告警阈值
告警规则alarm_updated_at告警更新时间
告警规则service服务名
告警规则ob_cluster_groupOB集群组
告警规则ob_clusterOB集群
告警规则ob_cluster_idOB集群ID
告警规则ob_tenantOB租户
告警规则host_ip主机IP
告警规则app_cluster应用集群
告警规则operation_name操作名称
告警规则operator操作者
告警规则operation_result操作结果
告警规则failed_reason失败原因
告警规则check_item检查项
通知消息app_type应用类型
通知消息alarm_type告警类型
通知消息alarm_target告警对象
通知消息alarm_scope范围
通知消息alarm_level告警级别
通知消息alarm_evaluation_interval告警评估间隔(秒)
通知消息alarm_duration持续时长(秒)
通知消息alarm_status告警状态
通知消息alarm_active_at告警触发时间
通知消息alarm_resolved_at告警消除时间
通知消息alarm_last_interval持续时长(秒)
通知消息alarm_name告警名称
通知消息value指标值
通知消息alarm_threshold告警阈值
通知消息alarm_updated_at告警更新时间
通知消息alarm_summary告警概述
通知消息alarm_description告警详情
通知消息alarm_level_color告警等级对应的颜色
通知消息alarm_id告警ID
通知消息alarm_url告警在OCP站点的访问URL
通知消息service服务名
通知消息ob_cluster_groupOB集群组
通知消息ob_clusterOB集群
通知消息ob_cluster_idOB集群ID
通知消息ob_tenantOB租户
通知消息host_ip主机IP
通知消息app_cluster应用集群
聚合消息app_type应用类型
聚合消息alarm_type告警类型
聚合消息alarm_target告警对象
聚合消息alarm_scope范围
聚合消息alarm_level告警级别
聚合消息alarm_evaluation_interval告警评估间隔(秒)
聚合消息alarm_duration持续时长(秒)
聚合消息alarm_status告警状态
聚合消息alarm_active_at告警触发时间
聚合消息alarm_resolved_at告警消除时间
聚合消息alarm_last_interval持续时长(秒)
聚合消息alarm_name告警名称
聚合消息value指标值
聚合消息alarm_threshold告警阈值
聚合消息alarm_updated_at告警更新时间
聚合消息alarm_summary告警概述
聚合消息alarm_description告警详情
聚合消息alarm_level_color告警等级对应的颜色
聚合消息alarm_id告警ID
聚合消息service服务名
聚合消息ob_cluster_groupOB集群组
聚合消息ob_clusterOB集群
聚合消息ob_tenantOB租户
聚合消息host_ip主机IP
聚合消息app_cluster应用集群
聚合消息alarm_group_by告警聚合分组
聚合消息alarm_count告警数量
通道配置app_type应用类型
通道配置alarm_type告警类型
通道配置alarm_target告警对象
通道配置alarm_scope范围
通道配置alarm_level告警级别
通道配置alarm_name告警名称
通道配置alarm_summary告警概述
通道配置alarm_description告警详情
通道配置service服务名
通道配置ob_cluster_groupOB集群组
通道配置ob_clusterOB集群
通道配置ob_tenantOB租户
通道配置host_ip主机IP
通道配置app_cluster应用集群
通道配置message消息(由消息模板或聚合消息模板生成)
通道配置message_json消息 json 字符串(message 值的 json格式)
通道配置recipients_uids接收人用户 ID 列表,逗号分隔形式
通道配置at_recipients@接收人列表 的值
通道配置recipients_json_array接收人列表 json 数组,用于钉钉群消息 @接收人

14.6. 告警 API 调用示例

本节提供脚本示例供用户了解如何对接告警 API 及测试告警 API 。

调用 OCP 接口示例

以下脚本以“推送告警事件接口”为例,介绍如何调用该接口。

说明

推送告警事件是指将告警推送给 OCP ,让 OCP 来处理告警消息。

#!/usr/bin/env python  
# -\*- coding: utf-8 -\*-

import base64
import requests
import json

data = {
"alarmType": "your_alarm_type",
"labels": {"key":"value"},
"target":"alarm_target",
}

base64userpass = base64.b64encode('{0}:{1}'.format('username', 'password'))
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
"Authorization": "Basic %s" % base64userpass,
}

resp = requests.post(url='http://192.168.1.1:8080/api/v2/alarm/alarms', headers=headers, data=json.dumps(data))
jresp = json.loads(resp.text)
print(jresp)

对接 OCP 告警示例

OCP 产生告警后,告警消息通过告警通道发送出去,通道可配置 Shell 脚本和 Python 脚本。该示例描述如何将告警通过通道发送出去。send_alarm

函数通过 os.environ 从环境变量获取告警相关的变量值,支持的变量列表可参见 OCP 告警模板变量

以下为 Python 脚本示例:

#!/usr/bin/env python  
# -\*- coding: utf-8 -\*-

# 注意:脚本内容第一行必须是 shebang 指定执行的程序,只支持 python 和 bash

import os
import sys

def send_alarm():
message = os.environ['message']
print("告警消息内容为:{}".format(message))
with open("./alarm_output.txt", "a") as file_object:
file_object.write("{}\\n".format(message))

def main():
"""
若发送成功,返回值为 0
若发送失败,错误输出到 stderr,返回值不为 0
"""
try:
send_alarm()
print("send alarm success")
return 0
except Exception as e:
sys.stderr.write(str(e))
return 1

if \__name_\_ == "__main__":
sys.exit(main())

应用举例

如需测试告警链路是否正常即告警是否可以推送到第三方告警平台,除了可以:

  • 在 OCP 触发告警:

    暂时停止 OCP-Agent 来触发 Agent 不可用相关告警如 exporter数量不足

    告警。

    1. 查看第三方平台是否收到该告警。
  • OCP 通道设置中有测试功能,可直接通过 发送测试消息 按钮进行测试。参考 新建告警通道

    还可以通过上述“推送 OCP 告警事件接口”来构造告警,并通过告警通道脚本来发送告警到第三方平台。

14.7. 后台任务列表

本节主要列举了 OCP 内部的常驻的后台任务,是由 OCP Server 定期触发并执行的一类任务总称,主要用于维护 OCP 以及被管理目标的状态检查、数据清理。

后台任务的调度和运行历史,可以参考 OCP 元数据库(MetaDB)中的 dag_instance

和 task_instance

表的详情(通过 dag_instance.id = task_instance.dag_id

进行 join

查询)。 dag_instance 记录的是整个后台任务的执行详情,而 task_instance 记录的是当前后台任务下每个子任务的执行详情。

后台任务执行的日志,可以到 logging.file

配置参数指定的 OCP 日志文件中,根据特定关键字搜索。OCP 日志文件默认为 \${user.home}/logs/ocp/ocp.log

以下是常驻后台任务列表,包含任务名、任务描述、备注、状态排查等信息,可用于 OCP 系统管理员的参考和问题排查。

后台任务列表

任务名称任务描述调度表达式问题排查 - 数据库问题排查 - OCP日志
Archive alarm history data归档过期的告警屏蔽配置与通知信息。0 0 3 * * *ocp2_alarm_filter (告警屏蔽配置) ocp2_alarm_notification (告警通知) ocp2_alarm_filter_history (屏蔽配置历史) ocp2_alarm_notification_history (通知历史)"Archive expired alarm history data: result=archive [filter|notification] success, affectRows=xxx"
Sync all cluster info定期同步 OCP 管理的 OceanBase 集群信息,并更新到 ob_cluster 表。 仅当 ob_cluster 表的 operateStatus 为NORMAL,且 clusterStatus 为 RUNNING 时进行更新。0 * * * * *ob_cluster (OCP 管理的集群信息)"cluster sync success, cluster= [id=xx,name=xx,..]" -- 成功 "cluster sync failed, cluster=xxx, exceptionType=xxx, message=xxx" -- 异常 -- 同步过程日志 " syncForCluster start, clusterId=xx init clusterSyncContext, context=xx create clusterOperator, clusterId=xx get current from ob cluster, clusterId=xx updateZones done, clusterId=xx syncForCluster done, clusterId=xx "
Refresh config properties刷新 OCP 的配置信息。0 */10 * * * *config_properties (OCP 系统参数配置)"Refresh config properties on [host:port] at [date & time] "
Maintain partition for monitordb处理 monitor 租户的分区,每天会按照特定的策略为分区表新建新的分区,删除过期的分区。0 0 1 * * *Monitor DB 数据库: ob_cluster_system_event (采集的 OceanBase Root Service 事件) ob_metric_data_1 (每秒采集的监控数据) ob_metric_data_60 (每 60 秒采集的监控数据)-- 分区维护成功 "partition maintain start partition maintain success" -- 分区维护失败 "partition maintain failed [exception msg]"
Sync system event同步系统事件,从 OB 集群中,定期同步 Root Service 事件到 monitordb 的 ob_cluster_system_event。0 */10 * * * *Monitor DB 数据库: ob_cluster_system_event (采集的 OceanBase Root Service 事件) OceanBase 内部表: oceanbase.__all_rootservice_event_history-- 同步成功 "Batch saved [记录数] events to database for cluster [cluster id] Sync-ed [记录数] system events for cluster [cluster id], startTime [开始时间], endTime [结束时间], limit [limit], offset [offset] Finished sync system events: cluster [cluster id], startTime [起始时间], endTime [结束时间] " -- 同步失败 "An exception occurred when saving events [exception log]"
Check all cluster status定期检查 ob_cluster 表中OceanBase 集群的“存活状态”(通过测试建立数据库连接来检查)。如果不成功,则打印错误日志,并发送告警。0 * * * * *ob_cluster (OCP 管理的集群信息)-- cluster 能连接 "check cluster status okay, clusterId=[cluster id], obVersion=[ob version]" -- cluster 不能连接 "check cluster status unavailable, clusterId=[cluster id], failedReason=[exception msg]" -- 告警类别与关键字 "ob_cluster_status_check_failed" + "cluster connect check"
Check host status检查 host 上 pos_proxy 能否执行远程命令(whoami),如果执行失败会发送报警,并修改主机状态 (OFFLINE),如果正常会将状态修改为正常状态 (AVAILABLE, ONLINE)。 检查 host 上 node_exporter 数量,如果数量不对,则打印异常信息并发送告警。0 * * * * *compute_host.status compute_host_agent.last_available_time ocp_exporter_address"Host agent check result: current OS user is root" -- agent 检查成功 "Check exporter status: host [id] desired exporter count: [number], actual exporter count: [number]" -- exporter 检查成功 "Host agent check failed: host [host id] reason [exception msg]" -- agent 检查失败 "Alarm: host_unavailable for host ip [ip address]" -- exporter 检查失败 "Alarm: no_enough_exporter for host [id]" -- exporter 检查失败 "host_unavailable" -- agent 失败告警类别 "no_enough_exporter" -- exporter 失败告警类别
Submit scheduled dag实现了类似于主机上 crontab 的功能,用于提交用户自定义的定时任务,会检查用户定义的调度表达式和当前实际比较,满足条件,则提交用户定义的任务;否则更新 dag_schedule 表对应记录状态为 ABNORMAL。0 * * * * *dag_schedule (任务调度详情) dag_instance (后台任务运行详情)-- 当前无用户自定义任务 "no cron job available in dag_schedule" -- 提交自定义任务出错 "failed to get template for class [java class name], got exception: [exception msg]"
Clean ocp task log files清理 OCP 主机上 task 日志。0 0 1 * * *OCP 清理日志的Python 脚本: 'user.home' -> '/ocp-server/python-task/src/task/ob_task_clean_log.py' 待清理的 Task 日志目录: 'user.home' -> '/logs/task/' 清理日志的 Python 进程日志文件: 'user.home' -> '/logs/task/task.2.xxx.log' OCP 清理任务异常日志: "failed to clean task log files: [exception msg]"
Collect all cluster compaction info收集所有集群的合并信息。0 * * * * *ob_cluster_compaction (OB 集群合并记录) ob_zone_compaction (OB Zone合并记录) ob_server_compaction (OB Server 合并记录) ob_tenant_compaction_stats (OB 租户合并记录)-- 收集成功 "Update cluster [cluster id] compaction status: from [xx] to [xx]" "Compaction post collect done, clusterId= [cluster id], version=[version]" -- 收集失败 "Skip collect for not RUNNING cluster, clusterId=[cluster id], status=[xx]" "Skip collect for version 1, the first compaction will be version 2" "Validate compaction version failed: [reason]"
Sync tenant information同步租户信息。30 0/2 * * * ?ob_tenant (OB 租户信息表)-- 同步成功 "[SyncAllTenantInfoTask] begin to sync tenant." "[SyncAllTenantInfoTask] sync tenants of specified cluster, clusterId=[cluster id]" "[SyncAllTenantInfoTask] sync tenant finished." -- 同步失败 "Zero tenants found for cluster [cluster id]"
Detect alarms on schedule备份恢复相关的告警检测器。0 */1 * * * *dag_schedule (任务调度详情) dag_instance (后台任务运行详情)--执行成功 generate tasks, templateName=Detect alarms, nodeCount=1, taskCount=1 set state running for task: [task id] set state successful for task: [task id] --执行失败 打印异常调用栈 关键词:BackupAlarmService
Clean expired data and log files on schedule备份恢复相关的定时清理器,清理过期数据和清理过期日志。0 0 0 * * *dag_schedule (任务调度详情) dag_instance (后台任务运行详情)--执行成功 generate tasks, templateName=Clean expired data and log files, nodeCount=1, taskCount=1 set state running for task: [task id] set state successful for task: [task id] --执行失败 打印异常调用栈 关键词:BackupCleanService
Check system obproxy检查 OCP 所使用的系统 obproxy 的健康状态。0 * * * * *OCP 系统参数: ocp.system.obproxy.address ocp.system.obproxy.port--系统 obproxy 状态正常 打印日志 system obproxy is running --系统 obproxy 状态不正常 打印日志 system obproxy is down 同时,会推送一条告警 --检查方法执行失败 打印异常调用栈, check connection of system obproxy failed. exception: xxx
Collect cluster daily metric采集 daily 统计的集群监控指标。0 0 5 * * *
Check obproxy检查业务 obproxy 是否正常。0 * * * * *obproxy_server ( obproxy server 元数据表)
Sync root service list同步 ob 的 rs_list 地址。0 */2 * * * ?ob_cluster (OCP 管理的集群信息)
Sync obpaas information同步 obpass 信息。40 0/2 * * * ?
SQL stats partitioningSQL 性能表的分区守护。0 0 */1 * * *dag_schedule (任务调度详情) dag_instance (后台任务运行详情) OCP 系统参数:ocp.perf.sql.partition-worker-disabled ,可关闭任务逻辑。
Refresh agent configOCP 将 Agent 配置信息定期推送到每台主机上。0 */10 * * * *OCP 日志:Refreshing OCP agent configuration ,主机上配置信息存储的位置:/home/admin/ocp_agent/conf/config.conf 配置信息文件的内容为: [OCP_API] api_url =http://xxx.xx.xxx.xxx:8080/services [HOST] ip = xxx.xx.xxx.xxx [CLUSTER] name = xxx [OBPROXY] id = x name = _obproxy_ port = xxxx exporterport = XXXX(与 obproxy_ port 为不同端口)

调度表达式

调度使用的如下格式的 Cron 表达式,包含了 6 位字段,如下:

second, minute, hour, day of month, month, day(s) of week

Cron 表达式字段和取值

字段名取值范围支持的特殊字符
second0-59,-*/
minute0-59,-*/
hour0-23,-*/
day of month1-31,-*/?
month1-12 或 JAN-DEC,-*/
day of week1-7 或 MON-SUN,-*/?

表达式示例:

表达式说明
0 0 * * * *“0 秒 0 分” - 每小时运行一次,在 0 秒 0 分启动。
*/10 * * * * *每 10 秒钟运行一次。
0 0 8-10 * * *每天的 8, 9 和 10 点钟运行一次,在 0 秒 0 分启动。
0 0/30 8-10 * * *每天 8:00, 8:30, 9:00, 9:30,10:00 和 10:30 运行。
0 0 9-17 * * MON-FRI从周一到周五的上午 9 点到下午 5 点运行。
0 0 9-17 * * 1-5从周一到周五的上午 9 点到下午 5 点运行,使用数字表达周几,1 代表周一,7 代表周日。与 crontab 的表达式稍有不同。
0 0 0 25 12 ?每年 12/25 日凌晨 0 点 0 分 0 秒。

14.8. 监控指标

本节介绍 OCP 有哪些监控指标及各指标的含义和计算方法。

指标分组指标名称指标解释计算表达式
QPSsql_all_count每秒处理 SQL 语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
QPSsql_select_count每秒处理 Select 语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
QPSsql_insert_count每秒处理 Insert 语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
QPSsql_update_count每秒处理 Update 语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
QPSsql_replace_count每秒处理 Replace 语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
QPSsql_delete_count每秒处理 Delete 语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
响应时间sql_all_rt服务端每条 SQL 语句平均处理耗时(sum(rate(sysstat_value{metric_group="sysstat",stat_id="40003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40007",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40009",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)) /(sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
响应时间sql_select_rt服务端每条 Select 语句平均处理耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="40001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
响应时间sql_insert_rt服务端每条 Insert 语句平均处理耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="40003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
响应时间sql_update_rt服务端每条 Update 语句平均处理耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="40007",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
响应时间sql_replace_rt服务端每条 Replace 语句平均处理耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="40005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
响应时间sql_delete_rt服务端每条 Delete 语句平均处理耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="40009",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
活跃会话数active_session当前活跃会话数sum(active_sessions{metric_group="all_virtual_processlist",@LABELS}) by (@GBLABELS)
SQL 执行计划类别sql_local_count每秒处理本地执行数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40010",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
SQL 执行计划类别sql_remote_count每秒处理远程执行计划数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40011",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
SQL 执行计划类别sql_distributed_count每秒处理分布式执行计划数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40012",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
等待事件wait_event_count每秒等待事件次数sum(rate(total_waits{metric_group="waitevent",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
等待事件耗时wait_event_rt等待事件平均耗时sum(rate(time_wait{metric_group="waitevent",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(total_waits{metric_group="waitevent",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
请求等待队列request_queue_count平均每秒 SQL 进等待队列的次数sum(rate(sysstat_value{metric_group="sysstat",stat_id="20001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
请求等待队列耗时request_queue_timeSQL 在等待队列中等待耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="20002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="20001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
TPStransaction_count每秒处理事务数sum(rate(sysstat_value{metric_group="sysstat",stat_id="30005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事务响应时间transaction_rt服务端每个事务平均处理耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="30006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="30005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事务日志数trans_commit_log_count每秒提交的事务日志数sum(rate(sysstat_value{metric_group="sysstat",stat_id="30002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事务日志量clog_trans_log_total_size每秒提交的事务日志大小sum(rate(sysstat_value{metric_group="sysstat",stat_id="80057",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事务日志耗时trans_commit_log_sync_rt每次事务日志网络同步平均耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="30000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="30001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
锁等待memstore_write_lock_succ_count写锁等待成功次数sum(rate(sysstat_value{metric_group="sysstat",stat_id="60021",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
锁等待memstore_write_lock_fail_count写锁等待失败次数sum(rate(sysstat_value{metric_group="sysstat",stat_id="60022",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
等锁耗时memstore_write_lock_wait_time写锁平均等待耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="60023",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / (sum(rate(sysstat_value{metric_group="sysstat",stat_id="60021",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="60022",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
MEMStoretotal_memstore_usedMEMStore 总大小sum(sysstat_value{metric_group="sysstat",stat_id="130001",@LABELS}) by (@GBLABELS) / 1048576
MEMStoreactive_memstore_used活跃 MEMStore 大小sum(sysstat_value{metric_group="sysstat",stat_id="130000",@LABELS}) by (@GBLABELS) / 1048576
IOPSio_read_countSSStore 每秒读次数sum(rate(sysstat_value{metric_group="sysstat",stat_id="60000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IOPSio_write_countSSStore 每秒写次数sum(rate(sysstat_value{metric_group="sysstat",stat_id="60003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 耗时io_read_rtSSStore 每次读取平均耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="60001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="60000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 耗时io_write_rtSSStore 每次写入平均耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="60004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="60003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 吞吐率io_read_sizeSSStore 每秒读取数据量sum(rate(sysstat_value{metric_group="sysstat",stat_id="60002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 吞吐率io_write_sizeSSStore 每秒写入数据量sum(rate(sysstat_value{metric_group="sysstat",stat_id="60005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
缓存大小block_cache_size块缓存大小sum(cache_size{metric_group="all_virtual_kvcache_info",cache_name="user_block_cache",@LABELS}) by (@GBLABELS) / 1048576
缓存大小row_cache_size行缓存大小sum(cache_size{metric_group="all_virtual_kvcache_info",cache_name="user_row_cache",@LABELS}) by (@GBLABELS) / 1048576
缓存大小plan_cache_size执行计划缓存大小sum(mem_used{metric_group="plan_cache_stat",@LABELS}) by (@GBLABELS) / 1048576
缓存命中率block_cache_hit_ratio块缓存命中率100 * 1 / (1 + sum(rate(sysstat_value{metric_group="sysstat",stat_id="50009",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="50008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
缓存命中率row_cache_hit_ratio行缓存命中率100 * 1 / (1 + sum(rate(sysstat_value{metric_group="sysstat",stat_id="50001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="50000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
缓存命中率plan_cache_hit_ratio执行计划缓存命中率100 * sum(rate(hit_count{metric_group="plan_cache_stat",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(access_count{metric_group="plan_cache_stat",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
QPSsql_all_count每秒处理 SQL 语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
查询响应时间sql_all_rt服务端每条 SQL 语句平均处理耗时(sum(rate(sysstat_value{metric_group="sysstat",stat_id="40003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40007",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40009",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)) /(sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
TPStransaction_count每秒处理事务数sum(rate(sysstat_value{metric_group="sysstat",stat_id="30005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事务响应时间transaction_rt服务端每个事务平均处理耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="30006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="30005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
活跃会话数active_session当前活跃会话数sum(active_sessions{metric_group="all_virtual_processlist",@LABELS}) by (@GBLABELS)
请求等待队列耗时request_queue_timeSQL 在等待队列中等待耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="20002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="20001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
Linux 系统负载load1过去1分钟系统平均负载avg(node_load1{@LABELS}) by (@GBLABELS)
Linux 系统负载load5过去5分钟系统平均负载avg(node_load5{@LABELS}) by (@GBLABELS)
Linux 系统负载load15过去15分钟系统平均负载avg(node_load15{@LABELS}) by (@GBLABELS)
CPU 使用率cpu_percentCPU 使用率100 * (1 - sum(rate(node_cpu_seconds_total{mode="idle", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(node_cpu_seconds_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
内存memory_used使用物理内存大小(avg(node_memory_MemTotal_bytes{@LABELS}) by (@GBLABELS) - avg(node_memory_MemFree_bytes{@LABELS}) by (@GBLABELS) - avg(node_memory_Cached_bytes{@LABELS}) by (@GBLABELS) - avg(node_memory_Buffers_bytes{@LABELS}) by (@GBLABELS)) / 1073741824
内存memory_buffers内核 Buffer Cache 大小avg(node_memory_Buffers_bytes{@LABELS}) by (@GBLABELS) / 1073741824
内存memory_free可用物理内存大小avg(node_memory_MemFree_bytes{@LABELS}) by (@GBLABELS) / 1073741824
IOPSio_read每秒读次数avg(rate(node_disk_reads_completed_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IOPSio_write每秒写次数avg(rate(node_disk_writes_completed_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 耗时io_read_time平均每次 IO 读取耗时1000000 * avg(rate(node_disk_read_time_seconds_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 耗时io_write_time平均每次 IO 写入耗时1000000 * avg(rate(node_disk_write_time_seconds_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 吞吐率io_read_byte每次读取数据量avg(rate(node_disk_read_bytes_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / 1048576
IO 吞吐率io_write_byte每次写入数据量avg(rate(node_disk_written_bytes_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / 1048576
网络吞吐率net_recv每秒接收数据量avg(rate(node_network_receive_bytes_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / 1048576
网络吞吐率net_send每秒发送数据量avg(rate(node_network_transmit_bytes_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / 1048576
事务日志数trans_commit_log_count每秒提交的事务日志数sum(rate(sysstat_value{metric_group="sysstat",stat_id="30002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事务日志量clog_trans_log_total_size每秒提交的事务日志大小sum(rate(sysstat_value{metric_group="sysstat",stat_id="80057",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事务日志耗时clog_write_disk_rt每次事务日志写盘平均耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="80041",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="80040",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事务日志耗时trans_commit_log_sync_rt每次事务日志网络同步平均耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="30000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="30001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IOPSio_read_countSSStore 每秒读次数sum(rate(sysstat_value{metric_group="sysstat",stat_id="60000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IOPSio_write_countSSStore 每秒写次数sum(rate(sysstat_value{metric_group="sysstat",stat_id="60003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 耗时io_read_rtSSStore 每次读取平均耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="60001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="60000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 耗时io_write_rtSSStore 每次写入平均耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="60004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="60003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 吞吐率io_read_sizeSSStore 每秒读取数据量sum(rate(sysstat_value{metric_group="sysstat",stat_id="60002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 吞吐率io_write_sizeSSStore 每秒写入数据量sum(rate(sysstat_value{metric_group="sysstat",stat_id="60005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
CPU 使用率cpu_percentCPU 使用率100 * (1 - sum(rate(node_cpu_seconds_total{mode="idle", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(node_cpu_seconds_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
QPSsql_all_count每秒处理 SQL 语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
查询响应时间sql_all_rt服务端每条 SQL 语句平均处理耗时(sum(rate(sysstat_value{metric_group="sysstat",stat_id="40003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40007",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40009",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)) /(sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
活跃会话数active_session当前活跃会话数sum(active_sessions{metric_group="all_virtual_processlist",@LABELS}) by (@GBLABELS)
QPSsql_all_count每秒处理sql语句数sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
TPStransaction_count每秒处理事务数sum(rate(sysstat_value{metric_group="sysstat",stat_id="30005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
SQL 响应时间sql_all_rt服务端每条 SQL 语句平均处理耗时(sum(rate(sysstat_value{metric_group="sysstat",stat_id="40003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40007",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40009",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)) /(sum(rate(sysstat_value{metric_group="sysstat",stat_id="40002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40004",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40008",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="40000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
事务响应时间transaction_rt服务端每个事务平均处理耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="30006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="30005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
活跃会话数active_session当前活跃会话数sum(active_sessions{metric_group="all_virtual_processlist",@LABELS}) by (@GBLABELS)
事件等待_次数wait_event_count每秒等待事件次数sum(rate(total_waits{metric_group="waitevent",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
事件等待_时间wait_event_rt等待事件平均耗时sum(rate(time_wait{metric_group="waitevent",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(total_waits{metric_group="waitevent",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
容量_表数量table_count表数量max(table_count{metric_group="all_table",@LABELS}) by (@GBLABELS)
容量_分区数量partition_count分区数量sum(partition_count{metric_group="all_meta_table",@LABELS}) by (@GBLABELS)
事务日志耗时clog_write_disk_rt每次事务日志写盘平均耗时sum(rate(sysstat_value{metric_group="sysstat",stat_id="80041",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="80040",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
MEMStoremajor_freeze_trigger触发合并阈值sum(sysstat_value{metric_group="sysstat",stat_id="130002",@LABELS}) by (@GBLABELS) / 1048576
MEMStorememstore_limitMEMStore的limitsum(sysstat_value{metric_group="sysstat",stat_id="130004",@LABELS}) by (@GBLABELS) / 1048576
Linux 系统负载load1过去1分钟系统平均负载avg(node_load1{@LABELS}) by (@GBLABELS)
Linux 系统负载load5过去5分钟系统平均负载avg(node_load5{@LABELS}) by (@GBLABELS)
Linux 系统负载load15过去15分钟系统平均负载avg(node_load15{@LABELS}) by (@GBLABELS)
CPU 使用率cpu_percentCPU 使用率100 * (1 - sum(rate(node_cpu_seconds_total{mode="idle", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(node_cpu_seconds_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS))
IOPSio_read每秒读次数avg(rate(node_disk_reads_completed_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IOPSio_write每秒写次数avg(rate(node_disk_writes_completed_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 耗时io_read_time每秒读取平均耗时1000000 * avg(rate(node_disk_read_time_seconds_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 耗时io_write_time每秒写入平均耗时1000000 * avg(rate(node_disk_write_time_seconds_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
IO 吞吐率io_read_byte每次读取数据量avg(rate(node_disk_read_bytes_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / 1048576
IO 吞吐率io_write_byte每次写入数据量avg(rate(node_disk_written_bytes_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / 1048576
网络吞吐率net_recv每秒接收数据量avg(rate(node_network_receive_bytes_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / 1048576
网络吞吐率net_send每秒发送数据量avg(rate(node_network_transmit_bytes_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / 1048576
内存memory_used使用物理内存大小(avg(node_memory_MemTotal_bytes{@LABELS}) by (@GBLABELS) - avg(node_memory_MemFree_bytes{@LABELS}) by (@GBLABELS) - avg(node_memory_Cached_bytes{@LABELS}) by (@GBLABELS) - avg(node_memory_Buffers_bytes{@LABELS}) by (@GBLABELS)) / 1073741824
内存memory_buffers内核 Buffer Cache 大小avg(node_memory_Buffers_bytes{@LABELS}) by (@GBLABELS) / 1073741824
内存memory_free可用物理内存大小avg(node_memory_MemFree_bytes{@LABELS}) by (@GBLABELS) / 1073741824
磁盘host_disk_used磁盘分区已使用容量sum(host_partition_volume_used{@LABELS}) by (@GBLABELS)
transactiontransaction_total每秒事务数sum(rate(odp_transaction_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_commit每秒 commit 请求数sum(rate(odp_sql_request_total{sqltype="COMMIT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_delete每秒 delete 请求数sum(rate(odp_sql_request_total{sqltype="DELETE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_insert每秒 insert 请求数sum(rate(odp_sql_request_total{sqltype="INSERT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_large每秒大请求数sum(rate(odp_sql_request_total{sqlLarge = "large", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_select每秒 select 请求数sum(rate(odp_sql_request_total{sqltype="SELECT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_sequence每秒 sequence 请求数sum(rate(odp_sql_request_total{sqltype="SEQUENCE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_slow每秒慢请求数sum(rate(odp_sql_request_total{slowQuery = "true", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_update每秒 update 请求数sum(rate(odp_sql_request_total{sqltype="UPDATE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_others每秒其他请求数sum(rate(odp_sql_request_total{sqltype="OTHERS", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
connection_clientcurrent_session_client客户端连接数sum(odp_current_session{sessionType="client",@LABELS}) by (@GBLABELS)
connection_servercurrent_session_server服务端连接数sum(odp_current_session{sessionType="server",@LABELS}) by (@GBLABELS)
sql_response_timerequest_cost_commit平均每次 commit 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="COMMIT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="COMMIT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_delete平均每次 delete 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="DELETE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="DELETE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_insert平均每次 insert 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="INSERT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="INSERT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_prepare_send_request_time平均每次请求发送准备耗时sum(rate(odp_sql_cost_total{timeType="prepare", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_server_process_request_time平均每次服务端处理请求耗时sum(rate(odp_sql_cost_total{timeType="server", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_select平均每次 select 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="SELECT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="SELECT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_sequence平均每次 sequence 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="SEQUENCE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="SEQUENCE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_update平均每次 update 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="UPDATE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="UPDATE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_others平均每次其他请求耗时sum(rate(odp_sql_cost_total{sqltype="OTHERS", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="OTHERS", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
error_packageelogs_total_error平均每秒 error 日志数sum(rate(odp_elogs_total{logType = "error",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
error_packageelogs_total_warn平均每秒 warn 日志数sum(rate(odp_elogs_total{logType = "warn",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_hit平均每秒路由表命中次数sum(rate(odp_entry_total{routeHit="true",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_partition平均每秒查询 partition entry 的次数sum(rate(odp_entry_total{entryType="partition_entry",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_route平均每秒查询 route entry 的次数sum(rate(odp_entry_total{entryType="route",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_success平均每秒路由表查询成功次数sum(rate(odp_entry_total{routeResult="true",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_table平均每秒查询 table entry 的次数sum(rate(odp_entry_total{entryType="table_entry",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
net_request_bytesrequest_byte_client_request客户端 request 字节数sum(rate(odp_request_byte{sessionType="client",transType="request",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
net_request_bytesrequest_byte_client_response客户端 reponse 字节数sum(rate(odp_request_byte{sessionType="client",transType="response",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
net_request_bytesrequest_byte_server_request服务端 request 字节数sum(rate(odp_request_byte{sessionType="server",transType="request",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
net_request_bytesrequest_byte_server_response服务端 response 字节数sum(rate(odp_request_byte{sessionType="server",transType="response",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
transactiontransaction_total每秒事务数sum(rate(odp_transaction_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_commit每秒 commit 请求数sum(rate(odp_sql_request_total{sqltype="COMMIT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_delete每秒 delete 请求数sum(rate(odp_sql_request_total{sqltype="DELETE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_insert每秒 insert 请求数sum(rate(odp_sql_request_total{sqltype="INSERT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_large每秒大请求数sum(rate(odp_sql_request_total{sqlLarge = "large", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_select每秒 select 请求数sum(rate(odp_sql_request_total{sqltype="SELECT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_sequence每秒 sequence 请求数sum(rate(odp_sql_request_total{sqltype="SEQUENCE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_slow每秒慢请求数sum(rate(odp_sql_request_total{slowQuery = "true", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_update每秒 update 请求数sum(rate(odp_sql_request_total{sqltype="UPDATE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
requestrequest_total_others每秒其他请求数sum(rate(odp_sql_request_total{sqltype="OTHERS", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
connection_clientcurrent_session_client客户端连接数sum(odp_current_session{sessionType="client",@LABELS}) by (@GBLABELS)
connection_servercurrent_session_server服务端连接数sum(odp_current_session{sessionType="server",@LABELS}) by (@GBLABELS)
sql_response_timerequest_cost_commit平均每次 commit 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="COMMIT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="COMMIT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_delete平均每次 delete 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="DELETE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="DELETE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_insert平均每次 insert 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="INSERT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="INSERT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_prepare_send_request_time平均每次请求发送准备耗时sum(rate(odp_sql_cost_total{timeType="prepare", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_server_process_request_time平均每次服务端处理请求耗时sum(rate(odp_sql_cost_total{timeType="server", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_select平均每次 select 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="SELECT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="SELECT", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_sequence平均每次 sequence 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="SEQUENCE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="SEQUENCE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_update平均每次 update 请求耗时sum(rate(odp_sql_cost_total{timeType="total",sqltype="UPDATE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="UPDATE", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
sql_response_timerequest_cost_others平均每次其他请求耗时sum(rate(odp_sql_cost_total{sqltype="OTHERS", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) / sum(rate(odp_sql_request_total{sqltype="OTHERS", @LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
error_packageelogs_total_error平均每秒 error 日志数sum(rate(odp_elogs_total{logType = "error",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
error_packageelogs_total_warn平均每秒 warn 日志数sum(rate(odp_elogs_total{logType = "warn",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_hit平均每秒路由表命中次数sum(rate(odp_entry_total{routeHit="true",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_partition平均每秒查询 partition entry 的次数sum(rate(odp_entry_total{entryType="partition_entry",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_route平均每秒查询 route entry 的次数sum(rate(odp_entry_total{entryType="route",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_success平均每秒路由表查询成功次数sum(rate(odp_entry_total{routeResult="true",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
route_tableentry_total_table平均每秒查询 table entry 的次数sum(rate(odp_entry_total{entryType="table_entry",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
net_request_bytesrequest_byte_client_request客户端 request 字节数sum(rate(odp_request_byte{sessionType="client",transType="request",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
net_request_bytesrequest_byte_client_response客户端 reponse 字节数sum(rate(odp_request_byte{sessionType="client",transType="response",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
net_request_bytesrequest_byte_server_request服务端 request 字节数sum(rate(odp_request_byte{sessionType="server",transType="request",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
net_request_bytesrequest_byte_server_response服务端 response 字节数sum(rate(odp_request_byte{sessionType="server",transType="response",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
CPU 使用率ob_cpu_percent租户的 CPU 使用率100 * sum(sysstat_value{metric_group="sysstat",stat_id="140006",@LABELS}) by (@GBLABELS) / sum(sysstat_value{metric_group="sysstat",stat_id="140005",@LABELS}) by (@GBLABELS)
MEMStoretenant_memory_usage_percent租户的 MEMStore 使用百分比100 * avg(mem_used{metric_group="tenant_memory_info",@LABELS}) by (@GBLABELS) / avg(mem_hold{metric_group="tenant_memory_info",@LABELS}) by (@GBLABELS)'
Rpc 包吞吐量rpc_packet_in_bytes单位时间内 RPC 收包的数据量(Byte)sum(rate(sysstat_value{metric_group="sysstat",stat_id="10001",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
Rpc 包吞吐量rpc_packet_out_bytes单位时间内 RPC 发包的数据量(Byte)sum(rate(sysstat_value{metric_group="sysstat",stat_id="10003",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
Rpc 包耗时rpc_packet_in_rtRPC 平均收包耗时(微秒)(sum(rate(sysstat_value{metric_group="sysstat",stat_id="10005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="10006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="10000",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)
Rpc 包耗时rpc_packet_out_rtRPC 平均发包耗时(微秒)(sum(rate(sysstat_value{metric_group="sysstat",stat_id="10005",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS) + sum(rate(sysstat_value{metric_group="sysstat",stat_id="10006",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)) / sum(rate(sysstat_value{metric_group="sysstat",stat_id="10002",@LABELS}[@INTERVAL]) by (@GBLABELS)) by (@GBLABELS)

14.9. 告警通道配置样例

本文档为您列举常见的告警通道配置样例,供您参考。

钉钉群消息

可以基于钉钉群机器人的 Webhook 实现群消息发送,群机器人介绍参见 钉钉群机器人官方文档

配置步骤

  1. 在钉钉群中配置机器人。

    在钉钉群中配置群机器人,需要记录 Webhook URL。目前钉钉群自定义机器人需要进行安全配置才可以使用,OCP 告警 HTTP 通道仅支持 自定义关键词IP地址(段)安全设置。钉钉机器人的安全设置界面如下图所示。

    p169307

    • 设置 自定义关键词。设置的自定义关键词和 OCP 告警通道配置的消息模板匹配即可,如果默认模板的第一行内容包含“OCP告警通知”,可以配置自定义关键词为 “OCP告警”。

      设置 IP 地址(段)。这里需要注意,设置的 IP 地址必须是 OCP 服务器的公网 IP,可使用命令 curl -w "\n\n" -s http://whatismijnip.nl

      查看服务器公网 IP。由于服务器可能没有固定的公网 IP,请联系您的网络管理员获取服务器的公网 IP 网段。

  2. 在告警通道中新建通道,通道类型选择 HTTP,接收人字段选择 手机号,是否群消息通道勾选

  3. 配置通知内容。

    • 消息模板

      OCP告警通知-单条告警
      - 名称:\${alarm_name}
      - 级别:\${alarm_level}
      - 告警对象:\${alarm_target}
      - 概述:\${alarm_summary}
      - 生成时间: \${alarm_active_at}
      - 详情:\${alarm_description}
      - OCP链接:\${alarm_url}

      • 聚合消息模板

        OCP告警通知-多条告警
        - 名称:\${alarm_name}
        - 级别:\${alarm_level}
        - 告警数量:\${alarm_count}
        - 聚合分组:\${alarm_group_by}
        - 告警对象:\${alarm_target}
        - 生成时间: \${alarm_active_at}

  4. 配置通道

    • 请求方法:POST

      URL 模板:Content-Type:application/json; charset=utf-8

      说明

      URL 模板即为步骤 1 中记录的 Webhook URL。

      Header 模板:Content-Type:application/json; charset=utf-8

    • Body 模板

      {
      "msgtype": "text",
      "text": {
      "content": \${message_json}
      },
      "at": {
      "atMobiles": \${recipients_json_array},
      "isAtAll": false
      }
      }

      说明

      这里 Body 的格式为 Json,引用 _json

      和 json_array

      结尾的变量时,不使用 "(双引号) 括起来,因为变量值已经加了 Json 序列化处理,加上 " 会导致 Json 格式错误。 作为对比,引用非 Json 变量时需要使用 " 括起来,例如 "{message}"

      钉钉群消息 markdown 格式

      钉钉消息支持 markdown,以下样例借助 markdown 的格式化能力配置富文本消息。 配置方式和文本格式的消息是一样的,差别在于几个模板的配置。 比如通过引用 \${alarm_level_color}

实现消息字体颜色的配置。

钉钉支持消息类型参见 钉钉开发文档

  • 消息模板

    ${alarm_level_color}>OCP聚合通知-单条告警
    > - 名称:`\${alarm_name}`
    > - 级别:`\${alarm_level}`
    > - 告警对象:`\${alarm_target}`
    > - 概述:`\${alarm_summary}`
    > - 生成时间: `\${alarm_active_at}`
    > - 详情:`\${alarm_description}`

  • 聚合消息模板

    ${alarm_level_color}>OCP聚合通知-多条告警 > - 名称:`\${alarm_name}`
    > - 级别:`\${alarm_level}`
    > - 告警数量:`\${alarm_count}`
    > - 聚合分组:`\${alarm_group_by}`
    > - 告警对象:`\${alarm_target}`
    > - 生成时间: `\${alarm_active_at}`

  • Body 模板

    {
    "msgtype": "markdown",
    "markdown": {
    "title": "OCP告警钉钉消息markdown测试",
    "text": \${message_json}
    }
    }

    自定义脚本通道

    自定义脚本通道,是为了满足特殊的告警对接场景而设计的。一般用于无法通过 HTTP 的方式配置或者对告警格式有特殊要求的场景,您可以在脚本中定制一些特殊的逻辑。比如:告警时间的转换,对第三方告警网关默认参数的添加等,均可以通过自定义脚本通道来实现。

  • 基本信息:通道类型选择自定义脚本,其他选项根据具体需求进行选择。

  • 消息模板

    OCP告警通知-单条告警
    - 名称:\${alarm_name}
    - 级别:\${alarm_level}
    - 告警对象:\${alarm_target}
    - 概述:\${alarm_summary}
    - 生成时间:\${alarm_active_at}
    - 详情:\${alarm_description}
    - OCP链接:\${alarm_url}

  • 聚合消息模板

    OCP告警通知-多条告警
    - 名称:\${alarm_name}
    - 级别:\${alarm_level}
    - 告警数量:\${alarm_count}
    - 聚合分组:\${alarm_group_by}
    - 告警对象:\${alarm_target}
    - 生成时间:\${alarm_active_at}

    脚本文件名:系统默认有一个自定义脚本样例 alarm_send_script_demo.sh

    ,您可以在其基础上进行修改,也可以参考 Python 脚本示例Bash 脚本示例 新增自定义的脚本。在修改或新增文件时,请确保该脚本文件已存放在每个 OCP 的 /home/admin

    目录下。

  • 发送测试消息:调试脚本时,可以使用发送测试消息来测试,默认消息内容使用脚本中的变量\${message},请确保该变量在发送的消息体中。由于自定义脚本发送成功的判断逻辑需要视具体情况而定,系统认为只要脚本执行成功,即代表发送成功。不过,在浏览器的开发者模式中,用户可以根据发送测试消息对应的 _test 请求的 Response 内容进行调试。

    1738

    Python 脚本示例

    #!/usr/bin/env python  
# -\*- coding: utf-8 -\*-

# 注意:脚本内容第一行必须是 shebang 指定执行的程序,只支持 python 和 bash

import os
import sys


def send_alarm():
"""
可以通过 os.environ 从环境变量获取 告警相关的变量值。
支持的变量列表参见 《用户指南/附录4 OCP 告警模板变量》。
"""
message = os.environ['message']
print("告警消息内容为:{}".format(message))
with open("./alarm_output.txt", "a") as file_object:
file_object.write("{}\\n".format(message))


def main():
"""
若发送成功,返回值为 0
若发送失败,错误输出到 stderr,返回值不为 0
"""
try:
send_alarm()
print("send alarm success")
return 0
except Exception as e:
sys.stderr.write(str(e))
return 1


if __name__ == "__main__":
sys.exit(main())

SHELL 脚本示例

    #!/bin/env bash  

# should contains shebang in first line, only python/bash are supported

echo "Below is a list of alarm paras"

# below variables can be referenced by prefix "\$", for example, \$alarm_name or \${alarm_name}

echo "alarm_name:\$alarm_name"
echo "app_type:\$app_type"
echo "alarm_threshold:\$alarm_threshold"
echo "alarm_time=\$alarm_time"
echo "alarm_last_interval:\$alarm_last_interval"
echo "alarm_time:\$alarm_time"
echo "alarm_level:\$alarm_level"
echo "alarm_type:\$alarm_type"
echo "alarm_summary:\$alarm_summary"
echo "alarm_url:\$alarm_url"
echo "app:\$app"
echo "alarm_duration:\$alarm_duration"
echo "alarm_status:\$alarm_status"
echo "alarm_scope:\$alarm_scope"
echo "alarm_active_at:\$alarm_active_at"
echo "alarm_target:\$alarm_target"
echo "alarm_description:\$alarm_description"
echo "message:\$message"
echo "receiver:\$receiver"
echo "alarm_id:\$alarm_id"

# this function defines to how to assembly request by yourself according to your requirements
# this demo shows you how to send alarm to ding ding
function send() {
# this token is ding ding group token, please apply and assign it to variable token
token=''
# URL="https://oapi.dingtalk.com/robot/send?access_token=\$token"
URL=''
curl -X POST \${URL} -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content":"'"\${message}"'"}}'
return \$?
}

# invoke function to
send
return $?

14.10. OBProxy 参数说明

本页面为您介绍 OBProxy 的参数说明。创建 OBProxy 集群时,可在 参数设置 中配置启动参数。

启动参数

创建 OBProxy 集群时,可参考如下说明配置启动参数。若未配置,系统将按照默认值创建 OBProxy。

参数名默认值取值范围说明
app_namedropship-Proxy 的应用服务名。
automatic_match_work_threadtruetrue false是否根据 CPU 核数自动创建工作线程。如果该选项为 true,上限为 work_thread_num。
block_thread_num1[1, 4]OBProxy 阻塞型任务线程数,用于线程初始化。
bt_retry_times--已废弃,后续将从环境中删除。
enable_cpu_topologyfalsetrue false是否开启 CPU 亲和,即是否把每个 worker 线程绑定到不同的 CPU 上。
enable_metadb_usedfalsetrue falseOBProxy 运行时是否可访问 OCP 的 MetaDB。
enable_strict_kernel_releasefalsetrue false是否需要校验 OS kernel。 取值范围: true:仅 5u/6u/7u 规格的 RedHat 操作系统支持校验。 false:不校验 OS kernel,但 Proxy 可能不稳定。
frequent_accepttruetrue false是否初始化 net accept 参数。
grpc_client_num9[9,16]grpc 客户端数。
grpc_thread_num8[8,16]grpc 线程数。
listen_port2883(1024, 65536)OBProxy 的监听端口。
local_bound_ip0.0.0.0-OBProxy 的本地 IP。
net_accept_threads2[0, 8]执行 accept 的线程数。
obproxy_config_server_url--OCP 对外的 configurl 服务地址。
prometheus_cost_ms_unitfalsetrue false是否允许 prometheus 的成本单位为毫秒,默认为微秒。
prometheus_listen_port2884(1024, 65536)OBProxy prometheus 监听端口。
proxy_id0[0,255]OBProxy 的 ID,用于标识每个 OBProxy。当 proxy_service_mode 配置为 server 时,proxy_id 不可配置为 0。
proxy_service_modeclientclient serverOBProxy 的部署和服务模式。
rootservice_cluster_name--RootService 列表的默认集群名。
rootservice_list192.168.0.1:2881-RootService 列表。 格式为 ip1:sql_port1;ip2:sql_port2
skip_proxy_sys_private_checktruetrue false是否跳过 OBProxy 在私有网段的检查。
spool_thread_num--已废弃,后续将从环境中删除。
stack_size1MB[1MB, 10MB]线程栈大小,用于创建线程。
enable_proxy_scrambletruetrue false是否启用 OBProxy 的挑战随机数。
task_thread_num2[1, 4]OBProxy 任务线程数。
work_thread_num128[1, 128]OBProxy 工作线程数。 当 automatic_match_work_thread 为true 时,表示最大工作线程数。

14.11. MySQL 租户系统权限列表

本页面为您介绍系统权限列表。

权限类型列表

权限说明
ALTERALTER TABLE 的权限
CREATECREATE TABLE 的权限
DELETEDELETE 的权限
DROPDROP 的权限
INSERTINSERT 的权限
SELECTSELECT 的权限
UPDATEUPDATE 的权限
INDEXCREATE INDEX、DROP INDEX 的权限
CREATE VIEW创建、删除视图的权限
SHOW VIEWSHOW CREATE VIEW权限
CREATE USERCREATE USER、DROPUSER、RENAME USER和REVOKE ALLPRIVILEGES 的权限
PROCESSPROCESS 权限
SUPERSET GLOBAL 修改全局系统参数的权限
SHOW DATABASES全局 SHOW DATABASES 的权限
GRANT OPTIONGRANT OPTION 的权限

14.12. 组件监听端口列表

用于部署 OCP 配置网络访问权限时参考。

部署单元说明

部署单元说明
OCP-ServerOCP 管理服务程序 Docker
OCP-ConsoleOCP Web 管理控制台
OCP-Agent部署在 OCP 管理的主机上的 代理程序,包括 OCP-Agent/OB-Agent
OBServerOCP 部署的 OceanBase 程序
OBProxyOCP 部署的 OBProxy 程序
Backup-AgentOCP 部署的备份恢复 agent 程序
Application访问数据库的应用程序

OCP Docker

包含了 OCP-Server 和 OBProxy,在缺省配置下 OCP 使用 Docker 内的 OBProxy,OCP Docker 内的 OBProxy 通过本机地址访问 OCP-Server,OCP Docker 内的 OCP-Server 通过本机 OBProxy 访问管理的 OB 集群。因此 OCP Docker 内的 OBProxy 监听端口不需要开放给其它机器。

监听端口列表

部署单元监听端口协议类型监听端口修改方式可被如下部署单元访问备注
OCP-Server8080http修改 OCP 系统参数 server.port ,重启生效。OBServer OBProxy OCP-Console Backup-AgentOCP-Server web 服务监听端口,通常其它组件通过 SLB/DNS 地址访问 OCP-Server。
OCP-Server[62881~63881]tcp不支持修改OCP-ServerOCP-Server 内 monitor worker 进程间通信端口。
OBServer2881tcp不支持修改OBProxy OCP-Server ApplicationOBServer SQL 监听端口; 缺省配置下 OCP-Server 通过 OBProxy 访问 OCP-Server,可通过修改 OCP 系统参数 obsdk.ob.connection.mode 值为 direct 使得 OCP-Server 通过直连模式访问 OBServer; 不建议应用通过直连方式连接 OBServer。
OBServer2882tcp不支持修改OBServerOBServer 之间 RPC 通信端口
OBProxy2883tcp不支持修改Application OCP-Server Backup-AgentOBProxy 监听端口; 通常应用通过 OBProxy 访问OBServer; 缺省配置下 OCP-Server 通过自身 Docker 内的 OBProxy 访问 OBServer,可通过修改 OCP 系统参数 ocp.system.obproxy.address 使得 OCP-Server 也通过外部 OBProxy 访问 OBServer。
OBProxy2884http不支持修改OCP-ServerOBProxy 监控指标API 监听端口
OCP-Agent62888tcp不支持修改OCP-ServerOCP-Agent RPC 监听端口,用于接收 OCP-Server 的命令。
OCP-Agent[62881~63881]http不支持修改OCP-ServerOCP-Agent 监控指标 API 监听端口,OCP-Agent 会在这个端口范围内寻找未被占用的端口使用。
Backup-Agent2911tcp可通过 OCP-Console,到备份恢复管理页面修改无访问组件备份 Agent 本地监听端口,不用于外部访问,但是端口如果被其它程序占用会导致 Backup-Agent 程序启动失败。
Backup-Agent2912tcp可通过 OCP-Console,到备份恢复管理页面修改无访问组件恢复 Agent 本地监听端口,不用于外部访问,但是端口如果被其它程序占用会导致 Backup-Agent 程序启动失败。

14.13. OCP-Agent 进程

本页面为您介绍 ocp-agent 进程。

ocp-agent 进程

进程名功能启停方式
pos_proxy向 ocp server 提供通过 rpc 执行远程命令的服务。添加主机后自动启动。
node_exporter第三方组件,采集主机硬件指标。添加主机后自动启动。
ocp_agentd守护 ocp-agent 进程。启动 ocp-agent 进程时自动启动,无进程需守护时自动停止。

说明

使用帮助脚本的 start 命令启动 ocp_agent 服务将启动以上进程。

14.14. OCP 多集群模式开关

本节介绍如何将标准模式的 OCP 改造为多集群模式的主备集群。

前提条件

已安装好 V3.1.1 及以上版本的 OCP 集群。

注意

这些 OCP 集群所管理的 OceanBase 集群中,不能存在同名的 OceanBase 集群,否则备 OCP 集群将无法成功注册到主 OCP 集群。

操作步骤

执行 docker exec -it ocp bash

命令进入 OCP 容器。

执行 env | grep -i metadb

命令检查是否已设置了如下环境变量。

OCP_METADB_HOST
OCP_METADB_PORT
OCP_METADB_USER
OCP_METADB_PASSWORD
OCP_METADB_DBNAME

若未设置,请执行如下命令设置 MetaDB 的环境变量。

##以下变量值均为示例,请根据实际情况设置。
export OCP_METADB_HOST="192.168.0.1"
export OCP_METADB_PORT="2881"
export OCP_METADB_USER="ocp@ocp_meta"
export OCP_METADB_PASSWORD="******"
export OCP_METADB_DBNAME="meta_01"

执行 cd /home/admin/ocp-init/src/ocp-init

命令进入 modify_mc_config.py 脚本所在目录。

  1. 根据实际场景选择以下命令中的一条执行,改造 OCP。

    • 在目标 OCP 上执行,改造目标 OCP 为主 OCP 集群。

      python modify_mc_config.py --multicluster_mode_enabled=true --cluster_id=xxx --cluster_name=xxx --cluster_role=LEADER

    • 在目标 OCP 上执行,改造目标 OCP 为备 OCP 集群。

      python modify_mc_config.py --multicluster_mode_enabled=true --cluster_id=xxx --cluster_name=xxx --cluster_role=FOLLOWER

    • Failover 之后,在原主 OCP 上执行,使原主 OCP 恢复到能注册到新主 OCP的状态。

      python modify_mc_config.py --cluster_role=FOLLOWER --register_status=UNREGISTERED

      说明

      modify_mc_config.py 脚本支持以下参数:

    • --multicluster_mode_enabled:是否开启多集群模式。可取值 true 或 false。

    • --cluster_id:OCP 集群 ID,配置为 int 类型。

      请确保所有 OCP 集群的 ID 唯一。

    • --cluster_name:OCP 集群名,配置为字符串类型。

    • --cluster_role:OCP 集群角色,可取值 LEADER 或 FOLLOWER。

      请确保所有 OCP 集群中只有一个 LEADER,其他均为 FOLLOWER。

    • --register_status:OCP 集群注册状态,可取值 REGISTERED 或 UNREGISTERED。主要用于:Failover 之后,原主 OCP 恢复且想作为备注册到新主 OCP,可将原主的注册状态修改为UNREGISTERED,同时角色修改为 FOLLOWER。具体命令可参考步骤 4 中的第三条命令。

  2. 重启 OCP。

    在 OCP 宿主机上执行 docker restart ocp

    命令。

    如果该 OCP 集群部署了多个 OCP 实例,需要全部重启。

14.15. 日志报错 PAM Permission Denied

PAM(Pluggable Authentication Modules)是 Linux 系统上用于为应用与服务提供动态认证支持的组件。系统的某些配置可能导致所配置的 PAM 认证过程失败,从而使 OCP-Agent 的 pos_proxy 进程执行命令失败。

问题现象

当 OCP-Agent 2.4.0 及以上版本运行在 redhat、centos、alios 7 等 Linux 操作系统时,

添加主机,子任务失败且日志包含 sudo: pam_open_session: Permission denied

报错信息。

部署集群,子任务失败且日志包含 sudo: pam_open_session: Permission denied

报错信息。

部署 OBProxy ,某些子任务失败且日志包含 sudo: pam_open_session: Permission denied

报错信息。

可能原因

系统中所配置的 Session 类型的 PAM 模块在验证相关状态时失败,可能原因如下:

验证 sudo 权限时失败: /etc/sudoers

文件未给相关用户配置充足的权限。

验证系统资源限制的配置时失败: ulimit 命令或 /etc/security/limits.conf

文件配置了不合理的系统资源限制。

解决方法

当无法判断具体原因时,可依次尝试如下方法解决问题。

  • 当原因为验证 sudo 权限时失败时,执行如下操作给予相关用户充足的 sudo 权限。

    1. 使用 root 用户登录操作系统。

      打开 /etc/sudoers

      文件:

      vim /etc/sudoers

    2. 修改 root 与 admin 用户的权限,并保存文件:

      root ALL=(ALL) ALLadmin ALL=(ALL) ALL

    3. 重启 OCP-Agent:

      export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py stop basesleep 10export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py start base

  • 当原因为验证系统资源限制的配置时失败时,可按如下两种方案进行操作。

    • 执行如下操作修改系统资源限制配置。

      1. 使用 root 用户登录操作系统。

      2. 查看内核允许的进程最大打开文件数。

        cat /proc/sys/fs/nr_open

        进入 /etc/security/limits.conf

        文件,配置小于/proc/sys/fs/nr_open

        的文件打开数限制:

        ## 假设655360小于/proc/sys/fs/nr_opencat >> /etc/security/limits.conf \<\<EOF* soft nofile 655360* hard nofile 655360EOF

      3. 重启 OCP-Agent:

        export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py stop basesleep 10export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py start base

    • 执行如下操作移除 PAM 在 session 中对系统资源限制的验证 。

      注意

      1. 此方法将移除 PAM 在 session 中对系统资源限制的验证,可能引入安全风险。

      2. 此方法将在 debian/ubuntu 系统上使 ulimit 的配置不生效。

      3. 使用 root 用户登录操作系统。

      4. 打开 PAM 配置文件:

        vim /etc/pam.d/sudo

      5. 将以下行删除,并保存文件:

        session required pam_limits.so

      6. 重启 OCP-Agent:

        export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py stop basesleep 10export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py start base

14.16. 软件包上传失败

问题描述

在软件包功能模块选择上传软件包后出现长时间无反应,或者显示软件包上传失败。

原因分析

软件包上传失败,有如下可能:

  • OCP Server 不能正常工作。

  • OCP Server 主机存储空间不足。

  • MetaDB 存储空间不足。

  • 客户端所在网络环境较差(如堡垒机网络限制、带宽限制等)。

    解决办法

  • OCP Server 不能正常工作。

    1. 查看 OCP Server 对应主机进程是否正常。

      查看 \$HOME/logs/ocp/ocp.log

      日志文件,查看日志文件中新增日志中是否有异常信息。

  • OCP Server 主机存储空间不足。

    到对应 OCP server 主机上使用 df

    命令查看对应磁盘使用率是否过高。

    如磁盘使用率过高可以查看 \$HOME/data/files/

    目录是否有较多文件。

    1. 如果文件较多可以清理此目录下文件,否则可以尝试磁盘扩容或清理其他文件。
  • MetaDB 存储空间不足。

    您可查看 \$HOME/logs/ocp/ocp.log

    日志文件,查看日志文件中是否有对应 metadb 超限提示。

  • 客户端所在网络环境较差(如堡垒机网络限制、带宽限制等)。您可通过在 OCP Server 部署的网络环境中使用内网调用 OCP API 的方式实现软件包上传,主要有如下步骤:

    如果 OCP server 网络环境可以访问外部网络,可以使用wget/curl

    命令将软件包下载到 OCP Server 或 OCP server 同一网络环境的主机上。

    如果不能访问外部网络,可以根据情况将软件包根据不同的 OCP 版本执行对应操作将软件包上传到 OCP 中。scp/ftp

    或者 文件复制

    到某台 OCP Server 或与 OCP Server 在同一网络环境的主机上。

    • 2.4.x 版本参数说明
参数说明
SITE_URLOCP Server 的访问地址,需要使用 OCP 内网地址。
FILE_TYPE文件类型,根据软件包不同修改不同的值,可选值如下: OB_SERVER_INSTALL_PACKAGE : OB Server 安装包 OB_AGENT_INSTALL_PACKAGE : OB Agent 安装包 OCP_AGENT_INSTALL_PACKAGE : OCP Agent 安装包 OBPROXY_INSTALL_PACKAGE : OBPROXY 安装包 OB_BACKUP_AGENT_INSTALL_PACKAGE : 备份恢复组件 安装包 OTHERS_RPM : 非以上类型的安装包 SCRIPT : 脚本文件
FILE_NAME软件包的绝对路径。
OCP_USERNAMEOCP 有用软件包写权限用户的用户名。
OCP_PASSWORD对应用户的用户密码。

使用示例

## 根据软件包地址下载软件包,如果手动复制软件包到远程主机,那么可以跳过此步骤.
wget "http://yum.tbsite.net/taobao/7/x86_64/xxx/\${FILE_NAME}"

SITE_URL="http://127.0.0.1:8080"
FILE_TYPE="OCP_AGENT_INSTALL_PACKAGE"
FILE_NAME="t-oceanbase-ocp-agent-2.5.0-xxx.alios7.x86_64.rpm"

curl -i --user \<OCP_USERNAME>:\<OCP_PASSWORD> -X POST \
"\${SITE_URL}/api/v2/files/uploadFile?type=\${FILE_TYPE}" \
-H "Content-Type: multipart/form-data" \
-F "file=@\${FILE_NAME}"

  • 2.5.0 版本参数说明
参数说明
SITE_URLOCP Server 的访问地址,需要使用 OCP 内网地址。
FILE_NAME软件包的绝对路径,后端会根据此软件包名称、及内容自动解析出软件包类型。
OCP_USERNAMEOCP 有用软件包写权限用户的用户名。
OCP_PASSWORD对应用户的用户密码。

使用示例

## 根据软件包地址下载软件包,如果手动复制软件包到远程主机,那么可以跳过此步骤.
wget "http://yum.tbsite.net/taobao/7/x86_64/test/t-oceanbase-ocp-agent/\${FILE_NAME}"

SITE_URL="http://127.0.0.1:8080"
FILE_NAME="t-oceanbase-ocp-agent-2.5.0-xxx.alios7.x86_64.rpm"

curl -i --user \<OCP_USERNAME>:\<OCP_PASSWORD> -X POST \
"\${SITE_URL}/api/v2/software-packages" \
-H "Content-Type: multipart/form-data" \
-F "file=@\${FILE_NAME}"

14.17. 如何验证用户的 sudo 权限

使用Java SSH工具(如JsCh)连接远程主机后,如何验证用户是否有sudo权限呢。因为在linux的交互过程中,java客户端是被hang住的,导致线程阻塞,所以这里主要需要解决的问题是,如何执行sudo命令后跳过“请输入密码“的交互。

背景信息

SSH方式登陆主机,有两种授权方式.

  • 用户名密码方式。用户名密码方式即 通过`ssh xxx@xx.xx.xx.xx`的方式登陆。

  • 私钥方式。私钥方式登陆主机,是指客户端使用某个私钥登陆主机,前提条件是,主机的authorized_keys文件中已经存在了和私钥配对的公钥(即免密登陆)。

    用户名方式登录

    使用 ssh root@password

方式登陆的用户,验证用户是否具有 sudo 权限,只需执行以下指令即可。

echo password |sudo -S ls

这里会出现三种情况。

  • 用户有sudo权限。

    • 主机设置了sudo指令免密使用。这种情况下,该指令什么都不输出。
    • 主机未设置sudo指令免密使用。这种情况下,该指令输出 `[sudo] password for xxx:`,紧接着结束,无交互(echo password将密码用管道传给sudo指令)
  • 用户无sudo权限。此时输出`[sudo] password for xxx: xxx is not in the sudoers file. This incident will be reported.`

    私钥方式登录

    使用私钥方式登录,即免密登录,此时 Java 客户端不知道用户的密码是什么,此时要求该用户必须设置了 sudo 指令无需密码。即在/etc/sudoers文件中存在以下行:

    username ALL=(ALL) NOPASSWD:ALL

    以上配置指定 username 无需使用密码可以执行任何指令。

    因此,在验证用户是否有 sudo 权限前,需要执行以下指令,判断用户是否可以无需输入密码执行 sudo。

    sudo -n true

    若该用户配置了无需使用密码使用 sudo 指令,则上述指令不输出任何结果。表示有 sudo 权限,且无需使用密码执行。

    若该用户未配置,则上述指令输出 sudo: a password is required

验证结果

echo password |sudo -S ls >/dev/null 2>&1; echo \$?

上述输出 0 表示执行成功,有 sudo 权限。输出 1 表示执行失败,没有 sudo 权限。

sudo -n true >/dev/null 2>&1; echo \$?

上述指令输出 1 表示没有设置无密码使用 sudo 命令,输出 0 表示设置了。

14.18. OCP 默认角色

本节为您介绍 OCP 默认角色及其具有的权限。

OCP 默认角色为 OCP 内置角色,不可删除或编辑。

OCP 所有的默认角色如下表所示:

角色说明权限
ADMINOCP 系统管理员角色,拥有最大权限。**
ALARM_MANAGEROCP 告警管理角色,拥有告警和订阅管理权限及关联资源(集群、租户、主机、用户)的只读权限。ALARM:*:* CLUSTER:*:READ TENANT:*:READ HOST:*:READ USER:*:READ
ALARM_VIEWEROCP 告警只读角色,拥有告警和订阅只读权限及关联资源(集群、租户、主机、用户)的只读权限。ALARM:*:READ CLUSTER:*:READ TENANT:*:READ HOST:*:READ USER:*:READ
AUDIT_VIEWER查看 OCP 审计历史信息的权限, 查看所有历史审计事件,可以查看所有操作者的用户名和用户 ID。AUDIT:*:READ
BACKUP_MANAGER集群备份恢复管理角色,拥有对 OCP 管理的所有 OceanBase 集群和租户的备份恢复管理权限,及主机、告警的只读权限,任务、软件包的管理权限。如果需要增加主机,需要给用户额外赋予 HOST_MANAGER 角色。CLUSTER:*:BACKUP:*:* CLUSTER:*:READ CLUSTER:*:TENANT:*:READ HOST:*:READ ALARM:*:READ TASK:*:* PACKAGE:*:*
CLUSTER_MANAGER集群管理员角色,拥有对 OCP 管理的所有 OceanBase 集群、OBPROXY 集群及关联资源(主机、后台任务、告警、软件包)的管理权限,拥有对间接关联资源(用户)的只读权限。CLUSTER:*:* HOST:*:* TASK:*:* ALARM:*:* USER:*:READ PACKAGE:*:* OBPROXY:*:*
CLUSTER_VIEWER集群只读角色,拥有对 OCP 管理的所有 OceanBase 集群、OBPROXY 集群及关联资源(主机、后台任务、告警、软件包)的只读权限。CLUSTER:*:READ HOST:*:READ TASK:*:READ ALARM:*:READ PACKAGE:*:READ OBPROXY:*:READ
HOST_MANAGEROCP 主机管理角色,拥有管理所有主机及关联资源(软件包)管理权限。HOST:*:* PACKAGE:*:*
HOST_VIEWEROCP 主机只读角色,拥有查看所有主机及关联资源(软件包)查看权限。HOST:*:READ PACKAGE:*:READ
INSPECTION_MANAGER巡检管理员角色,拥有巡检规则、巡检脚本读写以及巡检规则执行权限。INSPECTION:*:*
OBPROXY_MANAGEROBPROXY 管理角色。拥有对 OCP 管理的所有 OBPROXY 集群及关联资源集群、主机的只读权限,软件包的管理权限。OBPROXY:*:* PACKAGE:*:* CLUSTER:*:READ HOST:*:READ
OBPROXY_VIEWEROBPROXY 只读角色。拥有对 OCP 管理的所有 OBPROXY 集群及关联资源(集群、主机、软件包)的只读权限。OBPROXY:*:READ PACKAGE:*:READ CLUSTER:*:READ HOST:*:READ
PACKAGE_MANAGER软件包管理角色。PACKAGE:*:*
PACKAGE_VIEWER软件包只读角色。PACKAGE:*:READ
PROFILEOCP 用户个人信息角色,为用户的基本权限,移除此权限可能导致其他模块只能进行只读操作,用来登陆和访问个人中心。PROFILE:*:*
PROPERTY_MANAGEROCP 系统配置参数管理角色。PROPERTY:*:*
ROLE_MANAGEROCP 角色管理角色。ROLE:*:*
TASK_MANAGEROCP 后台任务管理角色。TASK:*:*
TENANT_MANAGER租户管理员角色,拥有对 OCP 管理的所有 OceanBase 租户的管理权限,及关联资源(OceanBase 集群、OBPROXY 集群主机、后台任务、告警)的只读权限。CLUSTER:*:TENANT:*:* CLUSTER:*:READ HOST:*:READ TASK:*:READ ALARM:*:READ OBPROXY:*:READ
TENANT_VIEWER租户只读角色,拥有对 OCP 管理的所有OceanBase 租户及关联资源(OceanBase 集群、OBPROXY 集群、主机、后台任务、告警)的只读权限。CLUSTER:*:TENANT:*:READ CLUSTER:*:READ HOST:*:READ TASK:*:READ ALARM:*:READ OBPROXY:*:READ
USER_MANAGEROCP 用户管理角色。USER:*:*, ROLE:*:READ

14.19. 多可用区使用常见问题

常见问题

Q1:OCP 多可用区模式与 OCP 多集群模式的区别是什么?

A:多可用区模式是针对 OceanBase、OCP 或 OBProxy 跨机房或跨城市部署时,能够控制它们的访问或转发优先不跨机房或城市的机制。多可用区模式能够有效降低链路的时延,同时降低跨机房或城市的带宽成本。 多集群模式提供了 OCP 跨城市的多活容灾方案,为跨城市的 OceanBase 主备集群部署提供了更好的支持。

14.20. 接管 OBProxy 常见问题

常见问题

Q1:检查结果中提示:无法获取该 OBProxy 可连接集群信息,请确保该 OBProxy 配置了可连接的 OB 集群。

A:回到原 OCP 中,找到该 OBProxy 所属的 OBProxy 集群,并进入该集群的 总览 页,单击右上角的 添加可连接的 OB 集群,为该 OBProxy 集群添加可连接的 OB 集群。若找不到原 OCP ,则该 OBProxy 无法接管到新 OCP 中。

Q2:检查结果中提示:该 OBProxy 主机上共有 2 个 obproxy 进程,请确保有且仅有 1 个 obproxy 进程在运行。

A:建议根据业务需要保留 1 个 obproxy 进程,删除其他 obproxy 进程。

Q3:检查结果中提示:该 OBProxy 的可执行文件路径为 /home/admin,请确保可执行文件在标准路径 /opt/taobao/install/\<obproxy 目录> 下。

A:无法接管,待接管的 OBProxy 需是使用官方给出的 RPM 包安装的。

Q4:检查结果中提示:该 OBProxy 主机上共发现 2 个 OBProxy 的 rpm 包,请确保有且仅有 1 个。

A:在待接管的 OBProxy 主机上执行 rpm -qa | grep obproxy

查看这台主机上已安装的 obproxy 的 rpm 包。

  • 当安装 OBProxy 的 rpm 包大于 1 时,仅保留生效版本的 rpm 包,删除多余的。方法如下所示:

    1. 切换到 admin 用户查询当前 obproxy 进程所属版本。

      [root]## su - admin
      \$ ps -ef | grep
      ...
      admin
      50459
      1 42 11:14 ? 00:14:16 ./bin/obproxy -p 2883 -n zsy_obproxy -o prometheus_sync_interval=1s,obproxy_config_server_url=http://192.168.0.1:81/services?User_ID=alibaba&UID=test&Action=GetObProxyConfig&ObproxyClusterName=zsy_obproxy,prometheus_listen_port=2884,enable_metadb_used=false,skip_proxy_sys_private_check=true,log_dir_size_threshold=10G,proxy_mem_limited=2G,enable_proxy_scramble=true,enable_strict_kernel_release=false
      ...

      \$ ls -l /proc/
      50459
      /exe
      lrwxrwxrwx 1 admin admin 0 Sep 9 11:39 /proc/50459/exe -> /opt/taobao/install/obproxy-1.8.3/bin/obproxy

      该进程来源于 /opt/taobao/install/obproxy-1.8.3/bin/obproxy

      目录,为 1.8.3 版本的 OBProxy。

      查询该服务器安装了几个 OBProxy 的 rpm,执行 rpm -e

      命令删除与当前 obproxy 进程无关的 rpm 记录。

      [root]## rpm -qa | grep obproxy
      obproxy-1.8.3-1913214.el7.x86_64
      obproxy-1.8.3.1-1920014.el7.x86_64
      [root]## rpm -e obproxy-1.8.3.1-1920014.el7.x86_64
      [root]##

  • 当安装 OBProxy 的 rpm 包等于 0 时,该 OBProxy 无法接管。如下所示,查询返回信息为空。

    [root]## rpm -qa | grep obproxy
    [root]##

    Q5:检查结果中提示:obproxy 进程所属用户必须为 admin 用户,当前用户为 root。

    A:请视情况决定是否以 admin 用户重新启动 obproxy 进程或放弃接管。以 admin 用户重启 obproxy 进程的方法如下:

  1. 以当前用户执行如下命令停止 obproxy 进程。

    ## 查看 obproxy 进程和 obproxyd 进程的 PID。
    ps -ef | grep obproxy | grep -v grep

    ## 停止 obproxy 进程和 obproxyd 进程。
    kill -15 [守护进程PID]
    kill -15 [OBProxy 进程 PID]

  2. 切换到 admin 用户,然后启动 obproxy。

    ## 切换到 admin 用户
    su - admin

    ## 进入到 obproxy 的安装目录
    cd /opt/taobao/install/\<obproxy目录>

    ./bin/obproxyd.sh -c start -e private -n \<obproxy名称>

    Q6:检查结果中提示:该 OBProxy (test_obp1) 的工作模式与 OBProxy 集群 (test_obp) 的工作模式不匹配。

    A:根据实际情况确定目标集群是否可更换。

  • 不可更换,无法接管。

  • 可更换,新建工作模式与待接管集群匹配的 OBProxy 空集群,再将该 OBProxy 集群接管到 OBProxy 空集群中。

    Q7:检查结果中提示:该 OBProxy 的可连接 OB 集群不在当前 OCP 中管理,请先接管 OB 集群。

    A:建议先将这个 OBProxy 的可连接 OceanBase 集群接管到当前 OCP 中,然后再对这个 OBProxy 进行接管。

说明

这种情况下,OCP 中一般不存在能够接纳这个 OBProxy 的目标 OBProxy 集群,可新建符合条件的 空 OBProxy 集群,然后将 OBProxy 接管到这个空 OBProxy 集群中。后续即可在这台 OCP 上运维和管理该 OBProxy 及其可连接的 OB 集群,若无此诉求可考虑是否放弃接管该 OBProxy。

Q8:检查结果中提示:该 OBProxy 的可连接 OB 集群不在目标 OBProxy 集群的可连接 OB 集群列表中。

A:待接管 OBProxy 可连接的 OB 集群,不是目标 OBProxy 集群的可连接 OB 集群,无法接管到该 OBProxy 集群。建议根据实际业务情况,选择下述方法之一:

  • 将待接管 OBProxy 的可连接 OB 集群,添加到目标 OBProxy 集群的可连接 OB 集群列表中,方法参见 添加可连接的 OB 集群。然后再对待接管集群进行接管。

  • 新建一个空 OBProxy 集群,设置其可连接 OB 集群与待接管 OBProxy 的一致。然后再将待接管集群接管到空 OBProxy 集群中。

    Q9:检查结果中提示:该 OBProxy 的可连接 OB 集群与目标 OBProxy 集群的应当完全匹配,当前检测结果为不匹配。

    A:启动方式为 RsList 时,待接管的 OBProxy 和目标 OBProxy 集群的可连接 OB 集群不匹配,此时无法将该 OBProxy 接管到目标 OBProxy 集群。建议接管到可连接 OB 集群匹配的目标 OBProxy 集群。

14.21. XA 事务和悬挂事务诊断

本文介绍了 OceanBase 数据库事务的诊断方式。

基本介绍

OceanBase 数据库的事务按照参与者的个数和位置可以分为三种类型:普通事务、分布式事务、XA 事务;普通事务、分布式事务又可以统称为非 XA 事务。 而事务按照执行的时间和状态可以分为其他事务、长事务、悬挂事务三种。其中,长事务和悬挂事务会导致资源长时间不释放,等待会话长时间被阻塞,影响业务系统。 在日常工作中,需要重点关注这类异常的事务。接下来对这类事务分别进行介绍。

场景描述

长事务

长事务指那些长时间未提交的事务。普通事务、分布式事务、XA 事务都可能处于长事务的状态。当普通事务、分布式事务处于长事务状态时,可以通过 kill session 的方式来回滚事务;当 XA 事务处于长事务状态时可以终止 XA 事务。

长事务产生的原因可能是事务中的某条 SQL 执行时间较长,或执行完 SQL 后长时间未完成提交或回滚。如果当前的长事务对系统造成了资源阻塞,可以通过回滚普通长事务会话或终止 XA 事务进行处理。

使用命令行进行会话管理

说明

以下代码示例除非特别说明外,默认使用sys租户。

  1. 查看数据库里是否存在长事务。

    SELECT * FROM OCEANBASE.__all_virtual_trans_stat WHERE part_trans_action \<= 2 AND ctx_create_time \< date_sub(now(), INTERVAL 600 SECOND) AND is_exiting != 1

    查看事务是否为 XA 事务,其中事务 ID 为上述 sql 中查出的svr_ip

    。如果sql执行结果为空,则表明长事务非XA事务;如果执行有结果,则对应的结果即为 XA 事务。

    SELECT * FROM OCEANBASE.__all_virtual_global_transaction WHERE trans_id LIKE '%事务ID%';

  2. 处理长事务,请执行下列命令。

    1. 回滚普通长事务。注意,kill 会话需要直连对应的 OBServer,无需通过 proxy 连接数据库。

      SELECT svr_ip FROM OCEANBASE.__all_virtual_processlist WHERE id=会话ID;
      kill 会话ID;

    2. 终止 XA 事务,请执行下列命令。

      1. 前往系统租户,查找 XA 事务的 XID。

        SELECT hex(gtrid),hex(bqual),format_id FROM OCEANBASE.__all_virtual_global_transaction WHERE tenant_id = 租户ID AND format_id \<> -2 AND state = 3 AND gmt_modified \< date_sub(now(), INTERVAL 1800 SECOND);

      2. 如果是 Oracle 模式租户,可以前往普通租户查看 XA 事务的 XID。

        SELECT rawtohex(gtrid),rawtohex(bqual),format_id FROM sys.all_virtual_tenant_global_transaction_agent WHERE format_id \<> -2 AND state = 3 AND ROUND((sysdate - cast(GMT_MODIFIED as date)) * 86400) > 1800;

        前往普通租户执行,终止 XA 事务。

        set
        serveroutput on;
        declare
        l_xid DBMS_XA_XID;
        l_ret PLS_INTEGER;
        BEGIN
        l_xid.formatid := format_id;
        l_xid.gtrid := hextoraw('hex(gtrid)');
        l_xid.bqual := hextoraw('hex(bqual)');
        l_ret := DBMS_XA.XA_ROLLBACK(xid = > l_xid);
        dbms_output.put_line(l_ret);
        END;
        /

        悬挂事务

        悬挂事务指提交后,长时间没有结束的事务。常见的场景,有两种情况:

  3. 事务涉及的分区无主,导致事务状态机推进不了;

  4. 事务在 leader 上已经推进完成,但由于备机的内存、网络带宽等资源限制,日志同步慢、回放慢,导致事务状态结束慢。

    上述两种场景,处理方法是不一样的,下文分别描述。

    分区无主

    OceanBase 数据库的架构决定分区是有多副本的,多副本中只有一个 leader (主),其它都是 follower (从)。而当 leader 所在 OBsever 宕机了,此时就没有了 leader,少数派副本异常情况下,此时其它副本就会根据 PAXOS 协议重新选主,在此过程中正在运行的事务有可能就产生长事务。

    对于这种场景,使用如下方式进行处理:

    查询当前事务涉及的所有的表信息,SQL 如下,其中participants

    里的每个 tid

    代表一个表。

    SELECT svr_ip, trans_id, participants FROM OCEANBASE.__all_virtual_trans_stat WHERE part_trans_action> 2 AND ctx_create_time \< date_sub(now(), INTERVAL 600 SECOND) AND is_exiting != 1;

    分别确认上述分区列表是否有主,SQL 如下,若 role

    列皆为 follower,则表示全部是从副本,没有 leader。

    SELECT svr_ip, svr_port,table_id, partition_idx, role, status, replica_type FROM OCEANBASE.__all_virtual_clog_stat WHERE table_id=表ID;

    若为分区无主即当前事务为长事务,可按照长事务进行处理。

    副本应用日志慢

    副本应用日志慢的原因有很多。比如某个 OBSever 服务器突然资源异常,OS 上跑任务消耗了大量的 IO、网络等资源,导致该服务器上的 OBSever 响应慢;主副本分布不均匀,某服务器上的 leader 特别多,leader 进行应用需求响应,消耗大量资源,导致 follower 的可用资源比较少,从而一直追不上该 follower 对应的 leader;某个 OBserver 服务器硬件异常,比如网卡异常,导致 PAXOS 协议传到 follower 非常慢,一直处于等待中,追赶中;该 OBSever 正在合并或备份中等。

    对于这种场景,使用如下方式进行处理:

    查询当前事务涉及的所有的表信息,SQL 如下,其中partition

    里的每个 tid

    代表一个表。

    SELECT svr_ip, svr_port,trans_id, 'partition' FROM OCEANBASE.__all_virtual_trans_stat WHERE part_trans_action > 2 AND ctx_create_time \< date_sub(now(), INTERVAL 600 SECOND) AND is_exiting != 1;

    根据第一步查询到的 partition

    中记录的 table_id

    信息,确认当前 pkey

    对应的 leader

    位置。

    SELECT svr_ip,svr_port FROM OCEANBASE.__all_virtual_clog_stat WHERE role='LEADER' AND table_id = 表ID;

    如果第一步和第二步对应的 svr_ip

    不同,说明异常事务在 follower 上存在。

  5. 查询上述事务对应的分区,目前集群中的记录条数。

    SELECT count(1) FROM OCEANBASE.__all_virtual_trans_stat WHERE trans_id LIKE '%{选取第一步 trans_id 中的 hash 字段}%'AND`partition` LIKE '%xxx%';

    如果上述查询结果为 1 条,说明只有备机上存在。这种情况请联系OceanBase 技术支持团队处理。