传统运维 - Grafana截图
2023-06-26
基于插件 Grafana Image Renderer
import requests
import base64
def generate_grafana_screenshot(grafana_url, api_key, dashboard_uid, width=None, height=None, time_range='now-1h'):
# 构建 API 请求 URL
api_url = f"{grafana_url}/render/d/{dashboard_uid}"
# 设置请求头,包括 API 密钥和期望的响应格式(这里使用 PNG 格式)
headers = {
"Authorization": f"Bearer {api_key}",
"Accept": "image/png"
}
# 构建 API 请求参数
params = {
"orgId": 1, # 组织 ID
"viewPanel": 14, # 面板 ID,如果你知道要截图的面板 ID,可以相应修改
"from": time_range, # 时间范围
"width": width,
"height": height
}
# 发送 API 请求
response = requests.get(api_url, headers=headers, params=params)
# 检查响应状态码
if response.status_code == 200:
# 解码图像数据
image_data = base64.b64encode(response.content).decode('utf-8')
return image_data
else:
print(f"请求失败:{response.status_code} {response.text}")
return None
# 示例用法
grafana_url = "https://grafana.xx.com"
api_key = "eyJrIjoiUEd3U2JqRFhDRlhpbjE2amtsaW8iLCJuIjoic2NyZWVuIiwiaWQiOjF9"
dashboard_uid = "WojTmk"
screenshot_data = generate_grafana_screenshot(grafana_url, api_key, dashboard_uid, width=1500, height=600)
if screenshot_data:
# 这里可以保存截图为文件,或者将数据传递给其他集成工具进行处理
with open("screenshot.png", "wb") as file:
file.write(base64.b64decode(screenshot_data))
print("截图已保存为 screenshot.png")