当前位置:首页 > linux教程 > 列表

linux中shell脚本统计apache日志中页面访问量

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-22 14:08:36 浏览: 评论:0 

apache日志是可以记录到网站的各种访问与状态了,那么我们生成的日志一个个查看是非常的困难的,下面一起来看一个中shell脚本统计apache日志中页面访问量的例子,希望文章可以帮助到大家.

需求:在程序中有两个页面,用于某种用途,现需要统计这两个页面在每分钟内的访问量,包括总访问次数,成功次数(状态码200),失败次数,然后写入到mysql中.

mysql字段:id(自增长)、time(实际统计时间)、year、month、day、hour、visit(总访问量)、success、fail、target(目标).

  1. #!/bin/bash 
  2. #Desc       : analysis apache log for witch pages with one minutes 
  3. #install bc packages with yum install -y bc if not found bc command 
  4.  
  5. logdir=/var/log/httpd/80/access 
  6. logfile=$logdir/$(date +%Y%m%d)_access_log 
  7.  
  8. month=$(date|awk '{print$2}'
  9. day=$(date|awk '{print$3}'
  10. year=$(date|awk '{print$6}'
  11. hour=$(date|awk '{print$4}'|cut -d: -f1) 
  12. min=$(date|awk '{print$4}'|cut -d: -f2) 
  13.  
  14. # get current system times to /tmp 
  15. echo $month > /tmp/month.txt 
  16. echo $day > /tmp/day.txt 
  17. echo $year > /tmp/year.txt 
  18. echo $hour > /tmp/hour.txt 
  19. echo $min > /tmp/min.txt 
  20.  
  21. # compute run minute 
  22. if [ "$min" == "00" ]; then 
  23.         RUN_MINUTE=59 
  24.         else 
  25.                 if [ "$(awk -F '' '{print$(NF-1)}' /tmp/min.txt)" == "0" ]; then 
  26.             echo $(awk -F '' '{print$NF}' /tmp/min.txt) > /tmp/min2.txt 
  27.                         echo $(cat /tmp/min2.txt) -1|bc > /tmp/run_minute.txt 
  28.  
  29.                 if [ "cat /tmp/run_minute.txt" == "0" ]; then 
  30.                                     RUN_MINUTE=00 
  31.                 else 
  32.                     RUN_MINUTE=0$(cat /tmp/run_minute.txt) 
  33.                                 fi 
  34.  
  35.                 else 
  36.  
  37.                          echo $(cat /tmp/min.txt) -1|bc > /tmp/run_minute.txt 
  38.                 if [ "$(cat /tmp/run_minute.txt)" == "9" ]; then 
  39.                     RUN_MINUTE=09 
  40.                 else 
  41.                                 RUN_MINUTE=$(cat /tmp/run_minute.txt) 
  42.                 fi 
  43.                 fi 
  44.  
  45. fi 
  46.  
  47. # compute run hour 
  48. if [ "$hour" == "00" ]; then 
  49.         if [ "$min" == "00" ]; then 
  50.         RUN_HOUR=23 
  51.     else 
  52.         RUN_HOUR=$hour 
  53.         fi 
  54.     else 
  55.         if [ "$min" == "00" ]; then 
  56.             if [ "$(awk -F '' '{print$(NF-1)}' /tmp/hour.txt)" == "0" ]; then 
  57.             echo $(awk -F '' '{print$NF}' /tmp/hour.txt) > /tmp/hour2.txt 
  58.             echo $(cat /tmp/hour2.txt) -1|bc >/tmp/run_hour.txt 
  59.                 if [ "$(cat /tmp/run_hour.txt)" == "0" ]; then 
  60.                     RUN_HOUR=00 
  61.                               else 
  62.                                     RUN_HOUR=0$(cat /tmp/run_hour.txt) 
  63.                 fi 
  64.             else 
  65.                 echo $(cat /tmp/hour.txt) -1|bc >/tmp/run_hour.txt 
  66.                 RUN_HOUR=$(cat /tmp/run_hour.txt) 
  67.             fi 
  68.         else 
  69.             RUN_HOUR=$hour 
  70.         fi 
  71. fi 
  72.  
  73. # get run log file 
  74. if [ "$hour" == "00" ]; then 
  75.     if [ "$min" == "00" ]; then 
  76.     RUN_LOG=$logdir/$(date -d last-day +%Y%m%d_access_log) 
  77.         else 
  78.         RUN_LOG=$logfile 
  79.     fi 
  80.     else 
  81.         RUN_LOG=$logfile 
  82. fi 
  83.  
  84. begin log analysis 
  85. p1=cnbpush.php 
  86. p2=jlpush.php 
  87.  
  88. if [ "$hour" == "00" ]; then 
  89.     if [ "$min" == "00" ]; then 
  90.         INSERT_TIME=$(date -d '-1 hours' +%Y%m%d |cut -c 3-8)$RUN_HOUR$RUN_MINUTE 
  91.         else 
  92.         INSERT_TIME=$(date +%Y%m%d |cut -c 3-8)$RUN_HOUR$RUN_MINUTE 
  93.     fi 
  94.     else 
  95.         INSERT_TIME=$(date +%Y%m%d |cut -c 3-8)$RUN_HOUR$RUN_MINUTE 
  96.  
  97. fi 
  98.  
  99. echo $INSERT_TIME | cut -c 1-2 > /tmp/IY 
  100. echo $INSERT_TIME | cut -c 3-4 > /tmp/IM 
  101. echo $INSERT_TIME | cut -c 5-6 > /tmp/ID 
  102. echo $INSERT_TIME | cut -c 7-8 > /tmp/IH 
  103. INSERT_YEAR=20$(cat /tmp/IY) 
  104. INSERT_MONTH=$(cat /tmp/IM) 
  105. INSERT_DAY=$(cat /tmp/ID) 
  106. INSERT_HOUR=$(cat /tmp/IH) 
  107.  
  108. CN_TOTAL_ACCESS=$(cat $RUN_LOG | grep "$p1" | awk -F ':' '{print$2$3}'| grep "$RUN_HOUR$RUN_MINUTE" | wc -l) 
  109. CN_SUCC_ACCESS=$(cat $RUN_LOG | grep "$p1" | grep "200" | awk -F ':' '{print$2$3}'| grep "$RUN_HOUR$RUN_MINUTE" | wc -l) 
  110. CN_FAIL_ACCESS=$(cat $RUN_LOG | grep "$p1" | grep -v "200" | awk -F ':' '{print$2$3}'| grep "$RUN_HOUR$RUN_MINUTE" | wc -l) 
  111.  
  112. JL_TOTAL_ACCESS=$(cat $RUN_LOG | grep "$p2" | awk -F ':' '{print$2$3}'| grep "$RUN_HOUR$RUN_MINUTE" | wc -l) 
  113. JL_SUCC_ACCESS=$(cat $RUN_LOG | grep "$p2" | grep "200" | awk -F ':' '{print$2$3}'| grep "$RUN_HOUR$RUN_MINUTE" | wc -l) 
  114. JL_FAIL_ACCESS=$(cat $RUN_LOG | grep "$p2" | grep -v "200" | awk -F ':' '{print$2$3}'| grep "$RUN_HOUR$RUN_MINUTE" | wc -l) 
  115.  
  116. DB_NAME=shell_log 
  117. DB_USER=root 
  118. DB_PASS=root 
  119. DB_TAB=log 
  120.  
  121. mysql -u$DB_USER -p$DB_PASS $DB_NAME -e "INSERT INTO $DB_TAB(time,year,month,day,hour,visit,success,fail,target) VALUES ('$INSERT_TIME', '$INSERT_YEAR', '$INSERT_MONTH', '$INSERT_DAY', '$INSERT_HOUR', '$CN_TOTAL_ACCESS', '$CN_SUCC_ACCESS', '$CN_FAIL_ACCESS', 'cnbpush');" 
  122. mysql -u$DB_USER -p$DB_PASS $DB_NAME -e "INSERT INTO $DB_TAB(time,year,month,day,hour,visit,success,fail,target) VALUES ('$INSERT_TIME', '$INSERT_YEAR', '$INSERT_MONTH', '$INSERT_DAY', '$INSERT_HOUR', '$JL_TOTAL_ACCESS', '$JL_SUCC_ACCESS', '$JL_FAIL_ACCESS', 'jlpush');" --phpfensi.com 
  123.  
  124. exit 

放到任务计划,一分钟一执行.

Tags: shell脚本统计 apache日志

分享到: