nginx日志时间段检测
2022-05-31 本文已影响0人
木火应
-
为避免从头到尾读取文件,这里使用python
file_read_backwards
模块从尾部读取文件from file_read_backwards import FileReadBackwards with FileReadBackwards(filepath) as f: ...
-
nginx日志每行长这样:
25/May/2022:14:04:54 +0800 200 0.000 10425 - - 36.43.97.178 - GET caiyun.feixin.10086.cn:7071 /test/api/public/js/chunk123.js Mozilla/5.0 (Linux; Android 9; V1901A Build/P00610; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3999.119 KsWebView/1.6.79.249 Mobile Safari/537.36 Yoda/2.5.6-rc4 StatusHT/28 CV/null Kwai/9.7.20.21207 OS_PRO_BIT/64 MAX_PHY_MEM/3727 AZPREFIX/yz ICFO/0 TitleHT/50 AllowKsCallApp NetType/WIFI ISLP/0 ISDM/0 ISLB/0 locale/zh-cn CT/0 gzip, deflate https://127.0.0.1:8000/portal/caiyunMcloudActive/index.html?path=shanXiShare&WT.mc_id=xstHIRmkil2i3okWwCHw&callback=kabykE-6t4UPfZfdbD-mk3ufcZOz0gQEOluZ06RXrUGhie0M7WOca94TLty5taCCUz12GlfTJvWB70Ww8R_EguyDQ8pIA3siwCyR8qJV93hlSf712a1RsiiMVEo0nDNvqMg6ArzAQLT8o-zly6GsbA%3D%3D - User_request_status:200 -
-
需要通过第一列
25/May/2022:14:04:54
进行过滤,使用pythondatetime
模块格式化第一列并输出为datetime对象line = line.strip() arr = line.split() firsthead = arr[0] hour = datetime.strptime(firsthead, '%d/%b/%Y:%H:%M:%S')
-
完整代码为:
def read_access_log(self,filepath="access.log"): self.CurrentHourInit = datetime.now() self.LastHourInit = self.CurrentHourInit - timedelta(hours=1) self.LastHourInit = self.LastHourInit.strftime("%Y-%m-%d %H:00:00") self.CurrentHourInit = self.CurrentHourInit.strftime("%Y-%m-%d %H:00:00") with FileReadBackwards(filepath) as f: line = f.readline() while line: line = line.strip() arr = line.split() # 过滤上一个小时整点时间段的数据 firsthead = arr[0] hour = datetime.strptime(firsthead, '%d/%b/%Y:%H:%M:%S') self.LastHour = datetime.strptime(self.LastHourInit, "%Y-%m-%d %H:%M:%S") self.CurrentHour = datetime.strptime(self.CurrentHourInit, "%Y-%m-%d %H:%M:%S") # break if hour <self.LastHour: break # continue if hour==self.CurrentHour: line = f.readline() continue result = (float(arr[3])*1000, arr[11]) yield result line = f.readline() f.close()