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

[经验分享] awstats与nginx结合使用

[复制链接]

尚未签到

发表于 2018-11-11 11:42:06 | 显示全部楼层 |阅读模式
  最近客户希望安装一个日志分析软件,于是就想到了awstats,记得以前是用awstats和apache结合使用的,但是客户使用的是nginx,这个有点麻烦,因为awstats和nginx结合的并不好,尤其是日志格式,这需要自己把nginx的日志格式转换成awstats能够识别的格式。
  安装环境:
  CentOS 5.4 32位
  nginx:1.0.4
  awstats:7.0
  一、设置好yum源
  1.32位设置:
  wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
  rpm -Uvh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
  2.64位设置
  wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
  rpm -Uvh rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
  3.编辑repo文件
  vim rpmforge.repo
  enabled = 0
  二、安装、配置awstats
  yum install --enablerepo=rpmforge awstats
  cp /etc/awstats/awstats.localhost.localdomain.conf
  /etc/awstats/awstats.www.example.com.conf
  vim /etc/awstats/awstats.www.example.com.conf
  LogFile=gzip -d /etc/cron.d/updateGeoIP
  四、配置nginx的日志
  vim /etc/logrotate_nginx.conf
  daily
  rotate 3000
  missingok
  notifempty
  dateext
  compress
  sharedscripts
  postrotate
  [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
  endscript
  }
  mkdir /etc/cron.jiuri/
  vim /etc/cron.jiuri/logrotate
  #!/bin/sh
  /usr/sbin/logrotate /etc/logrotate_nginx.conf
  EXITVALUE=$?
  if [ $EXITVALUE != 0 ]; then
  /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE] nginx"
  fi
  exit 0
  编辑cron,每天23:59分执行nginx的logrotate
  echo '59 23 * * *     root bash /etc/cron.jiuri/logrotate' >/etc/cron.d/nginxlogrotate
  五、更新awstats的日志目录
  当然用脚本自动去更新了,脚本如下
  


  • cat merge_nginx_log.sh
  • #!/bin/bash
  • # Description : This script is for the awstat to merge logs and update awstat data
  • # 2010-10-09
  • #

  • AWSTAT_BIN="/var/www/awstats/awstats.pl"
  • YEAR=$(date +%Y)
  • MONTH=$(date +%m)
  • DAY=$(date +%d)
  • DATE=$(date '+%Y%m%d' -d "1 day ago")
  • LOG_DIR=/var/log/nc_merge_nginx_log
  • LOCK_FILE=/var/lock/subsys/nc_merge_nginx_log
  • SSH_RSA_KEY=/home/ncadmin/.ssh/id_rsa

  • SERVER=( "srv-example-web1" "srv-example-web2" "srv-example-web3" "srv-example-web4" )
  • NGINX_LOG_DIR="/var/log/nginx/www.example.com"
  • NGINX_LOG="mixi.example.mobi_access.log"
  • SAVE_FOLDER="/var/www/awstats/nginx_logs/ww.example.com"
  • DST_FOLDER="$SAVE_FOLDER"/"$YEAR"/"$MONTH"/"$DAY"    //nginx日志转换格式后保存的目录
  • AWSTAT_CFG=mixi.example.mobi # IN "/etc/awstats/awstats.www.example.com.conf"


  • define_log(){
  •         LOG_PATH="$LOG_DIR"/"$YEAR"/"$MONTH"/"$DAY"
  •         [ ! -d "$LOG_PATH" ] && mkdir -p "$LOG_PATH"

  •         LOG="$LOG_DIR"/"$YEAR"/"$MONTH"/"$DAY"/nc_merge_nginx_log.log
  •         echo $LOG
  • }


  • get_log_from_nodes(){        //把压缩后的nginx log拷贝到awstats的目录里并解压,awstats会根据这里的log提取信息
  •         for srv in ${SERVER
  • }
  •         do
  •                 [ ! -d "$DST_FOLDER" ] && mkdir -p "$DST_FOLDER"
  •                 scp -i $SSH_RSA_KEY ncadmin@"$srv":"$NGINX_LOG_DIR"/"$NGINX_LOG"-"$DATE".gz "$DST_FOLDER"/"$NGINX_LOG"-"$DATE"-"$srv".log.gz
  •                 gunzip -f "$DST_FOLDER"/"$NGINX_LOG"-"$DATE"-"$srv".log.gz
  •         done
  • }

  • clean_old_log(){   //清理超过3天的awstats目录里的日志,就是拷贝过来的日志
  •         keep_day=3
  •         find "$SAVE_FOLDER" -type f -ctime +$((keep_day-1)) -exec rm -rf '{}' ';'
  • }

  • update(){
  •         $AWSTAT_BIN -config="$AWSTAT_CFG" -configdir=/etc/awstats -update -showsteps
  •         $AWSTAT_BIN -config="$AWSTAT_CFG" -configdir=/etc/awstats -update -showsteps  -databasebreak=day
  • }

  • if [ -f "$LOCK_FILE" ] ;then
  •         echo "There is a same script running!" >> $LOG 2>&1
  • else
  •         touch "$LOCK_FILE"
  •         define_log
  •         get_log_from_nodes >> $LOG 2>&1
  •         update >> $LOG 2>&1
  •         clean_old_log >> $LOG 2>&1
  •         rm -rf "$LOCK_FILE"
  • fi
  

  echo '59 3 * * *     root bash -x /opt/ncscripts/nmerge_nginx_log.sh' >/etc/cron.d/awstat_update
  六、安装 perl-fastcgi
  yum install perl-FCGI perl-pmtools
  

  perl -MCPAN -e 'install FCGI'




  • vim /etc/init.d/perl-fastgi
  • #!/bin/bash
  • #
  • # perl-fastcgi - this script starts and stops the perl-fastcgi Daemon
  • #
  • # chkconfig:   - 85 15
  • # description:  perl-fastcgi is an perl FASTCGI Daemon
  • # processname: perl-fastcgi

  • PERL_SCRIPT=/usr/bin/fastcgi-wrapper.pl
  • FASTCGI_USER=nginx
  • RETVAL=0
  • start(){
  •       echo -n 'Perl FASTCGI Starting ...'
  •       $PERL_SCRIPT
  •       RETVAL=$?
  •       [ $RETVAL -ne 0 ] && echo -e "\t [FAIL]" || echo -e "\t [OK]"
  • }

  • stop(){
  •       echo -n 'Perl FASTCGI Stopping ...'
  •       killall  fastcgi-wrapper.pl
  •       RETVAL=$?
  •       [ $RETVAL -ne 0 ] && echo -e "\t [FAIL]" || echo -e "\t [OK]"
  • }

  • case "$1" in
  •     start)
  •         start
  •   ;;
  •     stop)
  •         stop
  •   ;;
  •     restart)
  •         stop
  •         sleep 1
  •         start
  •   ;;
  •     *)
  •       echo "Usage: perl-fastcgi {start|stop|restart}"
  •       exit 1
  •   ;;
  • esac
  • exit $RETVAL
  mkdir /var/run/nginx
  vim /usr/bin/fastcgi-wrapper.pl
  $socket = FCGI::OpenSocket( "127.0.0.1:8999", 200 ); #use IP sockets
  /etc/init.d/perl-fastcgi start

七、配置nginx
vim /etc/nginx/conf.d/awstats.conf
server {
          server_name   _;
          listen  30443;
          ssl on;
          ssl_certificate /etc/nginx/ssl_key/example.crt;
          ssl_certificate_key /etc/nginx/ssl_key/example.key;
          ssl_session_timeout 5m;
          ssl_protocols SSLv2 SSLv3 TLSv1;
          ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
          ssl_prefer_server_ciphers on;
          auth_basic            "Restricted";
          auth_basic_user_file  conf.d/.example_auth;
          access_log   /var/log/nginx/awstats/access_logs.example.com.log  main;
          error_log   /var/log/nginx/awstats/error_logs.example.com.log;
          root /var/www/awstats/;
          index index.html;
          location ~* .*\.pl$ {
               root /var/www/awstats/;
               fastcgi_pass 127.0.0.1:8999;
               fastcgi_index awstats.pl;
               #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               fastcgi_param SCRIPT_FILENAME  /var/www/awstats/awstats.pl;
               fastcgi_param QUERY_STRING     $query_string;
               fastcgi_param REQUEST_METHOD   $request_method;
               fastcgi_param CONTENT_TYPE     $content_type;
               fastcgi_param CONTENT_LENGTH   $content_length;
               fastcgi_param GATEWAY_INTERFACE CGI/1.1;
               fastcgi_param SERVER_SOFTWARE    nginx;
               fastcgi_param SCRIPT_NAME        $fastcgi_script_name;
               fastcgi_param REQUEST_URI        $request_uri;
               fastcgi_param DOCUMENT_URI       $document_uri;
               fastcgi_param DOCUMENT_ROOT      $document_root;
               fastcgi_param SERVER_PROTOCOL    $server_protocol;
               fastcgi_param REMOTE_ADDR        $remote_addr;
               fastcgi_param REMOTE_PORT        $remote_port;
               fastcgi_param SERVER_ADDR        $server_addr;
               fastcgi_param SERVER_PORT        $server_port;
               fastcgi_param SERVER_NAME        $server_name;
           }
          location ~ ^/awstats/ {
                root /var/www/awstats/;
                index index.html;
         }
}
/etc/init.d/nginx>
八、测试
https://www.example:30443/awstats.pl?config=www.example.com  

  

  


  

  




运维网声明 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-633660-1-1.html 上篇帖子: Nginx基础入门之Nginx命令控制说明 下篇帖子: Nginx与php的整合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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