monitor_exporter_unavaliable 时好时坏

【 使用环境 】生产环境
【 OB or 其他组件 】
使用OCP部署的OB集群
【 使用版本 】
【问题描述】
监控中出现monitor_exporter_unavaliable
告警事件详情

告警概述:alarm_template_id=0:host=10.0.202.94:exporter=/metrics/ob/basic 服务器存在监控exporter异常

告警详情:主机:10.0.202.94,告警:监控exporter http://10.0.202.94:62889/metrics/ob/basic(类型:OB_CLUSTER,采集间隔:15 秒)异常。

但是根据处理建议中的测试方法,这个主机的监控路由是可以获取到数据的,然后这个主机中/home/admin/ocp_agent/log/monagent.log 一直有错误
2025-03-14T19:03:47.81301+08:00 ERROR [1718143,80634c28cbfb8758] caller=engine/route_manager.go:210:ServeHTTP: failed to write http response from buffer fields: error=“write tcp 10.0.202.94:62889->10.0.202.93:41226: write: broken pipe”
2025-03-14T19:04:02.29958+08:00 ERROR [1718143,dbaa0e2cc31f7fd6] caller=engine/route_manager.go:210:ServeHTTP: failed to write http response from buffer fields:, error=“write tcp 10.0.202.94:62889->10.0.202.93:40975: write: broken pipe”

其中 10.0.202.93 是OCP的机器,ocp_monitor租户是3核8G的配置

麻烦发下OCP版本及使用OCP所部署的OB的版本,以及这个monagent.log文件

1 个赞

另外麻烦执行下如下命令,将执行耗时截图及结果附件发下
time curl -s --unix-socket /home/admin/ocp_agent/run/ocp_monagent.$(cat /home/admin/ocp_agent/run/ocp_monagent.pid).sock http://unix-socket-server/metrics/ob/basic > basic.log

1 个赞
real 0m1.369s
user 0m0.004s
sys 0m0.021s

执行结果已经上传。 另外OCP版本号是: 版本号: 4.3.3-20241219140415 发布日期: 2024年12月19日
OCP自身的集群单机版版本号:4.2.1.8
通过OCP部署的OB集群版本号是 4.2.5.1
现状就是 我通过OCP部署的OB集群 3个节点都有报警说这个监控组件获取不到结果,但是机器都是一个机房没有跨网络设备。
metrics.log (7.4 MB)

1 个赞

monagent.log.zip (1.3 MB)

1 个赞

系统不稳定吗

这个是已知问题,在OCP4.3.4已经修复了,建议升级OCP版本,我也问下这块的老师有没有绕过方式

ob_query_rt(sql_type=“REDIS xxx”)指标数据太多导致处理慢进而导致exporter不可用

绕过方式:

  1. 在主机上新建一个tmp目录, 将 /home/admin/ocp_agent/conf/module_config/monitor_ob.yaml 拷贝到tmp目录下,同时建议另外建一个backup目录先备份下这个配置文件。

  2. 修改 monitor_ob.yaml 的内容,在ob_query_rt 的采集配置下增加 “disabled: true”来停止该指标的采集,即下面截图中的内容

  3. 在 tmp 目录下创建一个push.py 的执行推送的脚本,脚本内容:

#!/usr/bin/python

import base64
import httplib
import json
import sys


def main():
  host = sys.argv[1]
  userPswd = sys.argv[2]
  op = sys.argv[3].lower()
  c = httplib.HTTPConnection(host)
  header = {
    "Authorization": "Basic " + base64.b64encode(userPswd),
    "Content-Type": "application/json"
  }
  if op == "get":
    c.request("GET", "/api/v2/compute/hosts/moduleConfigChanges", None, header)
  else:
    fileName = sys.argv[4]
    content = ""
    if op == "set":
      content = sys.stdin.read()
    print("%s %s" % (op, fileName))
    q = {
      "changes": [{
      "operation": op,
      "scopeType": "global",
      "scope": "",
      "fileName": fileName,
      "content": content,
      }]
    }
    body = json.dumps(q)
    c.request("POST", "/api/v2/compute/hosts/moduleConfigChanges", body, header)
  r = c.getresponse()
  print(r.status)
  print(r.read())

if __name__ == '__main__':
  main()
  1. 依次执行下面两条命令推送配置文件,需要将命令中的ip、port、username、password 替换成OCP的ip、端口、用户名、密码。
python push.py ip:port username:password set monitor_ob.yaml < monitor_ob.yaml
  1. 然后到主机上确认下agent的 monitor_ob.yaml 中的内容是否已经更新;
  2. 最后需要到OCP metadb 中将 compute_host_agent_module_config_change 表里的对应记录删除,否则会影响后面的ocp-agent升级。执行语句如下:
delete from compute_host_agent_module_config_change where file_name in ('monitor_ob.yaml');