码迷,mamicode.com
首页 > 编程语言 > 详细

python分析nginx日志,每分钟nginx请求超过10ms的比例

时间:2018-05-29 18:56:35      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:python分析nginx日志每分钟n

代码如下: #!/usr/bin/python # --*-- coding:utf-8 --*-- import time import datetime import sys import os import os.path import re import json import socket import requests import subprocess class NginxLog(object): def __init__(self, log_file, seek_file): self.log_file = log_file self.seek_file = seek_file def hostname(self): """host_name: 主机名""" host_name = socket.gethostname() return host_name def writeSeek(self, seek): """读过的游标写入临时文件""" with open(self.seek_file,'w') as f: f.write(time.strftime("%Y-%m-%d %H:%M:%s", time.localtime(time.time())) + '\n') f.write(str(seek) + "\n") def LogRead(self): """读出新生成的日志 # 如果第一次运行,或是删除临时文件,从头运行,否则,从上次读取之后运行 # 0代表从头开始,1代表当前位置,2代表文件最末尾位置 chunk: 返回一行日志 """ if os.path.exists(self.seek_file): with open(self.seek_file) as f: seek_tmp = f.readlines() seek_old = int(seek_tmp[1].strip()) else: seek_old = 0 with open(self.log_file) as f: #记录当前最新文件游标 f.seek(0,2) #最新游标位置 seek_now = f.tell() # 读取上次读完之后的日志 if seek_now >= seek_old: f.seek(seek_old,0) #从文件开头位置偏移 chunk = f.read(seek_now - seek_old) #如果seek_now-seek_old小于0说明日志轮训 else: f.seek(0,0) chunk = f.read(seek_now) # 将这次的游标写入临时文件 self.writeSeek(seek_now) return chunk def Log_percent(self): """获取分钟超过10ms请求数的百分比 low_request_time: 低于10ms的请求数 high_request_time: 高于10ms的请求数 """ low_request_time = [] high_request_time = [] for line in self.LogRead().split('\n'): tmp_time = line.split(' ')[-1] if tmp_time: tmp_data = float('%.3f' % float(tmp_time)) request_time = int(tmp_data * 1000) if request_time > 10: high_request_time.append(request_time) else: low_request_time.append(request_time) # 一分钟请求总数 count = float(len(low_request_time) + len(high_request_time)) # 超过10ms的百分比 if count: result = float(len(high_request_time))/count #只取分子 percent = int(result * 100) return percent else: return 0 #当一分钟请求数为0时,返回0 def push_falcon(self, data, url): """数据推送到openfalcon""" host = self.hostname() current_time = int(time.time()) payload = [ { "endpoint": host, "metric": "nginx_request_percent", "timestamp": current_time, "step": 60, "value": data, "counterType": "GAUGE", "tags": "nginx_request_percent=10ms", } ] json_data=json.dumps(payload) print json_data res = requests.post("http://127.0.0.1:1988/v1/push", data=json_data) def main(): # 日志文件位置 log_file = "/root/access.log" seek_file = "/root/seek_temp.log" url = "http://127.0.0.1:1988/v1/push" nginx_log = NginxLog(log_file,seek_file) percent = nginx_log.Log_percent() nginx_log.push_falcon(percent,url) if __name__ == '__main__': main()


python分析nginx日志,每分钟nginx请求超过10ms的比例

标签:python分析nginx日志每分钟n

原文地址:http://blog.51cto.com/haoyonghui/2121694

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!