使用python搭建一个Linux服务器监控系统

简介: 使用python搭建一个Linux服务器监控系统

使用python搭建服务器的监控系统,先来说一下主要逻辑:

1、定时获取server(主机)的一些内存,CPU的信息

2、将获取的信息存储到数据库

3、读数据库,获取信息,将服务器的内存,CPU信息制作成图


首先我们来谈谈需要使用的东西:

mysql数据库一台

python3代码环境

pymysql

psutil

pyecharts


首先需要将mysql的环境搭建好,具体就不多说了,为server准备一个python环境,然后安装三个python包

使用pip进行安装:

pip install pymysql
pip install psutil
pip install pyecharts

安装好了我们就可以来获取服务器的一些内存,CPU的信息了。


我们主要使用psutil模块去获取服务器的一些实时的CPU和内存信息。

import psutil
mem = psutil.virtual_memory()
memtotal = mem.total
memfree = mem.free
mempercent = mem.percent
memused = mem.used


可以直接获取内存相关的一些信息,例如内存总量,使用了多少,空余多少等等。

还可以获取cpu的信息

cpu = psutil.cpu_percent(1)

我们可以将获取到到这些信息存到文件里或者是数据库里,这里我们方便读取制图我们就使用数据库进行存储。

首先🔗数据库,我们这边需要创建一个CPU数据,再创建一个stat表,表里有一下午字段:


640.png

可以直接使用建表语句:

create table stat(mem_free varchar(255),mem_usage varchar(255), mem_total varchar(255), mempercent varchar(255), cpu varchar(255),        time varchar(255) );


下面我们用python连接数据库:

import pymysql
db = pymysql.connect(user="root", passwd="root", db="CPU", host="127.0.0.1")
db.autocommit(True)
cur = db.cursor()


之后读取服务器的一些信息:

def getinfo():
    mem = psutil.virtual_memory()
    memtotal = mem.total
    memfree = mem.free
    mempercent = mem.percent
    memused = mem.used
    cpu = psutil.cpu_percent(1)
    return memtotal, memfree, memused, mempercent, cpu



然后每隔十秒获取一次服务器的信息,之后将这些信息插入到数据库中:

while True:
    try:
        memtotal, memfree, memused, mempercent, cpu = getinfo()
        t = int(time.time())
        sql = 'insert into stat (mem_free,' \
              'mem_usage,' \
              'mem_total,' \
              'mempercent,' \
              'cpu,' \
              'time) value (%s,%s,%s,%s,%s,%s)' % (
        memfree, memused, memtotal, mempercent, cpu, t)
        cur.execute(sql)
        time.sleep(10)
    except Exception as e:
        print(e)


这样我们就做到了持续不断的想数据库写入服务器的数据了。


第一步就算完成了。



下面一步我们需要通过读取数据库的服务器信息,绘制图表:

首先获取数据目前获取到的所有信息(但是在实际情况下我们需要获取什么时间段的信息就写那个时间段的信息,这时候就需要在sql语句中添加where条件了)。

db = pymysql.connect(user="root", passwd="root", db="test", host="127.0.0.1")
cur = db.cursor()
sql = 'select cpu from stat'
cur.execute(sql)
cpu_data = cur.fetchall()


我们画图的时候数据都是拼在一个list中,这时候我们就需要将CPU的数据做到list里面:

all_cpu = []
for cpu in cpu_data:
    cpu_num = eval(cpu[0])
    all_cpu.append(cpu_num)
print(all_cpu)

下面我们就可以使用pyecharts画图了:

首先定义横坐标的长度是要和CPU数据的量保持一致的,这个时候我们可以来写横坐标了:

x = [i for i in range(len(all_cpu))]

数据内容也有了,坐标也有了,下面我们来做图:


from pyecharts.charts import Line
line = (
    Line()
    .add_xaxis(x)
    .add_yaxis("CPUinfo", all_cpu)
    .set_global_opts(title_opts=opts.TitleOpts(title="CPUinfo"))
)

line.render()

这样就OK了!

运行一下代码来看看结果:


640.jpg

当然图还是可以优化的哈,我们可以将很坐标优化成时间的值,到数据库中获取,然后将他们于横坐标对应上,也是OK的。

当然,除了使用pyecharts画图,我们还有个神器大家别忘了呀:matplotlib

from matplotlib import pyplot as plt
............................................
plt.plot(all_cpu)
plt.show()


640.jpg


喜欢用哪个就看你们自己啦,小编更喜欢第一种。


下面再看看内存的使用量:

640.jpg

640.png



其实从这个图看了,matplotlib展示的效果会好一点,pyecharts的数据都粘到一起了,看不清楚(当然,这个肯定是可以优化的哦,大家可以去GitHub上找方法哟!https://github.com/pyecharts


想试试手的可以动起来了哦!

完整代码如下:

import psutil
import time
import pymysql
db = pymysql.connect(user="root", passwd="root", db="test", host="127.0.0.1")
db.autocommit(True)
cur = db.cursor()
def getinfo():
    mem = psutil.virtual_memory()
    memtotal = mem.total
    memfree = mem.free
    mempercent = mem.percent
    memused = mem.used
    cpu = psutil.cpu_percent(1)
    return memtotal, memfree, memused, mempercent, cpu
if __name__ == "__main__":
    while True:
        try:
            memtotal, memfree, memused, mempercent, cpu = getinfo()
            t = int(time.time())
            sql = 'insert into stat (mem_free,' \
                  'mem_usage,' \
                  'mem_total,' \
                  'mempercent,' \
                  'cpu,' \
                  'time) value (%s,%s,%s,%s,%s,%s)' % (
            memfree, memused, memtotal, mempercent, cpu, t)
            cur.execute(sql)
            time.sleep(10)
        except Exception as e:
            print(e)


from matplotlib import pyplot as plt
import pymysql
from pyecharts.charts import Line
from pyecharts import options as opts
db = pymysql.connect(user="root", passwd="root", db="test", host="127.0.0.1")
cur = db.cursor()
sql = 'select cpu from stat'
cur.execute(sql)
cpu_data = cur.fetchall()
all_cpu = []
for cpu in cpu_data:
    cpu_num = eval(cpu[0])
    all_cpu.append(cpu_num)
print(all_cpu)
# 使用pyecharts画图
x = [i for i in range(len(all_cpu))]
line = (
    Line()
    .add_xaxis(x)
    .add_yaxis("CPUinfo", all_cpu)
    .set_global_opts(title_opts=opts.TitleOpts(title="CPUinfo"))
)
line.render()
db.close()



大家也可以点击阅读原文,直获取代码。

相关文章
|
1月前
|
机器学习/深度学习 数据可视化 搜索推荐
基于python的汽车数据可视化、推荐及预测系统
本研究围绕汽车数据可视化、推荐及预测系统展开,结合大数据与人工智能技术,旨在提升用户体验与市场竞争力。内容涵盖研究背景、意义、相关技术如 Python、ECharts、协同过滤及随机森林回归等,探讨如何挖掘汽车数据价值,实现个性化推荐与智能预测,为汽车行业智能化发展提供支持。
|
1月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
146 3
Linux系统禁用swap
|
1月前
|
存储 安全 数据管理
基于python的在线考试系统
本系统基于Python开发,旨在通过信息化手段提升各行业数据管理效率。系统具备良好的安全性、稳定性及可扩展性,支持数据高效处理与决策支持,适用于教育、医疗、旅游等多个领域,助力办公自动化与科学化管理,显著提升工作效率并降低错误率。
|
1月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
193 3
|
1月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
145 18
|
存储 Ubuntu Linux
HPE SPP 2025.09.00.00 - HPE 服务器固件、驱动程序和系统软件包 (Released Oct 2025)
HPE SPP 2025.09.00.00 - HPE 服务器固件、驱动程序和系统软件包
47 0
|
1月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
148 15
|
1月前
|
数据采集 数据可视化 关系型数据库
基于python大数据的电影数据可视化分析系统
电影分析与可视化平台顺应电影产业数字化趋势,整合大数据处理、人工智能与Web技术,实现电影数据的采集、分析与可视化展示。平台支持票房、评分、观众行为等多维度分析,助力行业洞察与决策,同时提供互动界面,增强观众对电影文化的理解。技术上依托Python、MySQL、Flask、HTML等构建,融合数据采集与AI分析,提升电影行业的数据应用能力。
|
1月前
|
数据采集 数据可视化 安全
基于python大数据的天气可视化分析预测系统
本研究探讨基于Python的天气预报数据可视化系统,旨在提升天气数据获取、分析与展示的效率与准确性。通过网络爬虫技术快速抓取实时天气数据,并运用数据可视化技术直观呈现天气变化趋势,为公众出行、农业生产及灾害预警提供科学支持,具有重要的现实意义与应用价值。
|
1月前
|
存储 机器学习/深度学习 关系型数据库
基于python的个人财务记账系统
本研究探讨了基于Python的个人财务记账系统的设计与实现。随着经济快速发展,个人财务管理日益重要,传统手工记账方式效率低且易出错,而现有商业软件功能复杂、缺乏个性化。Python凭借其简洁语法和强大库支持,适用于开发高效、易用的记账系统。系统结合Pyecharts实现数据可视化,利用MySQL进行数据存储,具备自动分类、统计分析、财务报表生成等功能,帮助用户清晰掌握财务状况,合理规划收支,提升财务管理效率。研究具有重要的现实意义和应用前景。

热门文章

最新文章