通过日志监控Nginx运行状态

6 篇文章 0 订阅

http://limimgjie.iteye.com/blog/1180881


通过标准日志的状态,监控服务的整体稳定性, 
配置服务日志的标准格式: 
nginx日志: 

Java代码   收藏代码
  1. log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  2.              '$status $body_bytes_sent "$http_referer" '  
  3.              '"$http_user_agent" $request_time';  

记录的形式如下:
Java代码   收藏代码
  1. 112.15.238.212 - - [25/Sep/2011:04:01:11 +0800"GET /UserRecommend.php HTTP/1.1" 200 870 "http://moviebox.baofeng.net/newbox1.0/index.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)" 320  


日志格式说明: 
$remote_addr 远程请求使用的IP地址 
$remote_user 远端登录名 
$time_local 时间,用普通日志时间格式(标准英语格式) 
$request 请求的第一行 
$status 状态。 
$body_bytes_sent 请求返回的字节数,包括请求头的数据 
$http_referer 请求头Referer的内容 
$http_user_agent 请求头User-Agent的内容 
$request_time 处理完请求所花时间,以秒为单位 

apache日志: 
Java代码   收藏代码
  1. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T " combined  
  2.     CustomLog log/access_log combined  


记录的形式如下:
Java代码   收藏代码
  1. 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700"GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"  



日志格式说明: 
%h 请求使用的IP地址 
%l 远端登录名(由identd而来,如果支持的话),除非IdentityCheck设为"On",否则将得到一个"-"。 
%u 远程用户名(根据验证信息而来;如果返回status(%s)为401,可能是假的) 
%t 时间,用普通日志时间格式(标准英语格式) 
%r 请求的第一行 
%s 状态。对于内部重定向的请求,这个状态指的是原始请求的状态,---%>s则指的是最后请求的状态。 
%b 以CLF格式显示的除HTTP头以外传送的字节数,也就是当没有字节传送时显示'-'而不是0。 
\"%{Referer}i\" 发送到服务器的请求头Referer的内容。 
\"%{User-Agent}i\" 发送到服务器的请求头User-Agent的内容。 
%T 处理完请求所花时间,以秒为单位。 
%I 接收的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。 
%O 发送的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。 

日志定时切割的脚本: 
/sh/log_apache.sh 
Java代码   收藏代码
  1.       # apache log backup  
  2. #!/bin/bash  
  3.   
  4. # 获取昨天的日期  
  5. logfilename=`date -d yesterday +%Y_%m_%d`  
  6. today=`date +%Y.%m.%d`  
  7. # 设置日志文件原始路径    
  8. logfilepath=/opt/modules/apache2/logs/  
  9. # 设置日志备份文件路径  
  10. backupfilepath=/opt/data/logs/apache/  
  11.   
  12. echo "get access log:"  
  13. # 打包压缩访问日志文件  
  14. cd ${logfilepath}  
  15. tar zcvf ${backupfilepath}access/${logfilename}.tar.gz access_${logfilename}.log  
  16. rm -rf access_${logfilename}.log  
  17.   
  18. echo "get error log:"  
  19. # 打包压缩错误日志文件  
  20. cd ${logfilepath}  
  21. tar zcvf ${backupfilepath}error/${logfilename}.tar.gz error_${logfilename}.log  
  22. rm -rf error_${logfilename}.log  
  23.   
  24. echo "done @"${today}  


nginx日志的切割脚本: 
Java代码   收藏代码
  1. #nginxlog日志备份  
  2. #!/bin/sh  
  3.   
  4. # 设置日志文件备份文件名    
  5. #logfilename=`date +%Y%m%d`  
  6. logfilename=`date +\%Y\%m\%d -d "1 days ago"`  
  7. # 设置日志文件原始路径    
  8. logfilepath=/opt/modules/nginx/logs/  
  9. # 设置日志备份文件路径  
  10. backupfilepath=/opt/data/logs/nginx/  
  11.   
  12. LOG_FILE='access error log_mm log_db'  
  13. for j in $LOG_FILE  
  14. do  
  15.         cd ${logfilepath}  
  16.         tar zcvf ${backupfilepath}$j/${logfilename}.tar.gz $j.log  
  17.         rm -rf $j.log  
  18. done  
  19.   
  20. kill -USR1 `cat  /opt/modules/nginx/nginx.pid  


日志定时清理的脚本: 
Java代码   收藏代码
  1. #!/bin/sh  
  2. ####################### clear logs #########################  
  3.   
  4. ### nginx ###  
  5. #clear nginx access log(by hour .log) 2 days ago   
  6. /usr/bin/find /opt/data/logs/nginx/access -mtime +2 -name "access.log*" -exec rm -rf {} \;  
  7.   
  8. #clear nginx (access,error,log_mm,log_db) log(by day tar.gz) 10 days ago  
  9. NGINX='access error log_mm log_db'  
  10. for i in $NGINX  
  11. do  
  12.         /usr/bin/find /opt/data/logs/nginx/$i -mtime +10 -name "*tar.gz" -exec rm -rf {} \;  
  13. done  
  14.   
  15. ### apache ###   
  16. #clear apache (access,error) log(by day tar.gz) 10 days ago  
  17. APACHE='access error'  
  18. for j in $APACHE  
  19. do  
  20.         /usr/bin/find /opt/data/logs/apache/$j -mtime +10 -name "*tar.gz" -exec rm -rf {} \;  
  21. done  
  22.   
  23. ### other log ###  
  24. #clear (txt/mq,txt/auto,txt/man) log(by day .log) 10 days ago  
  25. OTHER='txt/mq txt/auto txt/man'  
  26. for k in $OTHER  
  27. do  
  28.         /usr/bin/find /opt/data/logs/$k -mtime +10 -name "*log" -exec rm -rf {} \;  
  29. done  


日志常规分析脚本
1)日志的响应时间(分析响应时间超过2S的记录数量) 
Java代码   收藏代码
  1. #!/bin/sh  
  2.   
  3. DIR="/opt/data/logs/nginx/access"  
  4. TIME=`date -d "1 hour ago" +%Y%m%d-%H`  
  5.   
  6. FILE=""  
  7. if [ -z $1 ];then  
  8.     FILE="${FILE} ${DIR}/access.log${TIME}"  
  9. else  
  10.    if [ $1 = 'h' ];then  
  11.     FILE="${FILE} ${DIR}/access.log${2}"  
  12.    else  
  13.       for((i=0;i<24;i++))  
  14.       do  
  15.         h=`printf "%02d" $i`  
  16.         FILE="${FILE} ${DIR}/access.log${2}-$h"  
  17.       done  
  18.    fi  
  19. fi  
  20.   
  21. for f in ${FILE}  
  22. do  
  23. echo -n ${f}:  
  24. grep -v 'proxy'  ${f}| awk -F, 'BEGIN{f0=0;f1=0;f2=0}{ if($NF<1)f0++;if($NF>=1 && $NF<2)f1++;if($NF>=2 && $NF < 10000) f2++}END{print f0, f1, f2}'  
  25. done  

2)日志的请求状态(分析各请求状态的记录数量)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值