学习python自动化运维的第七天

学习python自动化运维的第七天

经过之前一段时间的折腾,终于可以继续向下学习了,不过不是使用的前面的界面可视化第三方库,使用的是pycharts(数据可视化)。
接下来就是代码过程了,这个主要分为两个部分,数据收集,和数据可视化。
第一步,数据收集,我个人收集的是流量数据每秒的上传和下载速度。
通过对网卡的实时数据进行收集,获取一定量的数据(500条)。如果要做到实时监测,需要将for循环改为while循环。
代码如下:

"""第一步,获取流量数据,psutil()模块的运用"""
import psutil
import time
# key_info = psutil.net_io_counters(pernic=True).keys()  # 获取网卡名称
# print(key_info)
def get_key():
    recv = {}
    sent = {}
    key = "以太网 3"  # 这个名字是从上面个的key_info中得到,连接互联网的网卡,有数据。
    recv.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_recv)  # 输入流量
    sent.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_sent)  # 输出流量
    return key, recv, sent
def get_rate(func):
    key, old_recv, old_sent = func() # 对返回的数据拆包
    time.sleep(1)
    key, now_recv, now_sent = func()
    net_in = {}
    net_out = {}
    net_in.setdefault(key, (now_recv.get(key) - old_recv.get(key)) / 1024)   # 获得一秒内的输入流量变化
    net_out.setdefault(key, (now_sent.get(key) - old_sent.get(key)) / 1024)  # 获得一秒内的输出流量变化
    return key, net_in, net_out
for i in range(500):  # 获取500条数据
    key, net_in, net_out = get_rate(get_key) # 将get_key函数作为参数传递给get_rate函数,并将返回的结果拆包
    with open("流量.txt","a+",encoding='utf-8') as f:  # 文件写入
        f.write('%s\nInput:\t %-5sKB/s\nOutput:\t %-5sKB/s\n' % (key, net_in.get(key), net_out.get(key)))
    print('%s\nInput:\t %-5sKB/s\nOutput:\t %-5sKB/s\n' % (key, net_in.get(key), net_out.get(key)))

代码的总体框架是在网上抄的,做了适当的修改,以及添加了一些自己的理解,以上部分也是网卡流量实时监控的一种方式。有需要的朋友也可以借鉴一下。

获得以上数据,就可以进行第二步了,今天学习的是数据的静态分析。后面有没有动态分析的我也不知道,希望有相关的内容分享吧。

第二步,对数据进行可视化,其实可视化我个人的理解就是做成相关的图表,使得数据看起来更加的直观。
具体代码如下:

"""第二步,将获得的流量数据进行了数据可视化,pyecharts()模块的运用对数据进行可视化,最终以网页的形式展示"""
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.options.global_options import ThemeType
l_input = []
l_output = []
with open("流量.txt","r",encoding="utf-8") as f:  # 读取流量数据
    a = f.readlines()
    for i in range(len(a)):
        if "以太网 3" in a[i]:
            l_input.append(a[i+1].split("\t")[1].split("KB")[0])
            l_output.append(a[i+2].split("\t")[1].split("KB")[0])
line=(    # 链式调用
    Line(
    init_opts=opts.InitOpts(   # 对网页进行设置
        bg_color='rgba(255,250,205,0.2)',  # 设置背景颜色
        width='1500x',  # 设置图表宽度
        height='400px',  # 设置高度
        page_title='网卡输入输出流量统计',   # 设置网页标题
        theme=ThemeType.MACARONS
        ))
    .set_global_opts(      # 图表全局通用设置
        title_opts=opts.TitleOpts(title="网卡输入输出流量统计"),   # 设置图表标题
        tooltip_opts=opts.TooltipOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(   # 设置X轴
            name="时间(s)",    # 设置X坐标轴名称
            type_="category"),  # 设置X轴坐标轴数据类型
        yaxis_opts=opts.AxisOpts(   # 设置Y轴
            name="流量(KB/s)",
            type_="value",
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True)))
    .add_xaxis(xaxis_data=[i+1 for i in range(len(l_input))])  # 设置X轴的刻度名称
    .add_yaxis(   # 设置第一条折线
        series_name="输入流量",  #这条折线的名称
        y_axis=l_input,  # 数据值
        symbol="emptyCircle",
        is_symbol_show=True,  # 设置断点连接
        # is_smooth=True,  # 设置平滑连接
        label_opts=opts.LabelOpts(is_show=False)  # 设置是否标记数值 当前状态为不标记,为True则标注
        )
    .add_yaxis(    # 设置第二条折线
        series_name="输出流量",
        y_axis=l_output,
        symbol="emptyCircle",
        is_symbol_show=True,
        # is_smooth=True,
        label_opts=opts.LabelOpts(is_show=False)
        )
    )
line.render()
# # 不习惯链式调用的开发者依旧可以单独调用方法,下面是简单的举例
# bar = Line()
# bar.add_xaxis([i+1 for i in range(len(l_output))])
# bar.add_yaxis("Output", l_output)
# bar.set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
# bar.render()

以上代码运行完成后,会在通目录下生成一个render.html文件,通过浏览器打开即可看到相关的图表。
这里使用的是折线图。效果如下:
输入输出流量
在这里插入图片描述
输出流量
在这里插入图片描述
输入流量
在这里插入图片描述
总的代码如下,中间使用空格分开,需要的小伙伴需要先运行上面的代码,再运行下面的代码即可。或者同时解锁运行也没有太大的影响:

# coding: utf-8
"""学习python自动化运维的第七天"""

"""今天的学习主要分为两个步骤绘制流量图表"""

# """第一步,获取流量数据,psutil()模块的运用"""
# import psutil
# import time
# # key_info = psutil.net_io_counters(pernic=True).keys()  # 获取网卡名称
# # print(key_info)
# def get_key():
#     recv = {}
#     sent = {}
#     key = "以太网 3"  # 这个名字是从上面个的key_info中得到,
#     recv.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_recv)  # 输入流量
#     sent.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_sent)  # 输出流量
#     return key, recv, sent
# def get_rate(func):
#     key, old_recv, old_sent = func() # 对返回的数据拆包
#     time.sleep(1)
#     key, now_recv, now_sent = func()
#     net_in = {}
#     net_out = {}
#     net_in.setdefault(key, (now_recv.get(key) - old_recv.get(key)) / 1024)   # 获得一秒内的输入流量变化
#     net_out.setdefault(key, (now_sent.get(key) - old_sent.get(key)) / 1024)  # 获得一秒内的输出流量变化
#     return key, net_in, net_out
# for i in range(500):  # 获取500条数据
#     key, net_in, net_out = get_rate(get_key) # 将get_key函数作为参数传递给get_rate函数,并将返回的结果拆包
#     with open("./txt/流量.txt","a+",encoding='utf-8') as f:  # 文件写入
#         f.write('%s\nInput:\t %-5sKB/s\nOutput:\t %-5sKB/s\n' % (key, net_in.get(key), net_out.get(key)))
#     print('%s\nInput:\t %-5sKB/s\nOutput:\t %-5sKB/s\n' % (key, net_in.get(key), net_out.get(key)))

# """第二步,将获得的流量数据进行了数据可视化,pyecharts()模块的运用对数据进行可视化,最终以网页的形式展示"""
# import pyecharts.options as opts
# from pyecharts.charts import Line
# from pyecharts.options.global_options import ThemeType
# l_input = []
# l_output = []
# with open("./txt/流量.txt","r",encoding="utf-8") as f:  # 读取流量数据
#     a = f.readlines()
#     for i in range(len(a)):
#         if "以太网 3" in a[i]:
#             l_input.append(a[i+1].split("\t")[1].split("KB")[0])
#             l_output.append(a[i+2].split("\t")[1].split("KB")[0])
# line=(    # 链式调用
#     Line(
#     init_opts=opts.InitOpts(   # 对网页进行设置
#         bg_color='rgba(255,250,205,0.2)',  # 设置背景颜色
#         width='1500x',  # 设置图表宽度
#         height='400px',  # 设置高度
#         page_title='网卡输入输出流量统计',   # 设置网页标题
#         theme=ThemeType.MACARONS
#         ))
#     .set_global_opts(      # 图表全局通用设置
#         title_opts=opts.TitleOpts(title="网卡输入输出流量统计"),   # 设置图表标题
#         tooltip_opts=opts.TooltipOpts(is_show=False),
#         xaxis_opts=opts.AxisOpts(   # 设置X轴
#             name="时间(s)",    # 设置X坐标轴名称
#             type_="category"),  # 设置X轴坐标轴数据类型
#         yaxis_opts=opts.AxisOpts(   # 设置Y轴
#             name="流量(KB/s)",
#             type_="value",
#             axistick_opts=opts.AxisTickOpts(is_show=True),
#             splitline_opts=opts.SplitLineOpts(is_show=True)))
#     .add_xaxis(xaxis_data=[i+1 for i in range(len(l_input))])  # 设置X轴的刻度名称
#     .add_yaxis(   # 设置第一条折线
#         series_name="输入流量",  #这条折线的名称
#         y_axis=l_input,  # 数据值
#         symbol="emptyCircle",
#         is_symbol_show=True,  # 设置断点连接
#         # is_smooth=True,  # 设置平滑连接
#         label_opts=opts.LabelOpts(is_show=False)  # 设置是否标记数值 当前状态为不标记,为True则标注
#         )
#     .add_yaxis(    # 设置第二条折线
#         series_name="输出流量",
#         y_axis=l_output,
#         symbol="emptyCircle",
#         is_symbol_show=True,
#         # is_smooth=True,
#         label_opts=opts.LabelOpts(is_show=False)
#         )
#     )
# line.render()
# # # 不习惯链式调用的开发者依旧可以单独调用方法,下面是简单的举例
# # bar = Line()
# # bar.add_xaxis([i+1 for i in range(len(l_output))])
# # bar.add_yaxis("Output", l_output)
# # bar.set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
# # bar.render()

以上就是最近的学习内容了,还是想说,功夫不负有心人。只要肯坚持,就一定可以做到自己想要达到的效果。

注释:以上代码来自网络结合个人修改,外加一些个人理解。仅供个人学习使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值