You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Kibana _find接口获取saved objects报no handler found错误如何解决

正确获取Kibana指定空间下已保存查询的方法

错误原因梳理

  • 端口匹配错误:/api/saved_objects/_find 是Kibana专属接口,不属于Elasticsearch。你最初请求的9200是Elasticsearch默认端口,自然找不到对应路由,返回400错误。
  • 调用逻辑错误:直接使用es.search()是操作Elasticsearch原生索引的接口,Kibana的已保存对象默认存储在.kibana_*系统索引中,普通用户没有该索引的访问权限,所以返回403权限错误,不推荐直接通过ES接口操作Kibana保存对象。
  • 5601端口连接断开的常见排查点:
    1. Kibana实例是否修改了默认端口,未监听5601
    2. Kibana是否开启了HTTPS,使用HTTP协议请求会被直接断开连接
    3. 服务器安全组/防火墙是否拦截了你本地到Kibana服务器5601端口的请求
    4. Kibana是否开启了CSRF校验,缺少指定请求头会被拒绝访问

正确实现代码

首先确认你的Kibana访问地址、端口、协议(HTTP/HTTPS)正确,再参考如下代码请求:

import requests

# 替换为你的实际配置
KIBANA_URL = "http://你的Kibana地址:端口"
SPACE_ID = "guy-levin"
USERNAME = "你的用户名"
PASSWORD = "你的密码"

# Kibana接口要求的请求头,避免CSRF校验拦截
headers = {
    "kbn-xsrf": "true"
}

url = f"{KIBANA_URL}/s/{SPACE_ID}/api/saved_objects/_find?type=search&per_page=1000"
# 如果Kibana用的是自签HTTPS证书,可以加verify=False参数忽略校验(仅测试环境使用)
r = requests.get(url, auth=(USERNAME, PASSWORD), headers=headers)

if r.status_code == 200:
    saved_searches = r.json()["saved_objects"]
    # 输出所有已保存查询的名称和ID
    for item in saved_searches:
        print(f"查询名称:{item['attributes']['title']}, 查询ID:{item['id']}")
else:
    print(f"请求失败,状态码:{r.status_code},错误信息:{r.text}")

额外说明

如果确认网络连通但还是返回权限错误,需要在Kibana的角色权限配置中,给对应用户授予对应空间的「Saved Objects 读权限」即可。

内容的提问来源于stack exchange,提问作者Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:54:09