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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:53:26