如何用Python通过API基于带用户筛选的OpenSearch仪表盘生成PDF报告?
可行,以下是Python实现方案
前提条件
- OpenSearch集群已启用Reporting插件
- 拥有具备
cluster:admin/opendistro/reporting/generate等权限的OpenSearch账号
实现步骤
1. 构造带用户筛选的仪表盘URL
先获取目标仪表盘的基础URL,再添加筛选参数。比如要筛选用户user123,可在URL中加入类似_a=(filters:!((query:(match_phrase:(user_id:'user123')))))的参数(具体格式可手动完成筛选后,复制浏览器地址栏的参数直接复用)。
2. 通过OpenSearch Reporting API生成PDF
使用Python的requests库调用API,完成认证、触发报告生成并下载结果:
import requests import time from requests.auth import HTTPBasicAuth # 配置信息 OPENSEARCH_HOST = "https://your-opensearch-host:9200" USERNAME = "your-username" PASSWORD = "your-password" TARGET_USER = "user123" DASHBOARD_URL = f"https://your-opensearch-dashboard-host:5601/app/dashboards#/view/your-dashboard-id?_a=(filters:!((query:(match_phrase:(user_id:'{TARGET_USER}')))))" # 触发报告生成 generate_payload = { "url": DASHBOARD_URL, "format": "pdf", "title": f"用户{TARGET_USER}指标报告", "browser_type": "chromium" } response = requests.post( f"{OPENSEARCH_HOST}/_plugins/_reporting/generate", json=generate_payload, auth=HTTPBasicAuth(USERNAME, PASSWORD), verify=False # 自签名证书场景下使用,生产环境建议配置证书验证 ) response.raise_for_status() report_id = response.json()["report_id"] # 轮询报告状态 status_url = f"{OPENSEARCH_HOST}/_plugins/_reporting/report/jobs/{report_id}" while True: status_res = requests.get(status_url, auth=HTTPBasicAuth(USERNAME, PASSWORD), verify=False) status_res.raise_for_status() current_status = status_res.json()["status"] if current_status == "COMPLETED": break elif current_status in ["FAILED", "CANCELLED"]: raise Exception(f"报告生成失败:{current_status}") time.sleep(5) # 下载并保存PDF download_res = requests.get( f"{OPENSEARCH_HOST}/_plugins/_reporting/report/jobs/{report_id}/download", auth=HTTPBasicAuth(USERNAME, PASSWORD), verify=False ) download_res.raise_for_status() with open(f"user_{TARGET_USER}_report.pdf", "wb") as f: f.write(download_res.content) print(f"报告已保存:user_{TARGET_USER}_report.pdf")
注意事项
- 确保OpenSearch集群能访问仪表盘URL(Reporting插件需抓取仪表盘内容)
- 若用API密钥认证,可将
auth参数替换为headers={"Authorization": "ApiKey YOUR_API_KEY"} - 生产环境需移除
verify=False,配置合法的CA证书路径 - 可通过调整请求体参数自定义报告纸张大小、页眉页脚等样式
内容的提问来源于stack exchange,提问作者says
相关产品推荐
相关产品推荐

