天天看點

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_name  localhost;

       access_log  /data/logs/access_2014021203.log  main  ratio=0.01;

結果統計:

[root@computer logs]# wc -l access_2014021203.log  #按照分鐘切割日志

10 access_2014021203.log

####################################################################

4.2 日志寫入 管道檔案 抽樣測試

       access_log  /data/access_log_pipe  main  ratio=0.01;

[root@computer 20140212]# wc -l access_2014021203.log  

4.3 測試結論;

nginx結合cronolog能夠按照需求靈活的切割日志,nginx之前簡單總結啦一下有三種日志切割方式,詳見:

http://michaelkang.blog.51cto.com/1553154/1359062

cronolog對日志切割算比較靈活的,就是管道檔案不是以服務的方式啟動的,放置在背景比較擔心穩定性。

下面是整理的将cronolog啟動檔案添加到nginx啟動檔案内容:

5.将cronolog啟動檔案嵌入nginx啟動檔案,保證在nginx啟動之前啟動管道檔案。

###########nginx啟動配置檔案内置cronolog啟動

[root@computer ~]# 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/"

#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"

if [ ! -p "$ACCESS_LOG_PIPE" ]; then

/bin/rm "$ACCESS_LOG_PIPE"

mkfifo  "$ACCESS_LOG_PIPE"

}

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 reload"

case "$1" in

 start)

       echo -n "Starting $DESC: $NAME"

       d_start

       echo "."

       ;;

 stop)

       echo -n "Stopping $DESC: $NAME"

       d_stop

 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"

       sleep 2

       echo "...done!"

 *)

         echo "Usage: $SERVICENAME {start|stop|restart|reload|status|check}"

         exit 3

esac

繼續閱讀