我們使用的是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