mgjj 发表于 2018-11-13 10:29:22

nginx使用cronolog切割日志安装、部署、应用测试

  我们使用的是tnginx(支持日志抽样、直接输出到log服务器等)详细安装配置见另一篇博文,
  http://michaelkang.blog.51cto.com/1553154/1359106
  调用方式可以看一下的文章;
  调用cronolog
  http://tengine.taobao.org/document_cn/http_log_cn.html
  #cronolog官网
  http://cronolog.org/
  软件下载链接(稳定版)
  wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
  1,安装cronolog
  tar zxvf cronolog-1.6.2.tar.gz
  cd cronolog-1.6.2
  mkdir -p /usr/local/cronolog
  ./configure --prefix=/usr/local/cronolog
  make
  make install
  ln -s /usr/local/cronolog/sbin/cronolog /usr/bin/
  2,创建一个命名管道
  mkfifo /data/access_log_pipe
  3,配置cronolog,按需配置:
  精确到分钟
  nohup cat /data/access_log_pipe | /usr/local/cronolog/sbin/cronolog /data/logs/%Y%m%d/access_%Y%m%d%H%M.log &
  精确到小时
  nohup cat /data/access_log_pipe | /usr/local/cronolog/sbin/cronolog /data/logs/%Y%m%d/access_%Y%m%d%H.log &
  注意: cronolog必须在nginx启动前启动。如果nginx先启动了,可以reload实现。
  4:相关应用方式测试;
  #####################################################################
  4.1日志直接写入文:100/1抽样测试
  测试脚本:
  for i in $(seq 1000);do echo --$i---;curl http://192.168.2.151/lua;done
  nginx配置:
  server {
  listen       80;
  server_namelocalhost;
  access_log/data/logs/access_2014021203.logmainratio=0.01;
  结果统计:
  # wc -l access_2014021203.log#按照分钟切割日志
  10 access_2014021203.log
  ####################################################################
  4.2 日志写入 管道文件 抽样测试
  测试脚本:
  for i in $(seq 1000);do echo --$i---;curl http://192.168.2.151/lua;done
  nginx配置:
  server {
  listen       80;
  server_namelocalhost;
  access_log/data/access_log_pipemainratio=0.01;
  # wc -l access_2014021203.log
  10 access_2014021203.log
  4.3 测试结论;
  nginx结合cronolog能够按照需求灵活的切割日志,nginx之前简单总结啦一下有三种日志切割方式,详见:
  http://michaelkang.blog.51cto.com/1553154/1359062
  cronolog对日志切割算比较灵活的,就是管道文件不是以服务的方式启动的,放置在后台比较担心稳定性。
  下面是整理的将cronolog启动文件添加到nginx启动文件内容:
  5.将cronolog启动文件嵌入nginx启动文件,保证在nginx启动之前启动管道文件。
  ###########nginx启动配置文件内置cronolog启动
  # more /etc/init.d/nginx.cronolog
  #!/bin/sh
  #
  # Comments to support chkconfig
  #
  # chkconfig: 2345 77 77
  # Description: Startup script for nginx webserver
  #
  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  DESC="nginx daemon"
  NAME=nginx
  DAEMON=/usr/local/nginx/sbin/$NAME
  CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
  PIDFILE=/usr/local/nginx/logs/$NAME.pid
  SCRIPTNAME=/etc/init.d/$NAME
  #日志存放位置
  if [ ! -d "/data/logs" ]; then
  mkdir -p "/data/logs"
  fi
  #生成管道文件位置
  if [ ! -d "/usr/local/nginx/pipe/" ]; then
  mkdir -p "/usr/local/nginx/pipe/"
  fi
  #cronolog相关变量
  LOGPATH=/data/logs
  PIPEPATH=/usr/local/nginx/pipe/
  ERROE_LOG_PIPE=/usr/local/nginx/pipe/error_log_pipe
  ACCESS_LOG_PIPE=/usr/local/nginx/pipe/access_log_pipe
  CRONOLOG=/usr/local/cronolog/sbin/cronolog
  d_mkfifo(){
  #判断管道文件属性、建立管道文件
  if [ ! -p "$ERROE_LOG_PIPE" ]; then
  /bin/rm "$ERROE_LOG_PIPE"
  mkfifo "$ERROE_LOG_PIPE"
  fi
  if [ ! -p "$ACCESS_LOG_PIPE" ]; then
  /bin/rm "$ACCESS_LOG_PIPE"
  mkfifo"$ACCESS_LOG_PIPE"
  fi
  }
  cronolog_start()
  {
  #ps -ef|grep wireless|grep -v grep |awk '{print $2}'|xargs kill -9
  nohup cat "$ACCESS_LOG_PIPE" | $CRONOLOG$LOGPATH/%Y%m%d/Access_%Y%m%d%H.log &
  nohup cat "$ERROE_LOG_PIPE" |$CRONOLOG$LOGPATH/%Y%m%d/Error_%Y%m%d%H.log &
  }
  cronolog_kill()
  {
  ps -ef|grep data/logs|grep -v grep |awk '{print $2}'|xargs kill -9
  ps -ef|grep nginx/pipe|grep -v grep |awk '{print $2}'|xargs kill -9
  }
  # Gracefully exit if the package has been removed.
  test -x $DAEMON || exit 0
  d_start() {
  d_mkfifo
  cronolog_start
  $DAEMON -c $CONFIGFILE || echo -n " already running"
  }
  d_stop() {
  #kill -QUIT `cat $PIDFILE` || echo -n " not running"
  cronolog_kill
  killall nginx || echo -n " not running"
  }
  d_reload() {

  kill -HUP `cat $PIDFILE` || echo -n " can't>  }
  case "$1" in
  start)
  echo -n "Starting $DESC: $NAME"
  d_start
  echo "."
  ;;
  stop)
  echo -n "Stopping $DESC: $NAME"
  d_stop
  echo "."
  ;;
  reload)
  echo -n "Reloading $DESC configuration..."
  d_reload
  echo "reloaded."
  ;;
  status)
  pgrep -x $NAME > /dev/null && echo $NAME \(pid `pgrep $NAME`\) is running...|| echo "$NAME is stoped."
  ;;
  test|-t)
  $DAEMON -t
  ;;
  restart)
  echo -n "Restarting $DESC: $NAME"
  d_stop
  sleep 2
  d_start
  echo "...done!"
  ;;
  *)
  echo "Usage: $SERVICENAME {start|stop|restart|reload|status|check}"
  exit 3
  ;;
  esac
  exit 0

页: [1]
查看完整版本: nginx使用cronolog切割日志安装、部署、应用测试