最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python系統(tǒng)公網(wǎng)私網(wǎng)流量監(jiān)控實(shí)現(xiàn)流程

 更新時(shí)間:2020年11月23日 10:48:14   作者:Rainbowhhy  
這篇文章主要介紹了Python系統(tǒng)公網(wǎng)私網(wǎng)流量監(jiān)控實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

目前很多公司業(yè)務(wù)已經(jīng)上云,使用了大量的云主機(jī)。當(dāng)前大多數(shù)云廠商的云主機(jī)公網(wǎng)都是采用的eip,也就是內(nèi)網(wǎng)和外網(wǎng)使用的同一張網(wǎng)卡,所以流量全部經(jīng)過的同一個(gè)網(wǎng)卡。然而這就面臨一個(gè)問題,如何將公網(wǎng)和私網(wǎng)的流量分開統(tǒng)計(jì)呢?特別是當(dāng)機(jī)器流量異常的時(shí)候,如何快速的判斷流量是來自公網(wǎng)還是私網(wǎng)。當(dāng)然云廠商一般也提供了eip的監(jiān)控,然而很多公司也有一套自己的監(jiān)控,對(duì)于自建監(jiān)控如何實(shí)現(xiàn),這就值得思考了。

本文將采用python實(shí)現(xiàn)云主機(jī)的公網(wǎng)和私網(wǎng)流量分開統(tǒng)計(jì),可以將結(jié)果輸入到自建監(jiān)控中,當(dāng)發(fā)生業(yè)務(wù)故障時(shí),可以快速定位問題。

1. iftop

iftop是linux系統(tǒng)下面一個(gè)監(jiān)控主機(jī)與外部通信的工具,它可以實(shí)時(shí)監(jiān)控本機(jī)與外部機(jī)器的流量大小,需要自行下載安裝包編譯安裝。iftop類似與linux系統(tǒng)自帶的top命令,在屏幕終端動(dòng)態(tài)輸出監(jiān)控結(jié)果。同時(shí),iftop支持很多參數(shù)可選項(xiàng),其中-t 參數(shù)使用不帶ncurses的文本界面,可以實(shí)現(xiàn)將結(jié)果保存到文件。

2. os.popen函數(shù)

os是python的系統(tǒng)模塊,os.popen可以調(diào)用系統(tǒng)的shell命令,相當(dāng)于直接在shell終端執(zhí)行shell命令。

3. 實(shí)現(xiàn)思路

使用python的os.open來調(diào)用iftop命令獲取到和主機(jī)通信的所有ip的流量大小。然后分別分析公網(wǎng)和私網(wǎng)的流量,將各自的流量之和統(tǒng)計(jì)起來,從而實(shí)現(xiàn)分別監(jiān)控系統(tǒng)的公網(wǎng)和私網(wǎng)流量。

4. 代碼實(shí)現(xiàn)

# -*- coding:utf-8 -*-
"""
@Author: Rainbowhhy
@Date: 2020-11-14 15:16:18
"""

import os, re

def is_public_ip(ip):
  # 判斷ip是公網(wǎng)還是私網(wǎng)
  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):
  # 統(tǒng)一轉(zhuǎn)換成bit后計(jì)算
  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():
  # 調(diào)用iftop命名獲取公網(wǎng)和私網(wǎng)流量
  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)

    # 計(jì)算公網(wǎng)和私網(wǎng)的總流量
    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("公網(wǎng)入向:%s" % public_traffic_recv)
  print("公網(wǎng)出向:%s" % public_traffic_send)
  print("私網(wǎng)入向:%s" % private_traffic_recv)
  print("私網(wǎng)出向:%s" % private_traffic_send)

5. 輸出結(jié)果截圖

如下圖是輸出結(jié)果展示

file:///home/rainbowhhy/%E6%A1%8C%E9%9D%A2/monitor.png

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python真題案例之二分法查找詳解

    Python真題案例之二分法查找詳解

    這篇文章主要介紹了python實(shí)操案例練習(xí),本文給大家分享的案例中主要講解了二分法查找,需要的小伙伴可以參考一下
    2022-03-03
  • 詳解Python?AdaBoost算法的實(shí)現(xiàn)

    詳解Python?AdaBoost算法的實(shí)現(xiàn)

    Boosting是機(jī)器學(xué)習(xí)的三大框架之一。Boost也被稱為增強(qiáng)學(xué)習(xí)或提升法,其中典型的代表算法是AdaBoost算法。本文介紹了AdaBoost算法及python實(shí)現(xiàn),感興趣的可以學(xué)習(xí)一下
    2022-10-10
  • django實(shí)現(xiàn)類似觸發(fā)器的功能

    django實(shí)現(xiàn)類似觸發(fā)器的功能

    今天小編就為大家分享一篇django實(shí)現(xiàn)類似觸發(fā)器的功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python多線程如何獲取有序結(jié)果

    python多線程如何獲取有序結(jié)果

    在Python中,多線程編程是一個(gè)常見需求,尤其是在處理I/O密集型任務(wù)時(shí),然而,多線程環(huán)境下保持任務(wù)執(zhí)行結(jié)果的順序通常較為復(fù)雜,為了解決這一問題,可以通過封裝一個(gè)功能來確保即使在多線程環(huán)境下,任務(wù)的執(zhí)行結(jié)果也能按照一定的順序進(jìn)行收集和處理
    2024-09-09
  • 使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例

    使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例

    這篇文章主要介紹了使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例,本文先是講解了什么是守護(hù)進(jìn)程,然后給出了一個(gè)Python語言的簡(jiǎn)單實(shí)現(xiàn),需要的朋友可以參考下
    2015-02-02
  • scrapy利用selenium爬取豆瓣閱讀的全步驟

    scrapy利用selenium爬取豆瓣閱讀的全步驟

    這篇文章主要給大家介紹了關(guān)于scrapy利用selenium爬取豆瓣閱讀的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python/MySQL實(shí)現(xiàn)Excel文件自動(dòng)處理數(shù)據(jù)功能

    Python/MySQL實(shí)現(xiàn)Excel文件自動(dòng)處理數(shù)據(jù)功能

    在沒有服務(wù)器存儲(chǔ)數(shù)據(jù),只有excel文件的情況下,如何利用SQL和python實(shí)現(xiàn)數(shù)據(jù)分析和數(shù)據(jù)自動(dòng)處理的功能?本文就來和大家聊聊解決辦法
    2023-02-02
  • sklearn+python:線性回歸案例

    sklearn+python:線性回歸案例

    今天小編就為大家分享一篇sklearn+python:線性回歸案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python中的變量與內(nèi)存用法

    python中的變量與內(nèi)存用法

    這篇文章主要介紹了python變量與內(nèi)存用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python用pip install時(shí)安裝失敗的一系列問題及解決方法

    python用pip install時(shí)安裝失敗的一系列問題及解決方法

    這篇文章主要介紹了python用pip install時(shí)安裝失敗的一系列問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

林州市| 镇江市| 长寿区| 琼中| SHOW| 临漳县| 无为县| 资讯 | 承德市| 伊川县| 南川市| 顺义区| 泰来县| 太保市| 南投县| 沭阳县| 靖江市| 牟定县| 广河县| 九寨沟县| 内乡县| 盘山县| 蒙山县| 辽宁省| 和平县| 苏尼特右旗| 固始县| 大埔区| 尤溪县| 盐亭县| 吉木乃县| 年辖:市辖区| 大关县| 唐山市| 任丘市| 南涧| 玛多县| 青龙| 平安县| 民县| 瑞金市|