如何通过API或脚本下载Elastic Search Kibana生成的PDF报告
正确下载Kibana生成的PDF报告的方法
你直接用wget请求失败是因为缺少Kibana API要求的鉴权凭证和必要请求头,部分场景下也可能是你发起请求时报告还未生成完成,导致返回非PDF响应。
方法1:使用wget直接下载
根据你的鉴权方式选择对应命令:
- 基础用户名密码鉴权:
wget --user=<Kibana用户名> --password=<Kibana密码> --header="kbn-xsrf: true" http(s)://<Kibana服务地址>:<端口><你获取到的下载路径>
- API Key鉴权:
wget --header="Authorization: ApiKey <你生成的Kibana API Key>" --header="kbn-xsrf: true" http(s)://<Kibana服务地址>:<端口><你获取到的下载路径>
注:kbn-xsrf: true是Kibana API强制要求的请求头,不可省略。
方法2:使用curl下载(输出更可控,更推荐)
curl -u <Kibana用户名>:<Kibana密码> -H "kbn-xsrf: true" -o report.pdf http(s)://<Kibana服务地址>:<端口><你获取到的下载路径>
执行后会直接把下载的PDF保存为当前目录下的report.pdf。
方法3:编程方式实现(含状态轮询,适合自动化脚本)
以下是Python示例:
import requests import time # 替换为你自己的配置 KIBANA_HOST = "http://你的Kibana地址:5601" DOWNLOAD_PATH = "/api/.../download/xyzdrfd" USER = "你的Kibana账号" PWD = "你的Kibana密码" headers = { "kbn-xsrf": "true" } # 先轮询确认报告生成完成 status_path = DOWNLOAD_PATH.replace("/download/", "/status/") while True: resp = requests.get(f"{KIBANA_HOST}{status_path}", auth=(USER, PWD), headers=headers) resp_data = resp.json() if resp_data["status"] == "completed": break if resp_data["status"] == "failed": raise Exception(f"报告生成失败:{resp_data.get('error', '未知错误')}") time.sleep(2) # 下载保存PDF download_resp = requests.get(f"{KIBANA_HOST}{DOWNLOAD_PATH}", auth=(USER, PWD), headers=headers) with open("report.pdf", "wb") as f: f.write(download_resp.content)
常见问题补充
- 如果你的Kibana用了自签名HTTPS证书,wget追加
--no-check-certificate参数,curl追加-k参数,Python requests请求追加verify=False参数即可 - 所用的账号/API Key需要提前配置
reporting:download权限,否则会返回403错误
内容的提问来源于stack exchange,提问作者Rahuman
相关产品推荐
相关产品推荐

