传统运维 - 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")

标题:传统运维 - Grafana截图
地址:https://blog.njqhome.com:8443/articles/2023/06/26/1687764199842.html