varnish日志相关

varnish提供了varnishlog和varnishncsa两个工具用于日志处理。varnishlog 用于记录varnish 自身定义的日志格式,varnishncsa 用于记录作类似apache/ncsa定义的日志格式 。两个工具可以说是互相补充,前者便于详细的查看varnish 缓存、接收、发送、是否命中等详细的处理过程,便于对varnish进行性能分析和故障查询;后者便于日常的日志分析和数据挖掘。

一、varnishlog工具详解

varnishlog自带的参数如下:

-a 当把日志写到文件里时,使用附加,而不是覆盖。
-b 只显示 varnishd 和后端服务器的日志。
-C 匹配正则表达式的时候,忽略大小写差异。
-c 只显示 varnishd 和客户端的日志。
-D 以进程方式运行
-d 在启动过程中处理旧的日志,一般情况下,varnishhist 只会在进程写入日志后启动。
-I regex 匹配正则表达式的日志,如果没有使用-i 或者-I,那么所有的日志都会匹配。
-i tag  匹配指定的 tag,如果没有使用-i 或者-I,那么所有的日志都会被匹配。
-k num  只显示开始的 num 个日志记录。
-n 指定 varnish 实例的名字,用来获取日志,如果没有指定,默认使用主机名。
-o 以请求 ID 给日志分组,这个功能没多大用。如果要写到一个文件里使用 -w 选项。
-P file 记录 PID 号的文件
-r file 从一个文件读取日志,而不是从共享内存读取。
-s sum  跳过开始的 num 条日志。
-u 无缓冲的输出。
-V  显示版本,然后退出。
-w file 把日志写到一个文件里代替显示他们,如果不是用-a 参数就会发生覆盖,如果 varnishlog 在写日志时,接收到一个 SIGHUP 信号,他会创建一个新的文件,老的文件可以移走。
-X regex 排除匹配正则表达式的日志。
-x tag  排除匹配 tag 的日志。
如果-o 选项被指定,需要使用正则表达式和tag 来制定需要的日志。 

平时我们用到的最多的几个参数是-a 、-w、-r、-o、-P 。其能用到的tag标签如下:

Backend
BackendClose
BackendOpen
BackendReuse
BackendXID
CLI
ClientAddr
Debug
Error
ExpBan
ExpKill
ExpPick
Hit
HitPass
HttpError
HttpGarbage
Length
ObjHeader
ObjLostHeader
ObjProtocol
ObjRequest
ObjResponse
ObjStatus
ObjURL
ReqEnd
ReqStart
RxHeader
RxLostHeader
RxProtocol
RxRequest
RxResponse
RxStatus
RxURL
SessionClose
SessionOpen
StatAddr
StatSess
TTL
TxHeader
TxLostHeader
TxProtocol
TxRequest
TxResponse
TxStatus
TxURL
VCL_acl
VCL_call
VCL_return
VCL_trace
WorkThread 

下面列举两个常用示例:

下面的命令简单的打印日志到一个文件:
varnishlog -w /var/log/varnish.log
下面这条命令读取一个日志文件,然后显示请求的首页:
varnishlog -r /var/log/varnish.log -c -o RxURL '^/$' 

varnishlog记录的日志格式如下:

13 SessionOpen  c 192.168.10.168 6605 0.0.0.0:80
13 ReqStart  c 192.168.10.168 6605 356267494
13 RxRequest c GET
13 RxURL  c /web/index/css/index_beta30.css
13 RxProtocolc HTTP/1.1
13 RxHeader  c Host: img.361way.com
13 RxHeader  c Connection: keep-alive
13 RxHeader  c Cache-Control: max-age=0
13 RxHeader  c If-Modified-Since: Sat, 16 Feb 2013 05:18:03 GMT
13 RxHeader  c User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
13 RxHeader  c Accept: text/css,*/*;q=0.1
13 RxHeader  c Referer: http://www.361way.com/
13 RxHeader  c Accept-Encoding: gzip,deflate,sdch
13 RxHeader  c Accept-Language: zh-CN,zh;q=0.8
13 RxHeader  c Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
13 VCL_call  c recv lookup
13 VCL_call  c hash
13 Hashc /web/index/css/index_beta30.css
13 Hashc img.361way.com
13 VCL_returnc hash
13 Hit c 356267177
13 VCL_call  c hit deliver
13 VCL_call  c deliver deliver
13 TxProtocolc HTTP/1.1
13 TxStatus  c 304
13 TxResponsec Not Modified
13 TxHeader  c Server: nginx
13 TxHeader  c Content-Type: text/css
13 TxHeader  c Last-Modified: Sat, 16 Feb 2013 05:18:03 GMT
13 TxHeader  c Expires: Sat, 16 Mar 2013 03:39:18 GMT
13 TxHeader  c Cache-Control: max-age=86400
13 TxHeader  c Content-Encoding: gzip
13 TxHeader  c Accept-Ranges: bytes
13 TxHeader  c Date: Fri, 15 Mar 2013 06:00:53 GMT
13 TxHeader  c Age: 8686
13 TxHeader  c Connection: keep-alive
13 TxHeader  c X-Cache: HIT from TEST.com
13 TxHeader  c Via: 361way-CACHE
13 Length c 0
13 ReqEnd c 356267494 1363327253.501475096 1363327253.501555920 0.000028133 0.000038862 0.000041962
13 Debug  c herding

从上面不难看出,其显示的过程是比较详细的。另外需要注意的是varnishlog记录的日志文件只能通过varnishlog工具去读取,不支持cat、more、less、vim等工具查看。

二、varnishncsa 工具详解

varnishncsa 工具读取共享内存的日志,然后以 apache/NCSA 的格式显示出来。其自带参数如下:

-a 当把日志写到文件里时,使用附加,而不是覆盖。
-b 只显示varnishd和后端服务器的日志。
-C 匹配正则表达式的时候,忽略大小写差异。
-c 只显示varnishd和客户端的日志。
-D 以进程方式运行
-d 在启动过程中处理旧的日志,一般情况下,varnishhist只会在进程写入日志后启动。
-f 在日志输出中使用X-Forwarded-ForHTTP头代替client.ip
-I regex 匹配正则表达式的日志,如果没有使用-i或者-I,那么所有的日志都会匹配。
-i tag 匹配指定的tag,如果没有使用-i或者-I,那么所有的日志都会被匹配。
-n 指定varnish实例的名字,用来获取日志,如果没有指定,默认使用主机名。
-P file记录PID号的文件
-r file从一个文件读取日志,而不是从共享内存读取。
-w file把日志写到一个文件里代替显示他们,如果不是用-a参数就会发生覆盖,如果varnishlog在写日志时,接收到一个SIGHUP信号,他会创建一个新的文件,老的文件可以移走。
-X regex 排除匹配正则表达式的日志。
-x tag 排除匹配tag的日志。

常用到的varnishncsa语句如下:

/App/varnish/bin/varnishncsa -a -w /logs/varnish.log &

varnishncsa产生的日志文件可以通过cat、more、less、vim都工具读取或打开,打开后的文件格式和apache日志并没有太大区别,如下:

192.168.10.168 - - [15/Mar/2013:14:14:39 +0800] "GET http://img.361way.com/web/index/img/beta30_head_line.jpg HTTP/1.1" 304 0 "http://www.361way.com/" "Mozilla/5.0 (Windows N
T 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1"

注:varnishncsa输出的日志格式也有可能并不是我们想要的格式,这时可以通过-F参数更改其输出格式。一个现网中经常会碰到的例子是,varnish被置于nginx之后,此时varnish记录的client.IP就会是前端nginx的IP。该问题的解决方法也很简单,在前端nginx上设置X-Forwarder-For头 ,而varnish通过-F对日志整形,获取客户的真实IP 。如下:

varnishncsa -F "%{X-Forwarded-For}i %h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""

varnishncsa默认的日志格式是:

"%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""

三、varnish日志轮询

日志文件过大,会影响到主机IO的读写,对机器的性能也有很大挑战。因此,我们需要按时间对日志进行cut切割。rpm安装的varnish自带了varnishlog、varnishncsa两个脚本(位于/etc/init.d下)用于启动和关闭日志。而对于日志的轮询上,其会在/etc/logrotate.d目录下生成一个varnish文件,用于通过logrotate工具进行日志轮询。

当然源码包安装的也会带有上面三个文件,其在源码包的redhat 目录下。不过不能真接拿来用,需要根据我们的安装目录进行相应的修改,感觉麻烦的也可以通过自定义脚本来实现日志的切割。如下:

#!/bin/bash
stop() {
	pid=`ps -ef | grep "/App/varnish/sbin/varnishd" | grep -v grep | awk '{print $2}'`
	num=`ps -ef | grep "/App/varnish/sbin/varnishd" | grep -v grep | wc -l`
	if [ $num -gt 0 ] ; then
		kill -9 $pid
		echo -e "kill varnish \033[32;40mOK\033[0m"
	fi
}
start() {
	echo "start..."
	/App/varnish/sbin/varnishd -u www -g www -f /App/varnish/etc/varnish/default.vcl -s malloc,25G -a 0.0.0.0:80 -T 127.0.0.1:2000
	num=`ps -ef | grep "/App/varnish/sbin/varnishd" | grep -v grep | wc -l`
	if [ $num -gt 0 ] ; then
		echo -e "start varnish \033[32;40mOK\033[0m"
		ps -ef | grep "/App/varnish/sbin/varnishd" | grep -v grep | awk '{print "pid="$2}'
	else
		echo -e "start varnish \033[31;40FAIL\033[0m"
		stop
	fi
}
stoplog() {
        pid=`ps -ef | grep "/App/varnish/bin/varnishncsa" | grep -v grep | awk '{print $2}'`
        num=`ps -ef | grep "/App/varnish/bin/varnishncsa" | grep -v grep | wc -l`
        if [ $num -gt 0 ] ; then
                kill -9 $pid
                echo -e "kill varnishlog \033[32;40mOK\033[0m"
        fi
}
startlog() {
        echo "startlog..."
	/App/varnish/bin/varnishncsa -a -w /logs/varnish.log &
	sleep 1
        num=`ps -ef | grep "/App/varnish/bin/varnishncsa" | grep -v grep | wc -l`
        if [ $num -gt 0 ] ; then
                echo -e "start varnishlog \033[32;40mOK\033[0m"
                ps -ef | grep "/App/varnish/bin/varnishncsa" | grep -v grep | awk '{print "pid="$2}'
        else
                echo -e "start varnishlog \033[31;40FAIL\033[0m"
		stoplog
        fi
}
cutlog() {
	_yesdate=$(date -d "yesterday" +"%Y-%m-%d")
	stoplog
	mv /logs/varnish.log /logs/${_yesdate}.log
	startlog
}
case $1 in
	"start")
		stop
		start
	;;
	"stop")
		stop
	;;
	"startlog")
		stoplog
		startlog
	;;
	"stoplog")
		stoplog
	;;
	"cutlog")
		cutlog
	;;
	"startall")
		stop
		stoplog
		start
		startlog
	;;
	"stopall")
		stop
		stoplog
	;;
	*)
		echo "$0 start stop startlog stoplog startall stopall cutlog"
	;;
esac
exit 0

该脚本包含了varnish的启动、关闭、varnishnsca的启动、关闭与切割。当然部分内容可能和自己的现网应用有出入的,可以再自行修改。日志cut,可以配合crontab工具定时进行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值