openEuler-23.09-x86_64 obd安装,obagent下monagent.log日志持续告警类型转换异常,ocp集群监控数据空

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】4.2.1.8-108000022024072217
【问题描述】openEuler-23.09-x86_64 obd安装,obagent下monagent.log日志持续告警类型转换异常,ocp集群监控数据空
【复现路径】正常执行obd安装后,obagent进程正常,ocp正常访问,但集群总览下《租户资源使用 Top3》及集群监控下所有指标均无数据,查看obagent下monagent.log 日志持续出现类型转换错误告警



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

1 个赞

根据您提供的信息,您在 openEuler-23.09-x86_64 系统上使用 obd 安装了 OceanBase,并且遇到了 OCP 监控数据缺失的问题。从日志文件 monagent.log 中看到持续出现类型转换异常的告警信息,这导致 OCP 集群监控数据为空。根据日志中的信息,这些告警主要集中在类型转换失败,特别是从 nil 类型转换为 float64 类型时出现问题。

解决步骤:

  1. 确认 monagent 进程状态

    • 检查 monagent 进程是否正常运行。如果进程停止,可能会导致监控数据缺失。 [6]
  2. 检查日志中的 SQL 语句

    • 根据日志中的 SQL 语句,可以看到查询涉及到了 __all_tenant__all_virtual_query_response_time 表。这些表用于收集监控数据。确保这些表的数据正确无误。[[@10]]
  3. 类型转换异常排查

    • 日志中提到的类型转换异常主要出现在 countsum 字段。这可能是由于某些数据为空或者类型不匹配导致的。
    • 检查 __all_tenant__all_virtual_query_response_time 表中的数据,确保没有 nil 或者类型不匹配的情况。
  4. 修复 SQL 语句

    • 根据日志中的 SQL 语句,尝试修改 SQL 语句来处理 nil 值,例如:
      SELECT 
        _all_tenant.tenant_name AS tenant_name, 
        v_acc_response_time.response_time AS response_time_seconds, 
        v_acc_response_time.count AS bucket, 
        CASE 
          WHEN v_acc_response_time.response_time = 'sinf' THEN v_acc_response_time.count 
          ELSE NULL 
        END AS count, 
        CASE 
          WHEN v_acc_response_time.response_time = '+inf' THEN CAST(v_acc_response_time.sum / 1000000 AS FLOAT) 
          ELSE NULL 
        END AS sum 
      FROM 
        (SELECT 
          m.tenant_id, 
          b.response_time / 1000000 AS response_time, 
          SUM(a.count) AS count, 
          SUM(a.total) AS sum 
        FROM 
          __all_virtual_query_response_time a, __all_virtual_query_response_time b 
        WHERE 
          a.response_time <= b.response_time AND a.svr_ip = b.svr_ip AND a.svr_port = b.svr_port AND b.svr_ip = ? AND b.svr_port = ? 
        GROUP BY 
          b.tenant_id) v_acc_response_time 
      JOIN 
        __all_tenant ON v_acc_response_time.tenant_id = __all_tenant.tenant_id;
      
  5. 重启 monagent 进程

    • 尝试重启 monagent 进程,看看是否能够解决问题:
      ./ocp_agentctl restart
      
  6. 检查 OCP 配置

    • 确认 OCP 的配置文件是否正确,特别是与监控相关的配置项。 [5]

总结:

  • 检查 monagent 进程状态,确保其正常运行。
  • 检查日志中的 SQL 语句,确保数据表中的数据正确无误。
  • 修改 SQL 语句以处理 nil 值。
  • 重启 monagent 进程。
  • 检查 OCP 的配置文件。

希望以上步骤能帮助您解决问题。如果问题仍然存在,请提供更多详细信息以便进一步排查。

检索到的文档如下:

  1. OCP-Agent 运维脚本使用说明
  2. OCP V3.3.0
  3. OceanBase 集群合并异常处理
  4. OCP V4.3.0
  5. 使用命令行部署 OCP Express
  6. monagent_process_stop ocp_monagent 进程停止
  7. 错误码
  8. OCP-Agent 时序监控数据拉取方案
  9. agentd_process_stop ocp_agentd 进程停止
1 个赞

ocp版本麻烦也发下

1 个赞

image

1 个赞

根据您提供的图片和 OCR 文本内容,您正在使用的 OceanBase 云平台版本为 4.2.2-20240108,发布日期为 2024 年 1 月 11 日。

针对您之前遇到的 monagent.log 日志中类型转换异常导致 OCP 集群监控数据为空的问题,以下是进一步的排查和解决方案:

详细排查步骤:

  1. 确认 monagent 进程状态

    • 检查 monagent 进程是否正常运行。如果进程停止,可能会导致监控数据缺失。
    ps aux | grep monagent
    

    如果进程未运行,尝试重启 monagent 进程:

    ./ocp_agentctl restart
    
  2. 检查日志中的 SQL 语句

    • 根据日志中的 SQL 语句,可以看到查询涉及到了 __all_tenant__all_virtual_query_response_time 表。这些表用于收集监控数据。
    • 确保这些表的数据正确无误,特别是 countsum 字段不应为 nil
  3. 类型转换异常排查

    • 日志中提到的类型转换异常主要出现在 countsum 字段。这可能是由于某些数据为空或者类型不匹配导致的。
    • 检查 __all_tenant__all_virtual_query_response_time 表中的数据,确保没有 nil 或者类型不匹配的情况。
  4. 修改 SQL 语句

    • 根据日志中的 SQL 语句,尝试修改 SQL 语句来处理 nil 值,例如:
      SELECT 
        _all_tenant.tenant_name AS tenant_name, 
        v_acc_response_time.response_time AS response_time_seconds, 
        v_acc_response_time.count AS bucket, 
        CASE 
          WHEN v_acc_response_time.response_time = 'sinf' THEN v_acc_response_time.count 
          ELSE NULL 
        END AS count, 
        CASE 
          WHEN v_acc_response_time.response_time = '+inf' THEN CAST(v_acc_response_time.sum / 1000000 AS FLOAT) 
          ELSE NULL 
        END AS sum 
      FROM 
        (SELECT 
          m.tenant_id, 
          b.response_time / 1000000 AS response_time, 
          SUM(a.count) AS count, 
          SUM(a.total) AS sum 
        FROM 
          __all_virtual_query_response_time a, __all_virtual_query_response_time b 
        WHERE 
          a.response_time <= b.response_time AND a.svr_ip = b.svr_ip AND a.svr_port = b.svr_port AND b.svr_ip = ? AND b.svr_port = ? 
        GROUP BY 
          b.tenant_id) v_acc_response_time 
      JOIN 
        __all_tenant ON v_acc_response_time.tenant_id = __all_tenant.tenant_id;
      
  5. 检查 OCP 配置

    • 确认 OCP 的配置文件是否正确,特别是与监控相关的配置项。
    • 检查 OCP 的日志文件,查看是否有其他异常信息。
  6. 清理监控数据缓存

    • 尝试清理 OCP 的监控数据缓存,重新生成监控数据:
    ./ocp_ctl clean_monitor_cache
    

总结:

  • 检查 monagent 进程状态,确保其正常运行。
  • 检查日志中的 SQL 语句,确保数据表中的数据正确无误。
  • 修改 SQL 语句以处理 nil 值。
  • 重启 monagent 进程。
  • 检查 OCP 的配置文件。
  • 清理监控数据缓存。

希望以上步骤能帮助您解决问题。如果问题仍然存在,请提供更多详细信息以便进一步排查。

检索到的文档如下:

  1. 升级概述
  2. 通过 OCP 部署 OceanBase 集群
  3. OceanBase 数据库社区版 V4.2.0
  4. OceanBase 数据库 V4.1.0
  5. OceanBase 数据库社区版 V3.1.5
  6. 从 SQL 文件导入数据到 OceanBase 数据库

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

1 个赞

monagent.log 麻烦上传下附件吧

1 个赞

monagent-2024-09-15T07-47-10.184.log.gz (5.1 MB)

1 个赞

我联系ocp的老师看下,有进展回复你

1 个赞

这个是OCP Express,生产不建议使用这个,建议使用OCP

也就是ocp Express确实是存在问题的对吧,考虑修复下么? ocp express的前途感觉很大,大大的简化了部署安装操作

大概率是的,还在确认,不过OCP Express现在及后面维护力度就很小了,主推OCP

可以看下这个帖子

两者之间的区别还是知道的,用OCP Express的主要目的为了中小型项目资源有限的情况下,既有一个相对简单的功能又不需要额外增加资源,在资源充足的情况下OCP没有任何问题,可是要想一个问题,大型甚至超大型项目毕竟是少数,九成九的时候都是中小型项目或从小项目累计起来的,这样OCP Express过度作用就尤为重要

我再联系相关老师确认下这个问题,有进展回复你