導航:首頁 > 編程語言 > python日誌計算qps

python日誌計算qps

發布時間:2022-10-18 01:50:08

❶ 如何將python的網頁並發請求提高到50 qps

gevent + pypy不就好了……

該問題實際上比較困難, 牽扯到Linux內核機制。

❷ 如何用 python 分析網站日誌

日誌的記錄

Python有一個logging模塊,可以用來產生日誌。
(1)學習資料
http://blog.sina.com.cn/s/blog_4b5039210100f1wv.html

http://blog.donews.com/limodou/archive/2005/02/16/278699.aspx
http://kenby.iteye.com/blog/1162698
http://blog.csdn.NET/fxjtoday/article/details/6307285
前邊幾篇文章僅僅是其它人的簡單學習經驗,下邊這個鏈接中的內容比較全面。

http://www.red-dove.com/logging/index.html

(2)我需要關注內容
日誌信息輸出級別
logging模塊提供了多種日誌級別,如:NOTSET(0),DEBUG(10),
INFO(20),WARNING(30),WARNING(40),CRITICAL(50)。
設置方法:
logger = getLogger()
logger.serLevel(logging.DEBUG)

日誌數據格式
使用Formatter設置日誌的輸出格式。
設置方法:
logger = getLogger()
handler = loggingFileHandler(XXX)
formatter = logging.Formatter("%(asctime)s %(levelname) %(message)s","%Y-%m-%d,%H:%M:%S")

%(asctime)s表示記錄日誌寫入時間,"%Y-%m-%d,%H:%M:%S「設定了時間的具體寫入格式。
%(levelname)s表示記錄日誌的級別。
%(message)s表示記錄日誌的具體內容。

日誌對象初始化
def initLog():
logger = logging.getLogger()
handler = logging.FileHandler("日誌保存路徑")
formatter = logging.Formatter("%(asctime)s %(levelname) %(message)s","%Y-%m-%d,%H:%M:%S")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel

寫日誌
logging.getLogger().info(), logging.getLogger().debug()......

2. 日誌的分析。
(1)我的日誌的內容。(log.txt)
2011-12-12,12:11:31 INFO Client1: 4356175.0 1.32366309133e+12 1.32366309134e+12
2011-12-12,12:11:33 INFO Client1: 4361320.0 1.32366309334e+12 1.32366309336e+12
2011-12-12,12:11:33 INFO Client0: 4361320.0 1.32366309389e+12 1.32366309391e+12
2011-12-12,12:11:39 INFO Client1: 4366364.0 1.32366309934e+12 1.32366309936e+12
2011-12-12,12:11:39 INFO Client0: 4366364.0 1.32366309989e+12 1.32366309991e+12
2011-12-12,12:11:43 INFO Client1: 4371416.0 1.32366310334e+12 1.32366310336e+12
2011-12-12,12:11:43 INFO Client0: 4371416.0 1.32366310389e+12 1.32366310391e+12
2011-12-12,12:11:49 INFO Client1: 4376450.0 1.32366310934e+12 1.32366310936e+12
我需要將上述內容逐行讀出,並將三個時間戳提取出來,然後將其圖形化。

(2) 文件操作以及字元串的分析。
打開文件,讀取出一行日誌。
file = file("日誌路徑",「r」)
while True:
line = file.readline()
if len(len) == 0:
break;
print line
file.close()

從字元串中提取數據。
字元串操作學習資料:

http://reader.you.com/sharelite?itemId=-4646262544179865983&method=viewSharedItemThroughLink&sharedBy=-1137845767117085734
從上面展示出來的日誌內容可見,主要數據都是用空格分隔,所以需要使用字元串的
split函數對字元串進行分割:
paraList = line.split(),該函數默認的分割符是空格,返回值為一個list。
paraList[3], paraList[4], paraList[5]中分別以字元串形式存儲著我需要的時間戳。

使用float(paraList[3])將字元串轉化為浮點數。
(3)將日誌圖形化。
matplotlib是python的一個繪圖庫。我打算用它來將日誌圖形化。
matplotlib學習資料。
matplotlib的下載與安裝:
http://yexin218.iteye.com/blog/645894
http://blog.csdn.Net/sharkw/article/details/1924949

對matplotlib的宏觀介紹:
http://apps.hi..com/share/detail/21928578
對matplotlib具體使用的詳細介紹:

http://blog.sina.com.cn/s/blog_4b5039210100ie6a.html
在matplotlib中設置線條的顏色和形狀:
http://blog.csdn.net/kkxgx/article/details/python

如果想對matplotlib有一個全面的了解,就需要閱讀教程《Matplotlib for Python developers》,教程下載地址:
http://download.csdn.net/detail/nmgfrank/4006691

使用實例
import matplotlib.pyplot as plt

listX = [] #保存X軸數據
listY = [] #保存Y軸數據
listY1 = [] #保存Y軸數據

file = file("../log.txt","r")#打開日誌文件

while True:
line = file.readline()#讀取一行日誌
if len(line) == 0:#如果到達日誌末尾,退出
break
paraList = line.split()
print paraList[2]
print paraList[3]
print paraList[4]
print paraList[5]
if paraList[2] == "Client0:": #在坐標圖中添加兩個點,它們的X軸數值是相同的
listX.append(float(paraList[3]))
listY.append(float(paraList[5]) - float(paraList[3]))
listY1.append(float(paraList[4]) - float(paraList[3]))

file.close()

plt.plot(listX,listY,'bo-',listX,listY1,'ro')#畫圖
plt.title('tile')#設置所繪圖像的標題
plt.xlabel('time in sec')#設置x軸名稱
plt.ylabel('delays in ms'')#設置y軸名稱

plt.show()

❸ Python語言掃描日誌並統計

修復了一些小的拼寫錯誤
修復了出現無效數據行會出現錯誤的BUG
修復了最小值統計方法的錯誤

===================下面開始咯log.py========
# -*- coding: cp936 -*-
#上一句不可以刪!表示中文路徑是GBK編碼
importdatetime
#處理時間的模塊
defsparse(target='log.txt') :
tgfile = file(target,"r")
event={}
#event是一個字典,key是事件的編號,value是數據(可以利用嵌套來擴展數據)
linelog = "Not Empty"
whilelinelog:
linelog = tgfile.readline()
data = linelog.split('')
#按空格將一行數據分為列表
# printdata #testing
iflen(data) > 4 : #有效的數據行
time1 = data[2][1:] + '' + data[3][:-1]
#將時間處理為(字元串):年-月-日 小時:分鍾:秒
time2 = datetime.datetime.strptime(time1,'%Y-%m-%d %H:%M:%S')
#將時間識別為datetime類
if data[5] == "begin:" and data[6][:2] == "OK" :
#我不知道有沒有 requestbegin: fail 這個東西,沒有就把後半刪掉吧!
ifnotevent.has_key(data[0]) :
#第一次發生某id的事件時初始化數據
event[data[0]]=[[1,time2,0]]
#我設置的value是一個列表,每個元素是一次記錄,包括[是否沒結束,開始時間,結束時間]。
else :
event[data[0]].append([1,time2,0])
#已經有過記錄了就在記錄後加一條新記錄
ifdata[5] == "end:"anddata[6][:2] == "OK" :
#我想應該沒有不出現begin就直接end的事件吧……
event[data[0]][-1][0]=0 #最後一條記錄中寫入:事件已經結束
event[data[0]][-1][2]=time2 #最後一條記錄寫入:記錄結束時間
#如果還要處理其他的什麼情形在這里添加if的判斷
tgfile.close()
returnevent

defanalysis(target='log.txt') :
event = sparse(target)
#調用上面定於的sparse方法。其實簡單的處理用不著這么做的……單純為了擴展性
static = {}
#用於統計結果的字典(其key和event中的key相同)
foroneeventinevent :
#每個事件的記錄
static[oneevent]=[0,0,0,0,-1]
#初始化每個事件的統計:[成功發生次數,總發生次數,總發生時間,最大發生時間,最小發生時間]
foronerecordinevent[oneevent] :
#每個事件的一次記錄
static[oneevent][0] += 1 #總發生次數加一
if onerecord[0] == 0 : #成功事件
static[oneevent][1] += 1
time_delta = onerecord[2] - onerecord[1]
#計算結果是一個timedelta類型
inttimedelta = time_delta.days *24*60*60 + time_delta.seconds
#將時間差轉化為以秒計算的整數
if inttimedelta > static[oneevent][3] :
static[oneevent][3] = inttimedelta #統計最大值
if inttimedelta < static[oneevent][4] or static[oneevent][4] < 0 :
static[oneevent][4] = inttimedelta #統計最小值
static[oneevent][2] += inttimedelta
return static

===================下面是log.txt===========
#10.0.0.0[2007-06-1223:27:08]requestbegin:OK
#30.0.0.0[2007-06-1223:28:08]requestbegin:fail
#10.0.0.0[2007-06-1223:37:08]requestbegin:OK
#10.0.0.0[2007-06-1223:37:18]requestforadata:OK
#10.0.0.0[2007-06-1223:37:19]receivedsomedata:OK
#10.0.0.0[2007-06-1300:27:08]requestend:OK
#20.0.0.0[2007-06-1300:37:08]requestbegin:OK
#20.0.0.0[2007-06-1300:47:08]requestend:OK
systemERROR:reboot
Another Invalid Line

#10.0.0.0[2007-06-1323:28:18]requestbegin:OK
#70.0.0.0[2007-06-1323:29:08]requestbegin:OK
#70.0.0.0[2007-06-1323:30:18]requestend:OK
#40.0.0.0[2007-06-1323:33:08]requestbegin:OK
#40.0.0.0[2007-06-1323:35:23]requestend:OK
#40.0.0.0[2007-06-1323:37:08]requestbegin:OK
#40.0.0.0[2007-06-1323:43:38]requestend:OK
#50.0.0.0[2007-06-1323:47:08]requestbegin:OK
#10.0.0.0[2007-06-1323:57:48]requestbegin:OK
#50.0.0.0[2007-06-1323:59:08]requestend:OK

===================下面是使用和輸出========
importlog
output = log.analysis()
#或者直接log.analysis()

=============輸出============
{'#2': [1, 1, 600, 600, 600], '#1': [4, 1, 3000, 3000, 3000], '#7': [1, 1, 70, 70, 70], '#5': [1, 1, 720, 720, 720], '#4': [2, 2, 525, 390, 135]}

比如#1事件,總次數output['#1'][0]==4次
成功次output['#1'][1]==1次
失敗次output['#1'][0]-output['#1'][1]==3次
總時間output['#1'][2]==3000秒
平均時間output['#1'][2]/output['#1'][1]==3000/1==3000秒
最大時間output['#1'][3]==3000秒
最小時間output['#1'][4]==3000秒
共有len(output)==5種ID事件

❹ 如何用python,每隔5分鍾對實時日誌做統計處理

有下面幾種:
(1)內連接,pd.merge(a1, a2, on='key')
(2)左連接,pd.merge(a1, a2, on='key', how='left')
(3)右連接,pd.merge(a1, a2, on='key', how='right')
(4)外連接, pd.merge(a1, a2, on='key', how='outer')
至於四者的具體差別,具體學習參考sql中相應的語法。

❺ 如何用python寫監控日誌函數

defwrite_log(username,operation):
'''
寫日誌函數
:paramusername:用戶名
:paramoperation:用戶的操作信息
:return:
'''
w_time=time.strftime('%Y-%m-%d%H%M%S')
withopen('log.txt','a+')asfw:
log_content='%s%s%s '%(w_time,username,operation)
fw.write(log_content)

希望對你有幫助!

❻ 日誌文件太大,python怎麼分割文件,多線程操作

python的多線程為偽多線程,多線程並不能提高文件IO的速度,在讀取文件時使用直接讀取 for line in open('文件名', 'r') 效率最高,因為此方式為直接讀取,不像其它方式要把文件全部載入到內存再讀取,所以效率最高。分割時文件時,提前計算好行數,把讀取的每固定數量的行數存入新文件,直接讀取完成,最後刪除舊文件,即可實現文件分割。

示意代碼:

line_count=0
index=0
fw=open('part'+str(index)+'.log','w')
forlineinopen('filename.log','r'):
fw.write(line)
line_count+=1
#假設每10000行寫一個文件
ifline_count>10000:
fw.close()
index+=1
fw=open('part'+str(index)+'.log','w')
fw.close()

❼ Python編寫一個程序 可以讀取郵件日誌(mbox.txt),統計每個郵件發出的郵件數量,並輸出結果。

由於工作需要在一大堆日誌裡面提取相應的一些固定字元,如果單純靠手工取提取,數據量大,勞心勞力,於是自然而然想到了用Python做一個對應的提取工具,代替手工提取的繁雜,涉及中文字元,正則表達式不好匹配,但不是不可以實現,這個以後優化時再說。

需求描述:

一個父目錄中存在多個子文件夾,子文件夾下有多個txt形式化的Log日誌,要求從所有地方Log日誌中找出CardType=9, CardNo=0時的CardID的值,並將其統計存儲到一個文本文件中,要求CardID不能夠重復。

需求解析:

首先獲取所有的Log日誌的全路徑,根據路徑分別載入到將各個Log日誌載入到內存中進行提取分析,並將結果存儲到給定的文本文件中。

解決方案:

為了盡可能的簡潔通用,這里使用配置文件作為輸入變數的依據。不多說,上代碼:

配置文件如下:

心得體會:

1、利用Python去處理一些日常的小任務,可以很方便的完成,相比較C/C++來說,這方面生產力高了不少。

2、本文設計對中文字元的處理,所以使用正則表達式不太怎麼方便,但不少不可以,後續版本中會添加對正則的支持!

3、由於初學中,所以代碼寫的不夠精煉簡潔,後續進行再優化!

❽ python日誌怎麼配置壓縮

#!/usr/bin/env python#-*- coding: utf-8 -*-#import datetimeimport osimport zipfile#計算昨天的時間time = datetime.datetime.now()
delta = datetime.timedelta(days=-1)
n_days = time + delta
yestoday = n_days.strftime('%Y-%m-%d')
name = 'app.' +yestoday +'.log'#print (name)def zip_files(file,file_news):
file = '/data/server/apps/rules_scalability/logs/' +name #文件名
# print(file)
file_news = '/data/server/apps/rules_scalability/logs/' +name +'.zip' #文件壓縮後的名
#print(file_news)
f = zipfile.ZipFile(file_news, 'w', zipfile.ZIP_DEFLATED,allowZip64=True)
f.write(file,name) #name文件解壓後的名 f.close()
os.remove(file) #刪除源文件file = '/data/server/apps/rules_scalability/logs/' +name
file_news = '/data/server/apps/rules_scalability/logs/' +name +'.zip'zip_files(file,file_news)

❾ python 分析系統日誌

這個不用做計劃任務。直接用tail -f 文件名|grep executing too slow

這樣就可以了。然後wc統計行數。

如果你一定要用python做。就使用文件對象中的seek方法,移到上次處理的位置。

閱讀全文

與python日誌計算qps相關的資料

熱點內容
浙江標准網路伺服器機櫃雲主機 瀏覽:585
設置網路的伺服器地址 瀏覽:600
java圖形界面設計 瀏覽:751
純前端項目怎麼部署到伺服器 瀏覽:538
瓜子臉程序員 瀏覽:505
如何保證伺服器優質 瀏覽:94
小微信aPP怎麼一下找不到了 瀏覽:299
演算法纂要學術價值 瀏覽:975
程序員你好是什麼意思 瀏覽:801
倩女幽魂老伺服器如何玩 瀏覽:561
電子鍾單片機課程設計實驗報告 瀏覽:999
看加密頻道 瀏覽:381
程序員算不算流水線工人 瀏覽:632
三星電視我的app怎麼卸載 瀏覽:44
簡述vi編譯器的基本操作 瀏覽:507
讓程序員選小號 瀏覽:91
加強數字貨幣國際信息編譯能力 瀏覽:584
購買的app會員怎麼退安卓手機 瀏覽:891
程序員的種類及名稱 瀏覽:293
美國程序員薪資 瀏覽:13