如何用一条SQL 得到 ocp 页面管理各个集群的资源使用率?

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

问题:如何用一条SQL 得到 ocp 页面管理各个集群的cpu,内存,数据盘 资源分配率?

根据文档库中的信息,OCP(OceanBase Control Platform)提供了图形化的界面来管理和监控OceanBase集群的资源使用情况,包括CPU、内存和磁盘使用率。但是直接通过一条SQL查询来获取这些信息并不是标准的做法,因为这些数据通常是由OCP内部的监控系统收集并展示的。

然而,如果您确实需要通过SQL来获取类似的信息,您可以查询OceanBase数据库中的一些系统表或视图,例如gv$unitgv$resource_pool等,这些表包含了关于资源池和单元的配置及使用情况的数据。但请注意,这可能不会完全等同于OCP界面上展示的内容,因为OCP可能会进行额外的计算和汇总。

对于具体的SQL语句,这里提供一个基于社区版的示例,它可以帮助您了解各个集群的资源使用情况:

SELECT 
    tenant_name AS "租户名称",
    zone AS "Zone",
    svr_ip AS "服务器IP",
    ROUND(SUM(cpu_limit) / COUNT(*) , 2) AS "CPU分配量",
    ROUND(SUM(mem_limit)/(1024*1024*1024), 2) AS "内存分配量(GB)",
    ROUND(SUM(disk_size_used)/(1024*1024*1024), 2) AS "已用磁盘空间(GB)",
    ROUND(SUM(disk_size_total)/(1024*1024*1024), 2) AS "总磁盘空间(GB)",
    ROUND(SUM(disk_size_used)/SUM(disk_size_total)*100, 2) AS "磁盘使用率(%)"
FROM 
    gv$unit
GROUP BY 
    tenant_name, zone, svr_ip;

这段SQL将返回每个租户在不同Zone下的每台服务器上的CPU、内存以及磁盘的分配与使用情况。请注意,实际环境中可能还需要根据您的具体需求调整字段选择和聚合方式。

为了确保准确性,并且考虑到生产环境的安全性和稳定性,请先在测试环境中验证此SQL的效果。如果需要更精确地匹配OCP页面上的数据显示,建议参考官方提供的API接口或者联系OceanBase技术支持团队以获得进一步的帮助。

以上信息来源于对多个文档片段的理解综合,特别是有关性能监控的部分。如果您有特定版本或其他组件的要求,请提供更多详细信息以便给出更加准确的答案。

检索到的文档如下:

  1. OCP V4.0.1
  2. 查看性能监控
  3. 集群总览
  4. 集群管理
  5. 进程 CPU 使用率
  6. 集群性能诊断
  7. 监控指标概述
  8. 集群监控
  9. OceanBase 云平台概览

推荐一个诊断工具obdiag 的一键洞察功能,一条命令就能看到集群的各种信息,加-v还能看到执行SQL

obdiag display scene run --scene=observer.cluster_info
...
+-----------------------+--------------------------+
|       stat_name       |          value           |
+-----------------------+--------------------------+
|      cluster_name     |        obcluster         |
|       cluster_id      |            1             |
|        version        |         4.2.2.0          |
|       observers       |            1             |
|         zones         |            1             |
|        tenants        |            3             |
|        rs_list        | xx.xx.xx.xx:2882:2881    |
|       config_url      |                          |
|      memory_limit     |          24.00G          |
|  data_disk_allocated  |          56.00G          |
|       cpu_total       |            16            |
|      cpu_assigned     |            12            |
|    cpu_assinged_per   |           75%            |
|      memory_total     |          20.00G          |
|    memory_assigned    |          19.00G          |
|  memory_assigned_per  |          95.00%          |
|     log_disk_total    |          84.00G          |
|   log_disk_assigned   |          8.00G           |
| log_disk_assigned_per |          10.00%          |
|    log_disk_in_use    |          6.50G           |
|  log_disk_in_use_per  |          81.00%          |
|    data_disk_total    |          56.00G          |
|    data_disk_in_use   |          23.69G          |
|  data_disk_in_use_per |          42.00%          |
+-----------------------+--------------------------+
Trace ID: f1b0206e-8878-11ef-a52e-00163e01c7ce

文档:https://www.oceanbase.com/docs/common-obdiag-cn-1000000002200489

相关的sql可以从~/…obdiag/display/tasks/observer下查看到

我咨询了OCP这块的老师,这个不是走SQL查的,这里是走的监控,建议调API查

工具不好用,SQL直观点,报错不断
[root@zhobtest10 tmp]# obdiag display scene run --scene=observer.cluster_info \

--config db_host=1.1.28.195 \
--config db_port=2883 \
--config tenant_sys.user=root@sys \
--config tenant_sys.password='1'

display_scenes_run start …
execute tasks: observer.cluster_info
[WARN] node is not exist
Trace ID: 154ab782-f999-11ef-b563-e8611f45ae64
If you want to view detailed obdiag logs, please run: obdiag display-trace 154ab782-f999-11ef-b563-e8611f45ae64
[root@zhobtest10 tmp]#
[root@zhobtest10 tmp]#
[root@zhobtest10 tmp]# obdiag display-trace 154ab782-f999-11ef-b563-e8611f45ae64
[2025-03-05 16:08:55.434] [DEBUG] - cmd: obdiag display scene run
[2025-03-05 16:08:55.434] [DEBUG] - opts: {‘inner_config’: None, ‘scene’: ‘observer.cluster_info’, ‘from’: None, ‘to’: None, ‘since’: ‘30m’, ‘env’: None, ‘c’: ‘/root/.obdiag/config.yml’, ‘config’: [‘db_host=1.1.28.195’, ‘db_port=2883’, ‘tenant_sys.user=root@sys’, ‘tenant_sys.password=1’]}
[2025-03-05 16:08:55.435] [DEBUG] - mkdir /usr/local/oceanbase-diagnostic-tool/conf/inner_config.yml
[2025-03-05 16:08:55.444] [INFO] display_scenes_run start …
[2025-03-05 16:08:58.528] [DEBUG] - start get_observer_version_by_sql . input: 1.1.28.195:2883
[2025-03-05 16:08:58.534] [DEBUG] - connect databse …
[2025-03-05 16:08:58.539] [DEBUG] - get_observer_version_by_sql ob_version_info is (‘5.7.25-OceanBase-v4.2.1.8’,)
[2025-03-05 16:08:58.545] [DEBUG] - connect databse …
[2025-03-05 16:08:58.552] [DEBUG] - get host info: [{‘ip’: ‘1.1.28.194’}, {‘ip’: ‘1.1.28.195’}, {‘ip’: ‘1.1.28.196’}]
[2025-03-05 16:08:58.552] [DEBUG] - update nodes config: [{‘ip’: ‘1.1.28.194’}, {‘ip’: ‘1.1.28.195’}, {‘ip’: ‘1.1.28.196’}]
[2025-03-05 16:08:58.558] [DEBUG] - connect databse …
[2025-03-05 16:08:58.559] [DEBUG] - display scene variables: {‘observer_data_dir’: ‘’, ‘obproxy_data_dir’: ‘’, ‘from_time’: ‘2025-03-05 15:38:58’, ‘to_time’: ‘2025-03-05 16:09:58’}
[2025-03-05 16:08:58.598] [DEBUG] - execute_tasks. the number of tasks is 1 ,tasks is dict_keys([‘observer.cluster_info’])
[2025-03-05 16:08:58.599] [INFO] execute tasks: observer.cluster_info
[2025-03-05 16:08:58.599] [DEBUG] - get observer version, by sql
[2025-03-05 16:08:58.599] [DEBUG] - start get_observer_version_by_sql . input: 1.1.28.195:2883
[2025-03-05 16:08:58.604] [DEBUG] - connect databse …
[2025-03-05 16:08:58.608] [DEBUG] - get_observer_version_by_sql ob_version_info is (‘5.7.25-OceanBase-v4.2.1.8’,)
[2025-03-05 16:08:58.608] [DEBUG] - observer.cluster_info execute!
[2025-03-05 16:08:58.609] [DEBUG] - version_int is 4.2.1.8 steps_versions is [4.2.0.0, *]
[2025-03-05 16:08:58.609] [DEBUG] - minVersion is 4.2.0.0, maxVersion is 999
[2025-03-05 16:08:58.609] [DEBUG] - filter_by_version is return 0
[2025-03-05 16:08:58.609] [WARNING] node is not exist
[2025-03-05 16:08:58.609] [DEBUG] - execute tasks end : observer.cluster_info
[2025-03-05 16:08:58.609] [INFO] Trace ID: 154ab782-f999-11ef-b563-e8611f45ae64
[2025-03-05 16:08:58.609] [INFO] If you want to view detailed obdiag logs, please run: obdiag display-trace 154ab782-f999-11ef-b563-e8611f45ae64

API 后台应该是OCP 管理库吧

根据您提供的信息和日志,obdiag display scene run --scene=observer.cluster_info 命令在执行时遇到了问题,具体表现为“node is not exist”的警告。这通常意味着 obdiag 工具无法找到指定的节点信息,可能是由于配置错误或网络连接问题导致。

分析与建议

  1. 检查配置参数

    • 确认 db_hostdb_port 是否正确指向了您的 OceanBase 数据库实例。
    • 确认 tenant_sys.usertenant_sys.password 是否为正确的系统租户用户名和密码。
  2. 验证数据库连接

    • 尝试使用其他工具(如 MySQL 客户端)连接到指定的数据库实例,以确保网络可达性和凭据正确性。
    • 例如:
      mysql -h 1.1.28.195 -P 2883 -u root@sys -p
      
  3. 确认集群状态

    • 确保目标集群中的所有节点都处于正常运行状态,并且可以从当前机器访问。
    • 您可以登录到 OCP 或者通过命令行工具(如 obd)查看集群的状态。
  4. 检查 obdiag 日志

    • 根据日志中的提示,您可以进一步查看详细的 obdiag 日志来获取更多信息:
      obdiag display-trace 154ab782-f999-11ef-b563-e8611f45ae64
      
    • 这些日志可能会提供更多关于为什么找不到节点的具体原因。
  5. 确认场景配置

    • 确认 observer.cluster_info 场景是否适用于您的 OceanBase 版本(v4.2.1.8)。虽然从日志来看版本匹配是成功的,但仍然建议查阅官方文档或支持渠道确认该场景的具体要求。
  6. API 后台与 OCP

    • 您提到 API 后台应该是 OCP 管理库。实际上,OCP 是一个独立的管理平台,它有自己的 API 接口用于管理和监控 OceanBase 集群。如果您需要通过 API 获取资源使用情况,建议直接参考 OCP 的 API 文档。
    • 如果您希望通过 SQL 查询获取类似信息,可以参考我之前提供的 SQL 示例,或者探索更多系统视图(如 gv$unit, gv$resource_pool 等)。

解决方案总结

为了更准确地诊断问题,请先按照上述步骤逐一排查可能的原因。如果问题依然存在,建议收集更多的诊断信息并联系 OceanBase 技术支持团队获取帮助。同时,确保您使用的 obdiag 版本是最新的,因为更新版本可能修复了已知的问题。

如果您有更多具体的配置细节或其他相关日志信息,欢迎提供,以便我们能够更好地帮助您解决问题。

具体信息可参考以下文档:

  1. 查询子任务实例日志
  2. GV$OB_MEMORY

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

谢谢,这个目录下的SQL 已经看到,虽然没有我想要的,但是仍然很重要

抱歉给你带来了不好的使用体验,已确认是obdiag 在无配置文件场景obdiag display scene run --scene=observer.cluster_info 存在bug。下周发布的3.2.0 版本会修复这个问题。

感谢反馈

学习学习

SELECT tenant_name AS “租户名称”, zone AS “Zone”, svr_ip AS “服务器IP”, ROUND(SUM(cpu_limit) / COUNT() , 2) AS “CPU分配量”, ROUND(SUM(mem_limit)/(102410241024), 2) AS “内存分配量(GB)”, ROUND(SUM(disk_size_used)/(102410241024), 2) AS “已用磁盘空间(GB)”, ROUND(SUM(disk_size_total)/(10241024*1024), 2) AS “总磁盘空间(GB)”, ROUND(SUM(disk_size_used)/SUM(disk_size_total)*100, 2) AS “磁盘使用率(%)” FROM gv$unit GROUP BY tenant_name, zone, svr_ip

失败原因:

ErrorCode = 1146, SQLState = 42S02, Details = Table ‘oceanbase.gv$unit’ doesn’t exist

OceanBase 开源eqwl83_gaMTYxMTIzNjc4MC4xNzQxMzE1MjMw_ga_T35KTM57DZ*MTc0MTMzNjM4OC4zLjEuMTc0MTMzNjk4MS42MC4wLjA.

这个文档有磁盘的统计,但是没有CPU和内存的使用?