欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ì),對大家的學(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)控,對于自建監(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

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

相關(guān)文章

  • Python 用matplotlib畫以時(shí)間日期為x軸的圖像

    Python 用matplotlib畫以時(shí)間日期為x軸的圖像

    這篇文章主要介紹了Python 用matplotlib畫以時(shí)間日期為x軸的圖像,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python實(shí)現(xiàn)雙進(jìn)程防止單點(diǎn)故障實(shí)例深度探究

    Python實(shí)現(xiàn)雙進(jìn)程防止單點(diǎn)故障實(shí)例深度探究

    在分布式系統(tǒng)中,確保系統(tǒng)的高可用性是至關(guān)重要的,本文將深入探討如何使用Python實(shí)現(xiàn)雙進(jìn)程自我保護(hù)機(jī)制,以應(yīng)對單點(diǎn)故障,確保系統(tǒng)穩(wěn)定運(yùn)行,將通過詳實(shí)的示例代碼,介紹雙進(jìn)程自我保護(hù)的原理、實(shí)現(xiàn)步驟以及可能遇到的挑戰(zhàn)
    2024-01-01
  • python輸出國際象棋棋盤的實(shí)例分享

    python輸出國際象棋棋盤的實(shí)例分享

    在本篇文章里小編給大家整理的是一篇關(guān)于python輸出國際象棋棋盤的實(shí)例詳解,有興趣的朋友們可以參考下。
    2020-11-11
  • Python 中單例模式的實(shí)現(xiàn)方法

    Python 中單例模式的實(shí)現(xiàn)方法

    這篇文章主要介紹了Python 中單例模式的實(shí)現(xiàn)方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下下面文章詳細(xì)內(nèi)容
    2022-08-08
  • 如何在Python對Excel進(jìn)行讀取

    如何在Python對Excel進(jìn)行讀取

    這篇文章主要介紹了如何在Python對Excel進(jìn)行讀取,文中講解非常詳細(xì),示例代碼幫助大家參考學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Python中else怎么用?else的用法總結(jié)

    Python中else怎么用?else的用法總結(jié)

    這篇文章主要介紹了Python中else的用法總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python爬蟲PyQuery庫基本用法入門教程

    Python爬蟲PyQuery庫基本用法入門教程

    這篇文章主要介紹了Python爬蟲PyQuery庫基本用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了pyQuery庫字符串初始化、打開網(wǎng)頁、css屬性、標(biāo)簽內(nèi)容等獲取、DOM基本操作等相關(guān)技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • Python 列表的基本操作介紹

    Python 列表的基本操作介紹

    這篇文章主要介紹了Python 列表的基本操作,下面文章圍繞Python 列表的相關(guān)資料展開文章的詳細(xì)內(nèi)容,,需要的朋友可以參考一下,希望對大家有所幫助
    2021-11-11
  • Python數(shù)據(jù)類型-序列sequence

    Python數(shù)據(jù)類型-序列sequence

    這篇文章主要介紹了Python數(shù)據(jù)類型-序列sequence,在前面,我們已經(jīng)對Python學(xué)習(xí)做了系統(tǒng)的知識梳理(Python思維導(dǎo)圖),我們接下來把知識點(diǎn)分節(jié)進(jìn)行細(xì)講。這一節(jié),我們講解序列,需要的朋友可以參考下
    2022-01-01
  • Python中的異常處理簡明介紹

    Python中的異常處理簡明介紹

    這篇文章主要介紹了Python中的異常處理簡明介紹,本文講解了try-except檢測異常、上下文管理器(with…as…語句)、raise引發(fā)異常、斷言等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評論