圆月山庄资源网 Design By www.vgjia.com
目前很多公司业务已经上云,使用了大量的云主机。当前大多数云厂商的云主机公网都是采用的eip,也就是内网和外网使用的同一张网卡,所以流量全部经过的同一个网卡。然而这就面临一个问题,如何将公网和私网的流量分开统计呢?特别是当机器流量异常的时候,如何快速的判断流量是来自公网还是私网。当然云厂商一般也提供了eip的监控,然而很多公司也有一套自己的监控,对于自建监控如何实现,这就值得思考了。
本文将采用python实现云主机的公网和私网流量分开统计,可以将结果输入到自建监控中,当发生业务故障时,可以快速定位问题。
1. iftop
iftop是linux系统下面一个监控主机与外部通信的工具,它可以实时监控本机与外部机器的流量大小,需要自行下载安装包编译安装。iftop类似与linux系统自带的top命令,在屏幕终端动态输出监控结果。同时,iftop支持很多参数可选项,其中-t 参数使用不带ncurses的文本界面,可以实现将结果保存到文件。
2. os.popen函数
os是python的系统模块,os.popen可以调用系统的shell命令,相当于直接在shell终端执行shell命令。
3. 实现思路
使用python的os.open来调用iftop命令获取到和主机通信的所有ip的流量大小。然后分别分析公网和私网的流量,将各自的流量之和统计起来,从而实现分别监控系统的公网和私网流量。
4. 代码实现
# -*- coding:utf-8 -*- """ @Author: Rainbowhhy @Date: 2020-11-14 15:16:18 """ import os, re def is_public_ip(ip): # 判断ip是公网还是私网 private = re.findall( r'^((192\.168)|(198\.18)|(198\.19)|(10\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d))|(172\.(1[6-9]|2[0-9]|3[0-1])))\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$', ip) if private: return 0 else: return 1 def convert_unit(unit): # 统一转换成bit后计算 if "Gb" in unit: flow = float(unit.strip("Gb")) * 1024 * 1024 * 1024 elif "Mb" in unit: flow = float(unit.strip("Mb")) * 1024 * 1024 elif "Kb" in unit: flow = float(unit.strip("Kb")) * 1024 else: flow = float(unit.strip("b")) return flow def get_traffic(): # 调用iftop命名获取公网和私网流量 iftop_info = os.popen("iftop -t -N -n -s 4 2>/dev/null | grep -A 1 -E '^ [0-9]'").read() iftop_list = iftop_info.split("\n") count = len(iftop_list) - 1 public_traffic_send = 0 public_traffic_recv = 0 private_traffic_send = 0 private_traffic_recv = 0 public_ips = [] private_ips = [] for i in range(int(count / 2)): # 获取出向流量信息 traffic_send = iftop_list[i * 2] traffic_send_lists = traffic_send.split(" ") while "" in traffic_send_lists: traffic_send_lists.remove("") traffic_send = traffic_send_lists[3] traffic_send_float = convert_unit(traffic_send) # 获取入向流量信息 traffic_recv = iftop_list[i * 2 + 1] traffic_recv_lists = traffic_recv.split(" ") while "" in traffic_recv_lists: traffic_recv_lists.remove("") ip = traffic_recv_lists[0] traffic_recv = traffic_recv_lists[2] traffic_recv_float = convert_unit(traffic_recv) # 计算公网和私网的总流量 if is_public_ip(ip): public_ips.append(ip) public_traffic_send += traffic_send_float public_traffic_recv += traffic_recv_float else: private_ips.append(ip) private_traffic_send += traffic_send_float private_traffic_recv += traffic_recv_float return public_traffic_send, public_traffic_recv, private_traffic_send, private_traffic_recv if __name__ == '__main__': public_traffic_send, public_traffic_recv, private_traffic_send, private_traffic_recv = get_traffic() print("公网入向:%s" % public_traffic_recv) print("公网出向:%s" % public_traffic_send) print("私网入向:%s" % private_traffic_recv) print("私网出向:%s" % private_traffic_send)
5. 输出结果截图
如下图是输出结果展示
file:///home/rainbowhhy/%E6%A1%8C%E9%9D%A2/monitor.png
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
更新日志
2024年11月01日
2024年11月01日
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章