专栏首页Python乱炖使用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表,表里有一下午字段:

可以直接使用建表语句:

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了!

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

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

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

from matplotlib import pyplot as plt

............................................

plt.plot(all_cpu)
plt.show()

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

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

其实从这个图看了,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()

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

本文分享自微信公众号 - Python乱炖(Cooking_python),作者:我被狗咬了

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据分析高级教程(三)

    oozie job -D inpath=/weblog/input -D outpath=/weblog/outpre-config weblog/job.pr...

    我被狗咬了
  • Python表达式内赋值

    消息来源为PEP 572,该PEP已经被讨论通过,最终发布时细节可能会有改动,但是一定会发布。该提案网址:https://www.python.org/dev/...

    我被狗咬了
  • 教你如何教女朋友学Python?

    我被狗咬了
  • linux 查看 CPU 使用率

    以上转自:https://blog.csdn.net/Alicia_N/article/details/87604709 -----------------...

    微风-- 轻许--
  • [694]linux查看CPU使用率

    参考:https://blog.csdn.net/Alicia_N/article/details/87604709 https://blog.csdn.ne...

    周小董
  • 压测 -- cpu 各项指标

    压测过程中很重要的一点是观察cpu的各项指标,比如说cpu idel、user、cpu.load等,这些指标也间接反映了一个系统的抗压能力(容量)。 在lin...

    邹志全
  • 总结 | 杉数科技高季尧:定制优化算法——为复杂商业问题「量体裁衣」

    雷锋网 AI 研习社按:现代社会环境下,优化思想已经应用到商业、生产、乃至生活的方方面面,在本次公开课中,讲者结合生活场景普及运筹优化的思想,并借助优化问题和具...

    AI科技评论
  • DotNet加密方式解析--散列加密

       没时间扯淡了,赶紧上车吧。    在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全、支付宝和微信账户安全、以及邮箱等等,说到信息安...

    彭泽0902
  • 数据中心I/O连接器五大关键考虑

    当今通过云将数据访问外包同时持续支持带宽密集型应用(如视频)的趋势,使数据中心的重要性不断上升。 数据中心的管理人员尽可能提高数据中心架构性能的要求,已经深入到...

    企鹅号小编
  • 解读国内 6 家主流 CRM 产品:NPS 值提升、减少 IT 资源消耗、增强系统兼容成为改进方向|T 客研报

    作者:T客汇 张宇婷 关键词:CRM、SCRM 网址:www.tikehui.com ? 如果将市场上纷繁复杂的 CRM 应用分类,可以清晰的分出四大类: 1...

    人称T客

扫码关注云+社区

领取腾讯云代金券