Kibana从7.10.2升级到8.6.2后如何获取ES端点JSON响应?
解决Kibana 8.6.2获取JSON格式搜索响应的方法
方法1:禁用请求压缩
Kibana 8.x的bsearch接口默认返回gzip压缩内容,你可以通过请求头告知服务器不要压缩,直接拿到JSON:
- curl命令示例:
curl --header "Accept-Encoding: identity" "http://url:5601/internal/bsearch?compress=true" -u username:password
- Python requests请求修改:
import requests url = "http://url:5601/internal/bsearch?compress=true" headers = { # 保留原有请求头(如kbn-xsrf),添加以下字段 'Accept-Encoding': 'identity' } response = requests.post(url, headers=headers, data=httpData, auth=('username','password')) json_data = response.json()
方法2:手动解码压缩响应
如果不想修改请求头,可对返回的压缩内容手动解码:
- curl搭配gzip解码:
curl "http://url:5601/internal/bsearch?compress=true" -u username:password | gzip -d
- Python手动处理解码:
import requests import gzip from io import BytesIO import json response = requests.post(url, headers=header, data=httpData, auth=('username','password'), stream=True) if response.headers.get('Content-Encoding') == 'gzip': buffer = BytesIO(response.content) with gzip.GzipFile(fileobj=buffer) as f: json_str = f.read().decode('utf-8') json_data = json.loads(json_str)
方法3:直接调用Elasticsearch原生API
跳过Kibana,直接访问ES的搜索接口获取数据,这是最直接的方式:
- curl命令示例(需ES访问权限):
curl "http://es-url:9200/目标索引名/_search" -u es账号:es密码 -H "Content-Type: application/json" -d '{"query": {"match_all": {}}}'
- Python使用ES客户端库:
from elasticsearch import Elasticsearch es = Elasticsearch("http://es-url:9200", basic_auth=('es账号', 'es密码')) response = es.search(index="目标索引名", query={"match_all": {}}) json_data = response.body
注意:直接访问ES需确保账号有对应索引的查询权限,且网络能连通ES服务端口。
内容的提问来源于stack exchange,提问作者Sirish Manandhar
相关产品推荐
相关产品推荐

