OCP 的慢SQL接口配置过滤条件的时候返回400

【 使用环境 】生产环境
【 OB or 其他组件 】OCP
【 使用版本 】4.3.1
【问题描述】OCP 的慢SQL接口配置过滤条件的时候返回400,去掉filterExpression就正常,filterExpression的语法要怎么写,官方文档中没有给出示例
curl “http://x.x.x.x:8080/api/v2/ob/clusters/1/tenants/1/slowSql?inner=false&filterExpression=@avgElapsedTime>500&startTime=2024-09-03T00:00:00Z&endTime=2024-09-04T00:00:00Z” -H “Authorization: Basic xxxxx”
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

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

1 个赞

用户问题: 在 OCP 4.3.1 版本中配置慢 SQL 接口过滤条件时遇到了返回 400 错误的情况,希望了解如何正确书写 filterExpression 语法。

根据您的描述,当前的问题主要集中在配置慢 SQL 接口的过滤条件时出现了 HTTP 400 错误,这通常意味着请求存在语法错误或不符合预期的格式。虽然 obdiag 主要用于采集和分析与 OceanBase 相关的日志文件及系统状态,但在此情况下,我们更倾向于解决配置问题而非直接通过 obdiag 来诊断。

不过,为了确保集群本身没有因为配置不当而产生其他潜在问题,建议先使用 obdiag 对集群的基础信息进行一次全面的采集。这样可以帮助我们排除其他可能性,并且在后续的配置调试中作为参考。

日志采集场景: 集群基础信息
日志采集命令: obdiag gather scene run --scene=observer.base

请您执行上述命令并将生成的日志压缩包提供给我们。此外,请您补充以下信息以便我们更好地协助您解决问题:

  1. 您尝试使用的 filterExpression 具体内容是什么?
  2. 是否有尝试过参照官方文档或其他成功示例进行配置?
  3. 当前集群中是否有其他已生效的过滤规则?如果有,请提供相关信息。
  4. 返回的 400 错误是否有附带具体的错误消息或描述?
  5. 您是在哪个具体的操作界面上配置的过滤条件?例如,是通过 API 调用还是直接在 OCP 界面中操作的?

以上信息将有助于我们更准确地定位问题所在,并为您提供针对性的解决方案。

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

附上敏捷诊断工具 obdiag 使用帮助链接

<!doctype html>HTTP Status 400 – Bad Requestbody {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}

HTTP Status 400 – Bad Request

测试了一下有>这种就不行,指定filterExpression=@dbName!='sys’and@dbName!='oceanbase’就没问题

再向您确认几个问题:

  1. 您提到使用大于号会导致配置失败具体是指哪个字符导致的问题
  2. 除了大于号之外是否还有其他特殊字符在配置时也遇到了相同的问题
  3. 能否提供一个包含大于号但导致配置失败的具体 filterExpression 示例
  4. 在 OCP 的文档或社区中是否已经查询过关于特殊字符使用的限制说明

目前只遇到了>会导致问题,但是官方文档给的条件是有>号的哦

特殊符号需要转义

1 个赞


image

是那个条件 截图看看

接口调用的

这个转义的规则是啥?base64吗?

curl “http://x.x.x.x:8080/api/v2/ob/clusters/3/tenants/5/slowSql?inner=false&filterExpression=%40avgCpuTime>500 and @dbName!=‘sys’ and @dbName != ‘oceanbase’&startTime=2024-09-03T00:00:00Z&endTime=2024-09-04T00:00:00Z” -H "Authorization: Basic xxx
这样还是返回400

例子中
@ 转义 %40
大于号 转义 %3E

你按这个转义试下

Http Url中的转义字符

inner=false&‘filterExpression=@avgCpuTime%3E500’ and @dbName!=‘sys’ and @dbName != ‘oceanbase’ 改写成这样试一下

这样也是400
inner=false&‘filterExpression=@avgCpuTime%3E500’ and @dbName!=‘sys’ and @dbName != ‘oceanbase’

后面找一下同学 在跟进一下 稍后回复你