【grafana】Grafana Image Renderer插件获取grafana仪表盘图片(docker方式、python爬虫)

1、编写docker-compose.yml文件 

#如果你已启动grafana容器,只需修改docker-compose.yml,在grafana添加环境变量,grafana-image-renderer插件的服务,官网地址:Grafana Image Renderer plugin for Grafana | Grafana Labs,根据官网该插件需要16G的内存,但我测试4c8g也可正常运行

version: '2'services:grafana:image: grafana/grafana:latestports:- '3000:3000'environment:GF_RENDERING_SERVER_URL: http://renderer:8081/renderGF_RENDERING_CALLBACK_URL: http://grafana:3000/GF_LOG_FILTERS: rendering:debugrenderer:image: grafana/grafana-image-renderer:latestports:- 8081:8081

2、启动docker-compose.yml

docker-compose up -d

3、测试图片

4、写python脚本批量获取图片


[root@dt1 bin]# cat download_dashboard.py
# -*- coding: utf-8 -*-import requests
import os
import time
from datetime import datetime, timedelta#获取当前目录的上一层目录
script_dir = os.path.dirname(os.getcwd())
#script_dir = os.path.dirname(os.path.abspath(__file__))
#图片保存目录
target_dir = os.path.join(script_dir+"/png")#获取指定日期时间的时间戳,毫秒级别
def get_timestamp(date_time):return int(time.mktime(date_time.timetuple())) * 1000
#获取几天前仪表盘数据
days=7
#当前时间戳
time_now=get_timestamp(datetime.now())
#7天前时间戳
time_old=get_timestamp(datetime.now() - timedelta(days=days))
#em ip 地址
em_ip="172.16.8.193"##获取仪表盘图片
def download_img_with_timeout(url, headers, img_name, timeout):try:response = requests.get(url, headers=headers, timeout=timeout)target_path = os.path.join(target_dir, img_name)if response.status_code == 200:with open(target_path, 'wb') as f:f.write(response.content)print(img_name+"仪表盘图片下载成功")else:print("获取仪表盘图片失败,HTTP 状态码:", response.status_code)except requests.exceptions.Timeout:print("请求超时")except requests.exceptions.RequestException as e:print("请求异常:", e)#请求头,cookie可以不加,根据实际情况
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0","Cookie": "dtstack=test,em_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDk3MDU5NjcsInNlc3Npb25faGFzaF9pZCI6ImNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhIiwidXNlcl9pZCI6MSwidXNlcl9uYW1lIjoiYWRtaW5AZHRzdGFjay5jb20iLCJ1c2VyX3Blcm1pc3Npb24iOjF9.rGjRbK-61VT-t38OXeBtmzoB9CmIGhEUdD8Nf0Crs1Y; em_username=admin@dtstack.com;"
}# url列表
url_img_map = {"dashboard_disk":["Ne_roaViz/host_overview?theme=light&orgId=1&from=","44","DiskUsed.png"],"dashboard_mem":["Ne_roaViz/host_overview?theme=light&orgId=1&from=","50","MemUsed.png"],"dashboard_systemload":["Ne_roaViz/host_overview?theme=light&orgId=1&from=","38","SystemLoad.png"],"dashboard_uic":["qVfmgmTqf/dtuic_overview?theme=light&orgId=1&from=","210","uic_gc_count.png"],"dashboard_publicserver":["qVfmgmTqv/publicservice_overview?theme=light&orgId=1&from=","210","publcserver_gc_count.png"],"dashboard_schedulex":["qVfmgmTqg/engine_overview?theme=light&orgId=1&from=","210","schedulex_gc_count.png"],"dashboard_metadata":["qVfmgmTqc/metadata_overview?theme=light&orgId=1&from=","210","metadata_gc_count.png"],"dashboard_gateway":["qVfmgmTqh/gateway_overview?theme=light&orgId=1&from=","210","gateway_gc_count.png"],"dashboard_batch":["qVfmgmTqd/batch_overview?theme=light&orgId=1&from=","210","batch_gc_count.png"],"dashboard_stream":["qVfmgmTqn/stream_overview?theme=light&orgId=1&from=","210","stream_gc_count.png"],"dashboard_assets":["qVfmgmT4z-assets/assets_overview?theme=light&orgId=1&from=","210","assets_gc_count.png"],"dashboard_api":["qVfmgmT4z/api_overview?theme=light&orgId=1&from=","210","api_gc_count.png"],#"dashboard_easyindex":[""dashboard_tag":["qVfmgmTqm/tag_overview?theme=light&orgId=1&from=","210","tag_gc_count.png"]
}
##调用
for key, value in url_img_map.items():url=value[0]id=value[1]img_name=value[2]url="http://"+em_ip+"/grafana/render/d-solo/"+url+str(time_old)+"&to="+str(time_now)+"&panelId="+id+"&width=1000&height=500&tz=Asia%2FShanghai"#print url,img_namedownload_img_with_timeout(url, headers, img_name, timeout=5)

把图片加载到doc文档

[root@dt1 bin]# cat doc.py
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Inches
import os# 创建一个新的Word文档
doc = Document()#获取当前目录的上一层目录
script_dir = os.path.dirname(os.getcwd())
#仪表盘路径
image_path = os.path.join(script_dir,"png")#
title1 = u'二、服务器层面'
title2 = u'2.1 磁盘'
title3 = u'2.1.1 磁盘使用率'
doc.add_heading(title1, level=1)
doc.add_heading(title2, level=2)
doc.add_heading(title3, level=3)
doc.add_picture(image_path+"/DiskUsed.png", width=Inches(3))
#
title2 = u'2.2 内存'
title3 = u'2.2.1 内存使用率'
doc.add_heading(title2, level=2)
doc.add_heading(title3, level=3)
doc.add_picture(image_path+"/MemUsed.png", width=Inches(3))
#
title2 = u'2.3 CPU'
title3 = u'2.3.1 cpu负载情况'
doc.add_heading(title2, level=2)
doc.add_heading(title3, level=3)
doc.add_picture(image_path+"/SystemLoad.png", width=Inches(3))#
title1 = u'四、数栈服务组件'
title2 = u'4.1 DTUic'
doc.add_heading(title1, level=1)
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/uic_gc_count.png", width=Inches(3))
title2 = u'4.2 DTPublicservice'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/publcserver_gc_count.png", width=Inches(3))
title2 = u'4.3 DTSchedulex'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/schedulex_gc_count.png", width=Inches(3))
title2 = u'4.4 DTMetadata'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/metadata_gc_count.png", width=Inches(3))
title2 = u'4.5 DTGateway'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/gateway_gc_count.png", width=Inches(3))
title2 = u'4.6 DTBatch'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/batch_gc_count.png", width=Inches(3))
title2 = u'4.7 DTStream'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/stream_gc_count.png", width=Inches(3))
title2 = u'4.8 DTAssets'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/assets_gc_count.png", width=Inches(3))
title2 = u'4.9 DTApi'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/api_gc_count.png", width=Inches(3))
title2 = u'4.10 DTEasyIndex'
doc.add_heading(title2, level=2)
#doc.add_picture(image_path+"/easyindex_gc_count.png", width=Inches(3))
title2 = u'4.11 DTTag'
doc.add_heading(title2, level=2)
doc.add_picture(image_path+"/tag_gc_count.png", width=Inches(3))# 保存Word文档
doc.save(script_dir+"/doc/output.docx")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522085.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码

1 煎饼排序问题 给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转(arr,i):将数组从0反转为i 示例: 输入:arr[]{23、10、20、11、12、6、7} 输出&#xff1a…

基于51单片机风速仪风速测量台风预警数码管显示

基于51单片机风速仪风速测量报警数码管显示 1. 主要功能:2. 讲解视频:3. 仿真4. 程序代码5. 设计报告🔗6. 下载链接资料下载链接: 基于51单片机风速仪风速测量报警数码管显示( proteus仿真程序设计报告讲解视频) 仿真图…

别再害怕SQL:用这个友好的MySQL学习网站轻松入门!

介绍:MySQL是一个广泛使用的关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,并现在属于Oracle公司。以下是对MySQL的详细介绍: 发展历史:MySQL最初由瑞典MySQL AB公司于1995年开发&…

XSS漏洞-存储型漏洞案例

一、环境 在github上找DVWA的靶机环境 DVWA存储库 二、复现 先将其安全等级改为低 然后点击存储型的xss,先随便写几条看看现象 可以看到我们写的都展示在了下面的框中 看看源码,分析在存储时的漏洞 我们可以看到,在对数据插入的时候&am…

全面认识计算机

目录 一、计算机的发展史 1. 电子管计算机时代 2. 晶体管计算机时代 3. 小、中规模集成电路计算机时代 4. 大、超大规模集成电路计算机时代 二、计算机硬件组成 1. 输入设备 2. 输出设备 3. 存储器 4. 运算器 5. 控制器 三、计算机硬件间的连接 四、计算机系统的结…

YOLOv8原创改进:原创自研head创新 | 空间上下文感知模块(SCAM)结合超轻量高效动态上采样DySample | 小目标涨点系列

💡💡💡本文独家改进:YOLOV8 head创新,1)一种超轻量高效动态上采样DySample, 具有更少的参数、FLOPs,效果秒杀CAFFE和YOLOv8网络中的nn.Upsample;2)加入空间上下文感知模块(SCAM)进一步提升检测精度; 改进结构图如下: 💡💡💡在多个数据集下验证能够涨点…

【Linux】Linux——Centos7安装

目录 虚拟机安装【空壳子】安装VMware Workstation新建虚拟机硬件兼容性(直接下一步)稍后安装操作系统客户及操作系统选择Linux,版本Centos764位给虚拟机命名,并选择安装位置处理器配置(默认即可,不够用后面可以调)虚拟…

基于java+springboot+vue实现的校园悬赏任务平台(文末源码+Lw)23-277

摘 要 使用旧方法对校园悬赏任务平台的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在校园悬赏任务平台的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的…

混合输入矩阵乘法的性能优化

作者 | Manish Gupta OneFlow编译 翻译|宛子琳、杨婷 AI驱动的技术正逐渐融入人们日常生活的各个角落,有望提高人们获取知识的能力,并提升整体生产效率。语言大模型(LLM)正是这些应用的核心。LLM对内存的需求很高&…

HTML使用

文章目录 一、简介二、HTML快速入门三、基础标签四、图片、音频、视频标签五、超链接标签六、列表标签七、表格标签八、布局标签九、表单标签十、表单向标签 一、简介 二、HTML快速入门 ​ <html><head><title>你好</title></head><body>再…

旅游陪同翻译,英译中需要具备什么能力!

随着中国旅游业的蓬勃发展&#xff0c;越来越多的外国游客选择踏足这片充满魅力的土地。然而&#xff0c;语言障碍常常成为他们探索中国文化的绊脚石。在这时&#xff0c;旅游陪同翻译应运而生&#xff0c;为游客提供了便捷的语言沟通服务&#xff0c;让他们的旅程更加顺畅和愉…

智慧城市如何助力疫情防控:科技赋能城市安全

目录 一、引言 二、智慧城市与疫情防控的紧密结合 三、智慧城市在疫情防控中的具体应用 1、智能监测与预警系统 2、智慧医疗与健康管理 3、智能交通与物流管理 4、智慧社区与基层防控 四、科技赋能城市安全的未来展望 五、结论 一、引言 近年来&#xff0c;全球范围内…