本文分享使用python搭建服务器应用的监控系统面板,主要流程如下:

1、数据库中创建数据表

2、建立数据库连接

实时数据插入数据表,实时查询更新面板数据准备

3、监控中心大屏制作

具体步骤:

1、创建监测指标数据表字段

这里为了方便将系统信息监控的CPU信息、内存信息、磁盘信息放在一张表中。

实际上可以将CPU和磁盘信息监控指标分表设置,两者对时间粒度要求是不一样的,减少不需要的资源消耗。后期专门写一篇来聊聊如何搭建数据指标体系。

import pymysql
db = pymysql.connect(user="root", passwd="root", db="mydb", host="127.0.0.1")
cur = db.cursor()# from sqlalchemy import create_engine
# engine = create_engine(
#     "mysql+pymysql://root:root@127.0.0.1:3306/mydb?charset=utf8")
# print(engine)# 创建数据表--系统信息监控
sql="""CREATE TABLE IF NOT EXISTS system_info(ID int(8) not null auto_increment COMMENT '序号',TIME datetime not null COMMENT '记录时间',mem_free VARCHAR (100) NOT NULL COMMENT '可用内存',mem_total VARCHAR (100) NOT NULL COMMENT '总内存',mem_percent VARCHAR (100) NOT NULL COMMENT '内存百分比',mem_used VARCHAR (100) NOT NULL COMMENT '占用内存',cpu VARCHAR (100)  COMMENT 'CPU占比',disk1 VARCHAR (100)  COMMENT 'C盘使用占比',disk2 VARCHAR (100)  COMMENT 'D盘使用占比',disk3 VARCHAR (100)  COMMENT 'E盘使用占比',disk4 VARCHAR (100)  COMMENT 'F盘使用占比',disk5 VARCHAR (100)  COMMENT 'G盘使用占比',primary key(ID)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '系统信息监控';
"""
cur.execute(sql)
cur.close()

2、建立数据库连接

定时获取主机的一些内存、CPU、磁盘的信息,将获取的信息存储到数据库;这里利用轻量级定时模块schedule。

import psutil
import time
import pymysql
from datetime import datetime
import scheduledb = pymysql.connect(user="root", passwd="root", db="mydb", host="127.0.0.1")
db.autocommit(True)
cur = db.cursor()
def Get_sys_info():# cpu信息cpu = str(psutil.cpu_percent(interval=1)) + '%'# cpu = psutil.cpu_percent(interval=1, percpu=True)# 内存信息mem = psutil.virtual_memory()mem_total = round(mem.total / 1024 / 1024 / 1024, 0)mem_free = round(mem.free / 1024 / 1024 / 1024)mem_percent = str(mem.percent) + '%'mem_used = round(mem.used / 1024 / 1024 / 1024)# 磁盘信息(磁盘空间使用占比)disk1 = str(psutil.disk_usage('C:/').percent) + '%'disk2 = str(psutil.disk_usage('D:/').percent) + '%'disk3 = str(psutil.disk_usage('E:/').percent) + '%'disk4 = str(psutil.disk_usage('F:/').percent) + '%'disk5 = str(psutil.disk_usage('G:/').percent) + '%'return mem_free,mem_total,mem_percent,mem_used,cpu,disk1,disk2,disk3,disk4,disk5if __name__ == "__main__":def job():mem_free, mem_total, mem_percent, mem_used, cpu, disk1, disk2, disk3, disk4, disk5 = Get_sys_info()now_time = datetime.now()list1 = [now_time, mem_free, mem_total, mem_percent, mem_used, cpu, disk1, disk2, disk3, disk4, disk5]tuple_list = tuple([str(i) for i in list1])print(tuple_list)sql = """insert into system_info(TIME,mem_free,mem_total,mem_percent,mem_used,cpu,disk1,disk2,disk3,disk4,disk5) value (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""cur.execute(sql, tuple_list)try:schedule.every().minute.at(":00").do(job)except Exception as e:print('错误: %s'% e)while True:schedule.run_pending()time.sleep(1)

服务启动后,每分钟向数据库插入一次数据记录。这里有个小问题,插入时间点并没有从设置的:00开始,后面再优化这个细节。

3、监控中心大屏

从数据库获取数据如服务器的内存、CPU信息等,通过Pyecharts可视化制作图表并布局看板。通过以下流程生成一个粗略的大屏布局,由7个部分组成,按顺序排列。

import pymysql
from pyecharts.charts import Line
from pyecharts import options as opts
from pyecharts.charts import Bar, Pie, Page
from pyecharts.globals import ThemeTypedb = pymysql.connect(user="root", passwd="root", db="mydb", host="127.0.0.1")
cur1 = db.cursor()
cur2 = db.cursor()
cur3 = db.cursor()SQL1="""SELECT TIME,cpu,mem_percent FROM system_info WHERE TIME > DATE_SUB(NOW(), INTERVAL 60 MINUTE)"""  #查询最近1h内数据展示SQL2 = 'select disk1,disk2,disk3,disk4,disk5 from system_info order by TIME desc limit 1'SQL3 = 'select mem_free,mem_total,mem_percent,mem_used from system_info order by TIME desc limit 1'cur1.execute(SQL1)
cur2.execute(SQL2)
cur3.execute(SQL3)
cpu_data = cur1.fetchall()
disk_data = cur2.fetchall()
mem_data = cur3.fetchall()all_time = []
all_cpu = []
all_mem_percent = []
for time_cpu in cpu_data:TIME=time_cpu[0]cpu0=time_cpu[1].split('%')cpu_num = eval(cpu0[0])mem0=time_cpu[2].split('%')mem_percent = eval(mem0[0])all_cpu.append(cpu_num)all_time.append(TIME)all_mem_percent.append(mem_percent)disk_list = list(disk_data[0])
disk_percent=[eval(x.split("%")[0]) for x in disk_list]def tab0(name, color):  # 标题c = (Pie().set_global_opts(title_opts=opts.TitleOpts(title=name, pos_left='center', pos_top='center',title_textstyle_opts=opts.TextStyleOpts(color=color, font_size=20))))return cdef tab1(name, color):  # 标题c = (Pie().set_global_opts(title_opts=opts.TitleOpts(title=name, pos_left='center', pos_top='center',title_textstyle_opts=opts.TextStyleOpts(color=color, font_size=30))))return cdef tab2(name, color):c = (Pie().set_global_opts(title_opts=opts.TitleOpts(title=name, pos_left='center', pos_top='center',title_textstyle_opts=opts.TextStyleOpts(color=color, font_size=25))))return cdef line(all_time, all_cpu):line = (Line().add_xaxis(all_time).add_yaxis("CPU_info:%", all_cpu).set_global_opts(title_opts=opts.TitleOpts(title="CPU_info")))line.render()return linedef line1(all_time, all_mem_percent):line = (Line().add_xaxis(all_time).add_yaxis("Mem_percent:%",all_mem_percent).set_global_opts(title_opts=opts.TitleOpts(title="内存使用占比")))line.render()return linedef bar(disk_percent):bar =(Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))  #在这里输入啊,设置绘图主题为CHALK.add_xaxis(["C盘","D盘","E盘","F盘","G盘"]).add_yaxis("磁盘使用占比:%",disk_percent))bar.render()return bardef pie_base():c = (Pie().add("", [list(z) for z in zip(['mem_free', 'mem_used'],[mem_data[0][0],mem_data[0][3]])]).set_global_opts(title_opts=opts.TitleOpts(title="内存使用占比")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))return c
#将上面图拼接到网页上
page = Page()
page.add(tab0("Python数据分析实例", "#2CB34A"),line(all_time,all_cpu),tab1("系统信息监控数据可视化大屏", "#2CB34A"),tab2("可用内存:{mem_free}\n\n总内存:{mem_total}\n\n内存占比:{mem_percent}\n\n占用内存:{mem_used}".format(mem_free=mem_data[0][0],mem_total=mem_data[0][1],mem_percent=mem_data[0][2],mem_used=mem_data[0][3]), "#000000"),bar(disk_percent),pie_base(),line1(all_time,all_mem_percent)
)
page.render("data_center.html")
db.close()

配色码-查看RGB颜色查询对照表|RGB颜色|三原色配色表 (sojson.com)

数据可视化面板预览

最后,进一步对大屏布局并设置一张好看的底图。

其中,lxml是python的一个解析库,支持HTML和XML的解析。

from bs4 import BeautifulSoup
with open("data_center.html", "r+", encoding='utf-8') as html:html_1 = BeautifulSoup(html, 'lxml')divs = html_1.select('.chart-container')divs[0]["style"] = "width:10%;height:10%;position:absolute;top:0;left:2%;"divs[1]["style"] = "width:40%;height:40%;position:absolute;top:12%;left:2%;"divs[2]["style"] = "width:35%;height:10%;position:absolute;top:1%;left:30%;"divs[3]["style"] = "width:40%;height:40%;position:absolute;top:10%;left:25%;"divs[4]["style"] = "width:40%;height:35%;position:absolute;top:12%;left:55%;"divs[5]["style"] = "width:30%;height:35%;position:absolute;top:60%;left:5%;"divs[6]["style"] = "width:60%;height:50%;position:absolute;top:50%;left:35%;"body = html_1.find("body")body["style"] = """background-image:url("./img/test.jpg")"""  # 背景图片html_new = str(html_1)html.seek(0, 0)html.truncate()html.write(html_new)html.close()
#备注:divs[0]["style"] = "width:10%;height:10%;position:absolute;top:0;left:2%;"即是我们对宽度、高度、位置、上边距、左边距的定义,这里我们用百分比以达到屏幕自适应的效果。
效果图如下:

至此,一个实时系统信息监控面板开发完毕。其他功能可自行拓展,本文仅演示创建的具体流程,其他细节可进一步优化,如具体到单个应用的监测与控制。

文中包含所有代码,快动手尝试一下吧。

点分享

点收藏

点点赞

点在看

利用Python搭建一个实时监控可视化大屏相关推荐

  1. 用Python实现一个实时运动的大挂钟效果

    今天小千来给大家分享一篇用Python实现一个实时运动的大挂钟效果,最终的效果如下图所示,喜欢的话看下去~~ 本项目用到的库主要有pygame.math.datetime等,另外还用到一些数学知识,勾 ...

  2. 阿里云大数据认证——使用DataV制作实时销售数据可视化大屏-课堂笔记

    原文链接:https://juejin.im/post/5c735004e51d45454b62dad5 阿里云Clouder认证 五.使用DataV制作实时销售数据可视化大屏 1. 课程目标 (1) ...

  3. 用 Python 制作酷炫的可视化大屏,特简单!

    作者 | 小F 来源 | 法纳斯特 在数据时代,我们每个人既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据杂乱无章.信息冗余.价值较低. 要想数据达到生动有趣.让人一目了然.豁然开朗的 ...

  4. 实际工作中,一个完整的可视化大屏项目有哪些步骤?

    这两年数据可视化大屏成为了各家公司的网红,老板动不动开口就要"酷炫大屏",大屏的应用场景确实很多,不仅能实时监控重点数据,提高决策效率,放在公司会议室,展台等地方,还能提升公司形象 ...

  5. 用Python制作酷炫的可视化大屏,特简单!

    在数据时代,我们每个人既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据杂乱无章.信息冗余.价值较低. 要想数据达到生动有趣.让人一目了然.豁然开朗的效果,就需要借助数据可视化. 以前给 ...

  6. 基于阿里云之大数据学习:使用DataV制作实时销售数据可视化大屏

    学习目标: 了解数据可视化应用场景 掌握阿里云DataV可视化工具 了解可视化大屏制作流程 使用DataV模板制作数据可视化大屏 一.数据可视化介绍 1.数据可视化: 是指将相对复杂的数据通过可视的. ...

  7. 超级强大,只需三步就能用 Python 做出酷炫的可视化大屏

    经常有朋友问我,想做可视化大屏,但是又嫌代码太长该怎么办? 今天我就来给大家介绍一款非常便利的可视化工具:big_screen,直接传入数据即可,有了它,小白也能做数据大屏.文末将完整代码附上,需要的 ...

  8. 数据可视化大屏案例 总目录

    1. 出入境边防检查站大数据可视化调研分析 2. 物流数字平台 3. 某集团概况 4. Elasticsearch运维监控大屏 5. 大数据计算服务运维 6. 电商实时状态 7. 全球业务态势 8. ...

  9. 大数据毕业设计可视化大屏前后端项目分享

    1.前言 很久没有分享过可视化大屏的项目了,距离上次分享基于Echarts的数据可视化大屏系统设计分享这篇可视化系统已经过去了整整一年有余.当时分享这篇博客没想到会收获这么多的阅读量,并且在刚发布的时 ...

最新文章

  1. PCLPCL/OpenNI tutorial 2: Cloud processing (basic)
  2. Windows下更改pip镜像源
  3. Hibernate性能提升
  4. 2021年上半年直播电商行业洞察
  5. hadoop深入学习之SequenceFile
  6. ASP.NET文件上传的三种基本方法
  7. 联想9439微型计算机拆机,e43a 拆解文章.docx
  8. Python使用Reportlab处理PDF数据 - 创建pdf库文件
  9. 搭建自己的KMS服务器
  10. RNA-seq数据分析
  11. chorme唤起Java开发的本地程序全采坑记
  12. cf 949A Zebras
  13. 为什么使用html5播放器电脑会卡顿,电脑看视频卡顿是什么原因_电脑播放视频卡顿的处理办法-系统城...
  14. html网页的框架标记分别有,新手入门前端,应该知道HTML框架排版标记标签大全...
  15. FRP + 腾讯云 内网穿透
  16. 笔记本屏幕变暗/调高亮度闪烁修复方法
  17. 【区块链108将】微数链林道坤:区块链有助于更好的发挥大数据价值
  18. 抖音跳转微信加好友功能实现解析
  19. 代理的理解(动态代理与静态代理)
  20. ulpfec,flexFec,Pro-MPEG cop3协议对比

热门文章

  1. 【信息系统项目管理师】第十一章 项目风险管理(考点汇总篇)
  2. 数据仓库在税务系统的应用现状
  3. 【蓝桥杯】Java开发A组省赛真题+详细解析
  4. 关于WORD的文字方向
  5. 【常用代码06】CSS自定义滚动条样式 overflow-y开启滚动条
  6. 阿法狗胜柯杰了:人工智能的时代来了么
  7. “区块链”究竟是什么?
  8. CSS基本样式之文字与文本样式(2)文字
  9. 计算机辅助化工制图,计算机辅助化工制图与设计.pdf
  10. SAP进阶-BCS(合并报表)