監控日誌統計IP次數

2022-09-17 15:06:15 字數 1522 閱讀 4535

1

#監控伺服器日誌,找出每分鐘訪問超過100次的ip位址。23

#1、每分鐘讀取一次檔案,獲取檔案內容4#

2、從檔案內容裡面找到ip位址5#

3、判斷每個ip出現的次數,如果超過100次,就找出來

6import

time

7 point=0

8while

true:

9 ips={} #

定義字典,用於存放ip和次數

10 f=open("

access.log

",encoding="

utf-8")

11 f.seek(point) #

指標移動到上次統計的位置

12for i in f: #

通過for來逐行讀取檔案的內容

13if i.strip()!='': #

判斷是否是空行

14 ip=i.split()[0]

15if ip not

inips.keys():

16 ips.setdefault(ip,1)

17else

:18 ips[ip]+=1

19 point=f.tell() #

獲取當前檔案讀的位置

20for k,v in ips.items(): #

遍歷字典中所有的ip,並輸出次數大於100次的ip

21if v>100:

22print("

%s超過100次

"%k)

23 f.close() #

關閉檔案

24 time.sleep(60)

備註:1、為什麼用字典不用list存放ip進行統計

答:如果用list每個ip存入陣列,當ip較多,陣列就會特別大,佔內容,且遍歷性能較弱,用字典每個ip 對應乙個次數,節省記憶體,遍歷性能較高

2、除了監控日誌,還可以通過該段**進行做其他的統計工作,比如乙個檔案中某個人物出現次數等

3、檔案讀取用for i in f 的方式,這樣每次讀取一行,佔記憶體較小,如果用readlines,是每次把檔案所有內容取出,這樣較佔記憶體

1 dic= #

人物初始值

2 with open("

sanguo.txt

",encoding="

utf-8

") as f: #

with這種方式不需關閉檔案

3for i in f: #

逐行遍歷檔案

4for k in dic.keys(): #

遍歷字典人物

5 num=i.count(k) #

統計當前行人物個數

6 dic[k]+=num #

更新人物個數值

7print(dic) #

輸出字典

Python統計日誌中每個IP出現次數

介紹了python統計日誌中每個ip出現次數的方法,例項分析了python基於正規表示式解析日誌檔案的相關技巧,需要的朋友可以參考下 本指令碼可用於多種日誌型別 coding utf 8 import re,time defmail log file path global count log op...

Linux中awk統計ip訪問次數

現在有乙個檔案,資料量大概在200多萬條記錄,想用shell的awk做統計,檔案的格式如下 關鍵字 url ip位址 test 123 1 test 123 1 test 123 2 test2 12 1 test2 123 1 test2 123 2 現在想要統計的結果是 檢視同乙個關鍵字和url...

Nginx 日誌檔案 訪問IP統計

nginx訪問日誌檔案內容如下 python requests 2.4.3 cpython 2.7.9 linux 3.16.0 4 amd64 如何通過命令列統計和排列訪問日誌裡的ip數 linux sort,uniq,cut,wc命令詳解 python 1表示以空格為分割符的第乙個匹配項,也就是...