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

python腳本調(diào)用iftop 統(tǒng)計(jì)業(yè)務(wù)應(yīng)用流量的思路詳解

 更新時間:2019年10月11日 09:40:07   作者:1066897515  
這篇文章主要介紹了python腳本調(diào)用iftop 統(tǒng)計(jì)業(yè)務(wù)應(yīng)用流量的思路詳解,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

因公司服務(wù)器上部署應(yīng)用較多,在有大并發(fā)訪問、業(yè)務(wù)邏輯有問題的情況下反復(fù)互相調(diào)用或者有異常流量訪問的時候,需要對業(yè)務(wù)應(yīng)用進(jìn)行故障定位,所以利用python調(diào)用iftop命令來獲取應(yīng)用進(jìn)程流量,結(jié)合zabbix,可幫助定位分析問題。,以下是腳本內(nèi)容,大概思路是:

  • 利用iftop命令 iftop -t -P -N -n -s 2 來獲取流量信息
  • 對獲取的流量信息進(jìn)行處理,單位換算,同一個應(yīng)用程序的所有鏈接流量進(jìn)行合計(jì)(因?yàn)橐粋€應(yīng)用會有很多鏈接,每一個鏈接都有流量,全部相加即可得出這個應(yīng)用的總流量)
#!/usr/bin/python
#coding=utf-8
#針對業(yè)務(wù)監(jiān)聽的端口流量進(jìn)行統(tǒng)計(jì),忽略對隨機(jī)端口流量統(tǒng)計(jì)
#若針對突然流量增大,找到其進(jìn)程進(jìn)行告警,可以不做統(tǒng)計(jì),獲取到流量進(jìn)行判斷,若大于多少閥值,則輸出
import os
def change_unit(unit):
 if "Mb" in unit:
  flow = float(unit.strip("Mb")) * 1024
  return flow
 elif "Kb" in unit:
  flow = float(unit.strip("Kb"))
  return flow
 elif "b" in unit:
  flow = float(unit.strip("b")) / 1024
  return flow
def get_flow():
 #iftop參數(shù):-t 使用不帶ncurses的文本界面,-P顯示主機(jī)以及端口信息,-N只顯示連接端口號,不顯示端口對應(yīng)的服務(wù)名稱,-n 將輸出的主機(jī)信息都通過IP顯示,不進(jìn)行DNS解析,-s num num秒后打印一次文本輸出然后退出
 mes = os.popen("iftop -t -P -N -n -s 2 2>/dev/null |grep -A 1 -E '^ [0-9]'").read()
 #以換行符進(jìn)行分割
 iftop_list = mes.split("\n")
 count = len(iftop_list)
 #定義字典 存放主機(jī)信息和進(jìn)出流量
 flow_dict = {}
 #定義列表,存放主機(jī)信息
 host_ips = []
# 把主機(jī)加入數(shù)組,新的主機(jī)查詢是否在列表里面,沒有的話,把主機(jī)信息加入host_ips,并新組裝一個字典值加入flow_dict字典,如果host_ips存在主機(jī)信息,則把字典值取出來,重新計(jì)算增加流量數(shù)值,再加入字典flow_dict
 #這里的 count/2 是iftop獲取到的數(shù)據(jù),是進(jìn)出流量為一組,則有count/2 個流量連接,可執(zhí)行os.popen 里面的iftop命令即可明白
 for i in range(count/2):
  flow_msg = ""
  #獲取發(fā)送的ip地址(本地ip地址),端口(本地端口),發(fā)送的流量,以換行符分割后,數(shù)據(jù)偶數(shù)位為本地發(fā)送流量信息
  location_li_s = iftop_list[i*2]
  send_flow_lists = location_li_s.split(" ")
  #去空元素
  while '' in send_flow_lists:
   send_flow_lists.remove('')
  host_ip = send_flow_lists[1]
  send_flow = send_flow_lists[3]
  send_flow_float = change_unit(send_flow)
  #print send_flow_lists
  #獲取接收的流量
  location_li_r = iftop_list[i*2+1]
  rec_flow_lists = location_li_r.split(" ")
  while '' in rec_flow_lists:
   rec_flow_lists.remove('')
  rec_flow = rec_flow_lists[3]
  rec_flow_float = change_unit(rec_flow) 
  #去掉本地linux 大于10000的隨機(jī)端口,因?yàn)楣緲I(yè)務(wù)應(yīng)用無大于10000,也可把這里去掉
  port = host_ip.split(":")[1]
  if int(port) < 10000:
  #主機(jī)信息若不存在列表則加入host_ips,若存在,則字典取值,對進(jìn)出流量進(jìn)行相加
   if host_ip not in host_ips:
     host_ips.append(host_ip)
     flow_msg = str(float('%2.f' % send_flow_float)) + ":" + str(float('%.2f' % rec_flow_float))
     flow_dict[host_ip]=flow_msg
   else:
    flow_dict_msg = flow_dict[host_ip]
    flow_dict_msg_li = flow_dict_msg.split(":")
    #獲取字典里的發(fā)送接收流量
    flow_dict_msg_send = float(flow_dict_msg_li[0])
    flow_dict_msg_rec = float(flow_dict_msg_li[1])
    #字典里面的發(fā)送接收流量和獲取到的新流量相加
    flow_add_send = flow_dict_msg_send + send_flow_float
    flow_add_rec = flow_dict_msg_rec + rec_flow_float
    #把新得出的結(jié)果,更新到字典
    flow_msg = str(float('%.2f' % flow_add_send)) + ":" + str(float('%.2f' % flow_add_rec))
    flow_dict[host_ip]=flow_msg
 for key in flow_dict:
  flow_li = flow_dict[key].split(":")
  #flow_li[0]為發(fā)送流量,flow_li[1]為接收流量,單位是Kb
  print key + "|" + flow_li[0] + "|" + flow_li[1]
get_flow()

總結(jié)

以上所述是小編給大家介紹的python腳本調(diào)用iftop 統(tǒng)計(jì)業(yè)務(wù)應(yīng)用流量的思路詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • 使用python遍歷指定城市的一周氣溫

    使用python遍歷指定城市的一周氣溫

    本文主要介紹了使用python遍歷指定城市的一周氣溫的實(shí)現(xiàn)方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • django rest framework serializers序列化實(shí)例

    django rest framework serializers序列化實(shí)例

    這篇文章主要介紹了django rest framework serializers序列化實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python如何使用Eel和HTML開發(fā)桌面應(yīng)用

    Python如何使用Eel和HTML開發(fā)桌面應(yīng)用

    這篇文章主要介紹了Python使用Eel和HTML開發(fā)桌面應(yīng)用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • keras實(shí)現(xiàn)多種分類網(wǎng)絡(luò)的方式

    keras實(shí)現(xiàn)多種分類網(wǎng)絡(luò)的方式

    這篇文章主要介紹了keras實(shí)現(xiàn)多種分類網(wǎng)絡(luò)的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Pytorch中view函數(shù)實(shí)例講解

    Pytorch中view函數(shù)實(shí)例講解

    這篇文章主要給大家介紹了關(guān)于Pytorch中view函數(shù)的相關(guān)資料,PyTorch中的.view()函數(shù)是一個用于改變張量形狀的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • 利用python打開攝像頭及顏色檢測方法

    利用python打開攝像頭及顏色檢測方法

    今天小編就為大家分享一篇利用python打開攝像頭及顏色檢測方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Python爬蟲庫BeautifulSoup的介紹與簡單使用實(shí)例

    Python爬蟲庫BeautifulSoup的介紹與簡單使用實(shí)例

    BeautifulSoup是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫,本文為大家介紹下Python爬蟲庫BeautifulSoup的介紹與簡單使用實(shí)例其中包括了,BeautifulSoup解析HTML,BeautifulSoup獲取內(nèi)容,BeautifulSoup節(jié)點(diǎn)操作,BeautifulSoup獲取CSS屬性等實(shí)例
    2020-01-01
  • Python實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)生成excel報(bào)表的方法示例

    Python實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)生成excel報(bào)表的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)生成excel報(bào)表的方法,結(jié)合完整實(shí)例形式分析了Python連接、查詢mysql數(shù)據(jù)庫并導(dǎo)出Excel報(bào)表的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • 利用Python校準(zhǔn)本地時間的方法教程

    利用Python校準(zhǔn)本地時間的方法教程

    這篇文章主要給大家介紹了關(guān)于如何利用Python校準(zhǔn)本地時間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python安裝與基本數(shù)據(jù)類型教程詳解

    Python安裝與基本數(shù)據(jù)類型教程詳解

    這篇文章主要介紹了Python安裝與基本數(shù)據(jù)類型教程詳細(xì)講解,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05

最新評論

绥棱县| 聂拉木县| 嘉峪关市| 武乡县| 建宁县| 潍坊市| 老河口市| 类乌齐县| 根河市| 江阴市| 信阳市| 德江县| 邓州市| 英德市| 道孚县| 武平县| 循化| 新疆| 昌都县| 招远市| 延边| 眉山市| 怀远县| 西安市| 修水县| 金山区| 丰都县| 香港 | 永康市| 麻阳| 临颍县| 柞水县| 贵定县| 福州市| 平果县| 三江| 泽州县| 进贤县| 揭阳市| 麦盖提县| 浏阳市|