设为首页 收藏本站
查看: 393|回复: 0

[经验分享] nginx httpcode分析脚本

[复制链接]

尚未签到

发表于 2018-11-11 11:58:11 | 显示全部楼层 |阅读模式
#!/usr/bin/python  
#coding=utf-8
  
from __future__ import division
  
import subprocess, signal,string
  
import codecs
  
import re
  
import os
  
import time, datetime
  
import sys
  
def show_usage():
  print """
  python nginx_log_wedcdn.py result_key
  result_key could be:
  average_bodysize, response_time, sum_count, count_success, four, 403, 404, 499, five, 500, 502, 503, 200, 300, requests_second
  response_time_source, percentage_time_1, percentage_time_3, all
  """
  
def runCmd(command, timeout = 10):
  start = datetime.datetime.now()
  process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
  while process.poll() is None:
  time.sleep(0.2)
  now = datetime.datetime.now()
  if (now - start).seconds > timeout:
  os.kill(process.pid, signal.SIGKILL)
  os.waitpid(-1, os.WNOHANG)
  return None
  return process.stdout.readlines()
  
def get_old_filename():
  t = datetime.datetime.now() + datetime.timedelta(minutes = -5)
  a = t.strftime('%Y-%m-%d-%H')
  b = t.strftime('%M')
  b = int(b)//5*5
  if b < 10:
  c = "0" + str(b)
  else:
  c = str(b)
  d = "/log/nginx/old/" + a + "-%s.log.gz" % c
  #print d
  return d
  
def get_new_filename():
  t = datetime.datetime.now() + datetime.timedelta(minutes = -5)
  a = t.strftime('%Y-%m-%d-%H')
  b = t.strftime('%M')
  b = int(b)//5*5
  if b < 10:
  c = "0" + str(b)
  else:
  c = str(b)
  d = "/log/nginx/old/" + a + "-%s.log" % c
  #print d
  return d
  
def get_new2_filename():
  t = datetime.datetime.now() + datetime.timedelta(minutes = -5)
  a = t.strftime('%Y-%m-%d-%H')
  b = t.strftime('%M')
  b = int(b)//5*5
  if b < 10:
  c = "0" + str(b)
  else:
  c = str(b)
  d = "/log/nginx/new/" + a + "-%s.log" % c
  #print d
  return d
  
def average_flow():
  flow = 0
  flow1 = 0
  flow_ppsucai = 0
  flow_asimgs = 0
  flow_static9 = 0
  traffic = 0.0
  traffic1 = 0.0
  count = 0
  count_sucai = 0
  count_sucai_100 = 0
  count_sucai_30_100 = 0
  count_sucai_30 = 0
  count_asimgs = 0
  count_asimgs_100 = 0
  count_asimgs_30_100 = 0
  count_asimgs_30 = 0
  count_static9 = 0
  count_static9_100 = 0
  count_static9_30_100 = 0
  count_static9_30 = 0
  sum_time = 0.0
  sum_ppsucai_time = 0.0
  sum_asimgs_time = 0.0
  sum_static9_time = 0.0
  sum_time_source = 0.0
  count_200 = 0
  count_300 = 0
  count_success = 0
  count_200_backup = 0
  count_not_200_backup = 0
  id_list_200 = [200,206]
  id_list_300 = [300,301,302,303,304,305,306,307]
  id_list_success = [200,206,300,301,302,303,304,305,306,307]
  data_byte = 0
  elapsed = 0.0
  response_time = 0.0
  response_time_source = 0.0
  requests_second = 0.0
  requests_second_sucai = 0.0
  requests_second_asimgs = 0.0
  list_time_1 = []
  list_time_3 = []
  list_ip_403 = []
  list_ip_404 = []
  list_ip_415 = []
  list_ip_499 = []
  list_ip_500 = []
  list_ip_502 = []
  list_ip_503 = []
  server_list = ['"127.0.0.1:8080"','"127.0.0.1:8081"','"-"']
  file_name = get_old_filename()
  if os.path.isfile("%s" % file_name):
  Writelog(file_name)
  i = os.popen("/bin/zcat %s" % file_name).readlines()
  #i = gzip.GzipFile("%s" % file_name).readlines()
  else:
  file_name = get_new_filename()
  if os.path.isfile("%s" % file_name):
  Writelog(file_name)
  i = os.popen("/bin/cat %s" % file_name).readlines()
  else:
  #time.sleep(15)
  file_name = get_new2_filename()
  if os.path.isfile("%s" % file_name):
  Writelog(file_name)
  i = os.popen("/bin/cat %s" % file_name).readlines()
  else:
  os.popen("rm -f /tmp/exist.txt")
  sys.exit(1)
  for line in i:
  count += 1
  try:
  domain_name = line.split()[1]
  except:
  pass
  try:
  web_code = int(line.split()[8])
  except:
  web_code = 888
  try:
  IP = str(line.split()[0])
  except:
  pass
  try:
  data_byte = int(line.split()[9])
  #print "data", data_byte
  except:
  data_byte = 0.0001
  try:
  elapsed = float(line.split()[-1].strip('"'))
  if elapsed == 0.000:
  elapsed = 0.0001
  except:
  elapsed = 0.0001
  try:
  time_source = float(line.split()[-4].strip('"'))
  except:
  time_source = 0.0
  try:
  backup_server =  str(line.split()[-3])
  except:
  pass
  flow1 += data_byte

  if web_code in>  flow += data_byte
  sum_time_source += time_source
  if domain_name != "ppsucai.pptv.com":
  sum_time += elapsed
  else:
  #print domain_name
  sum_time += 0.000

  if web_code in>  #print web_code
  count_200 += 1
  if backup_server not in server_list:
  #print web_code, backup_server
  count_200_backup += 1
  elif web_code == 200 and date_byte == 0:
  #print line.split()[3].lstrip("[")
  WriteURLInfo(line.split()[3].lstrip("["))
  WriteURLInfo("\t")
  WriteURLInfo(line.split()[10])
  WriteURLInfo("\n")

  elif web_code in>  count_300 += 1
  elif web_code == 403 and IP not in list_ip_403:
  list_ip_403.append(IP)
  #print "this is the sum 403 count:", IP, len(list_ip_403)
  elif web_code == 404 and IP not in list_ip_404:
  list_ip_404.append(IP)
  #print "this is the sum 404 count:", IP, len(list_ip_404)
  elif web_code == 415 and IP not in list_ip_415:
  list_ip_415.append(IP)
  #print "this is the sum 415 count:", IP, len(list_ip_415)
  elif web_code == 499 and IP not in list_ip_499:
  list_ip_499.append(IP)
  #print "this is the sum 499 count:", IP, len(list_ip_499)
  elif web_code == 500 and IP not in list_ip_500:
  list_ip_500.append(IP)
  #print "this is the sum 500 count:", IP, len(list_ip_500)
  elif web_code == 502 and IP not in list_ip_502:
  list_ip_502.append(IP)
  #print "this is the sum 502 count:", IP, len(list_ip_502)
  elif web_code == 503 and IP not in list_ip_503:
  list_ip_503.append(IP)
  #print "this is the sum 503 count:", IP, len(list_ip_503)

  if web_code not in>  #print web_code, backup_server
  count_not_200_backup += 1

  if elapsed > 1.0 and web_code in>  list_time_1.append(IP)

  elif elapsed > 3.0 and web_code in>  list_time_3.append(IP)

  if domain_name == "ppsucai.pptv.com" and web_code in>  download_speed_sucai = round(data_byte / elapsed / 1024, 2)
  flow_ppsucai += data_byte
  sum_ppsucai_time += elapsed
  count_sucai += 1
  if download_speed_sucai >= 100:
  count_sucai_100 += 1
  elif download_speed_sucai < 100 and download_speed_sucai >= 30:
  count_sucai_30_100 += 1
  else:
  count_sucai_30 += 1

  elif domain_name == "asimgs.pplive.cn" and web_code in>  download_speed_asimgs = round(data_byte / elapsed / 1024, 2)
  flow_asimgs += data_byte
  sum_asimgs_time += elapsed
  count_asimgs += 1
  if download_speed_asimgs >= 100:
  count_asimgs_100 += 1
  elif download_speed_asimgs < 100 and download_speed_asimgs >= 30:
  count_asimgs_30_100 += 1
  else:
  count_asimgs_30 += 1

  elif domain_name == "static9.pplive.cn" and web_code in>  download_speed_static9 = round(data_byte / elapsed / 1024, 2)
  flow_static9 += data_byte
  sum_static9_time += elapsed
  count_static9 += 1
  if download_speed_static9 >= 100:
  count_static9_100 += 1
  elif download_speed_static9 < 100 and download_speed_static9 >= 30:
  count_static9_30_100 += 1
  else:
  count_static9_30 += 1
  #else:
  #break
  try:
  traffic = round((flow*1.07*8)/300/1024/1024, 2)
  #traffic1 = round((flow1*1.07)/300/1024/1024, 2)
  #print traffic, traffic1
  #traffic1 = round(flow/sum_time/1024/1024, 2)
  count_success = count_200 + count_300
  response_time = round(sum_time/count_success, 2)
  response_time_source = round(sum_time_source/count_success, 2)
  requests_second = round(count_success/300, 2)
  if sum_ppsucai_time == 0.0:
  sum_ppsucai_time = 0.0001
  if sum_asimgs_time == 0.0:
  sum_asimgs_time = 0.0001
  #print sum_static9_time
  if sum_static9_time == 0.0:
  sum_static9_time = 0.0001
  traffic_ppsucai = round(flow_ppsucai/sum_ppsucai_time/1024, 2)
  traffic_asimgs = round(flow_asimgs/sum_asimgs_time/1024, 2)
  traffic_static9 = round(flow_static9/sum_static9_time/1024, 2)
  #print "flow_static:", flow_static9, "traffic_static9", traffic_static9
  average_bodysize = round((flow/count_success)/1024, 2)
  percentage_time_1 = round(len(list_time_1)/count_success*100, 2)
  percentage_time_3 = round(len(list_time_3)/count_success*100, 2)
  if count_sucai == 0:
  count_sucai = 0.0001
  percentage_sucai_100 = round(count_sucai_100/count_sucai*100, 2)
  percentage_sucai_30_100 = round(count_sucai_30_100/count_sucai*100, 2)
  percentage_sucai_30 = round(count_sucai_30/count_sucai*100, 2)
  if count_asimgs == 0:
  count_asimgs = 0.0001
  percentage_asimgs_100 = round(count_asimgs_100/count_asimgs*100, 2)
  percentage_asimgs_30_100 = round(count_asimgs_30_100/count_asimgs*100, 2)
  percentage_asimgs_30 = round(count_asimgs_30/count_asimgs*100, 2)
  #print count_static9
  if count_static9 == 0:
  count_static9 = 0.0001
  percentage_static9_100 = round(count_static9_100/count_static9*100, 2)
  #print count_static9_100, "100", percentage_static9_100
  percentage_static9_30_100 = round(count_static9_30_100/count_static9*100, 2)
  #print count_static9_30_100, "30-100", percentage_static9_30_100
  percentage_static9_30 = round(count_static9_30/count_static9*100, 2)
  #print count_static9_30, "30", percentage_static9_30
  requests_second_sucai = round(count_sucai/300, 2)
  requests_second_asimgs = round(count_asimgs/300, 2)
  requests_second_static9 = round(count_static9/300, 2)
  #print requests_second_static9
  #print count, "this is the count of 2xx_backup:", count_200_backup,"%", round(count_200_backup/count, 4),"this is the count of !2xx_backup:", count_not_200_backup, round(count_not_200_backup/count, 4)
  percentage_200_backup = round(count_200_backup/count*100, 2)
  percentage_not_200_backup = round(count_not_200_backup/count*100, 2)
  return average_bodysize, response_time, count, count_success, len(list_ip_403), len(list_ip_404), len(list_ip_499), len(list_ip_500), len(list_ip_502), len(list_ip_503), count_200, count_300, requests_second, response_time_source, len(list_time_1), len(list_time_3), percentage_time_1, percentage_time_3,count_sucai,percentage_sucai_100, percentage_sucai_30_100, percentage_sucai_30, requests_second_sucai, count_asimgs, percentage_asimgs_100, percentage_asimgs_30_100, percentage_asimgs_30, requests_second_asimgs, traffic_ppsucai, traffic_asimgs, traffic, traffic_static9, count_static9, percentage_static9_100, percentage_static9_30_100, percentage_static9_30, requests_second_static9, percentage_200_backup, percentage_not_200_backup, len(list_ip_415)
  except:
  return 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  
def log_files(pwd):
  log_file_list = []
  files = os.popen("ls %s" % pwd).readlines()
  for x in files:
  if x.strip().endswith("log"):
  log_file_list.append(x.strip())
  return log_file_list
  
def result_dic():
  list = average_flow()
  #print list
  
#   print list
  result = {}
  result['average_bodysize'] = list[0]
  result['response_time'] = list[1]
  result['sum_count'] = list[2]
  result['count_success'] = list[3]
  result['four'] = list[4] + list[5] + list[6] + list[39]
  
#   print 'four','=','%s' % list[4],'+','%s' % list[5],'+','%s' % list[6],'+','%s' % list[39], result['four']
  result['403'] = list[4]
  
#   print '403', result['403']
  result['404'] = list[5]
  
#   print '404', result['404']
  result['499'] = list[6]
  
#   print '499', result['499']
  result['415'] = list[39]
  
#   print '415', result['415']
  result['five'] = list[7] + list[8] + list[9]
  result['500'] = list[7]
  result['502'] = list[8]
  result['503'] = list[9]
  result['200'] = list[10]
  result['300'] = list[11]
  result['requests_second'] = list[12]
  result['response_time_source'] = list[13]
  result['percentage_time_1'] = list[16]
  result['percentage_time_3'] = list[17]
  result['count_sucai'] = list[18]
  result['percentage_sucai_100'] = list[19]
  result['percentage_sucai_30_100'] = list[20]
  result['percentage_sucai_30'] = list[21]
  result['requests_second_sucai'] = list[22]
  result['count_asimgs'] = list[23]
  result['percentage_asimgs_100'] = list[24]
  result['percentage_asimgs_30_100'] = list[25]
  result['percentage_asimgs_30'] = list[26]
  result['requests_second_asimgs'] = list[27]
  result['traffic_ppsucai'] = list[28]
  result['traffic_asimgs'] = list[29]
  result['traffic'] = list[30]
  result['traffic_static9'] = list[31]
  result['count_static9'] = list[32]
  result['percentage_static9_100'] = list[33]
  result['percentage_static9_30_100'] = list[34]
  result['percentage_static9_30'] = list[35]
  result['requests_second_static9'] = list[36]
  result['percentage_200_backup'] = list[37]
  result['percentage_not_200_backup'] = list[38]
  result['all'] = list
  return result
  
def Writelog(msg):
  o = open("/log/nginx/qos_result_new"+".log","aw")
  o.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ":" + msg + "\n")
  o.close()
  
def WriteTmpInfo(msg):
  o = open("/tmp/webcdnqos_result"+".txt","aw+")
  o.write(msg+"\n")
  o.close()
  
def WriteURLInfo(msg):
  today = datetime.date.today()
  o = open("/tmp/webcdnqos_url_%s" % today.strftime('%Y-%m-%d') + ".log","aw")
  
#   o.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + "    " +msg+"\n")
  o.write(msg)
  o.close()
  
if __name__ == "__main__":
  if len(sys.argv) < 2:
  show_usage()
  os.popen("rm -f /tmp/exist.txt")
  sys.exit(1)
  else:
  if os.path.isfile("/tmp/exist.txt"):
  sys.exit(1)
  else:
  os.popen("echo 'hello' > /tmp/exist.txt")
  result_key = sys.argv[1]
  status = result_dic()
  os.popen(">/tmp/webcdnqos_result.txt")
  print status[result_key]
  Writelog(str(status[result_key]))
  for i in status.keys():
  WriteTmpInfo(str(i)+"="+str(status))
  os.popen("rm -f /tmp/exist.txt")



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633673-1-1.html 上篇帖子: Lighttpd和Nginx 下篇帖子: Awstats 安装(nginx)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表