一.varnishlog
功能:显示varnish日志信息;
语法:varnishlog [-a] [-b] [-B] [-c] [-C] [-d] [-D] [-g ] [-h] [-i taglist] [-I <[taglist:]regex>] [-k num] [-L limit] [-n name] [-N filename] [-P file] [-q query] [-r filename] [-T seconds] [-v] [-V] [-w filename] [-x taglist] [-X <[taglist:]regex>]
参数:
-a:当把日志写到文件里时,使用附加方式而不是覆盖;
-b:只显示varnishd和后端服务器的日志;
-B:指定-r filename时表示从filename中读取二进制格式数据,-w filename选项表示将二进制数据输入到filename中
-c:只显示varnishd和客户端的日志;
-C:做正则表达式和字符匹配时不区分大小写;
-d:在日志的首部开始处理日志记录而不是日志结尾;
-D:以守护进程方式运行;
-g :以哪种方式分组日志记录。默认为vxid;
-h:打印varnishlog用法并退出;
-i taglist:在日志输出中指定日志记录的tags。taglist是一个由逗号分隔的tag列表。可以指定多个-i选项。如果一个tag被选择,那么其它tag都会被排除;
-I <[taglist:]regex>:支持正则表达式匹配。仅会输出taglist和正则表达式匹配的内容,如果没有taglist会应用到所有的tag。如果一个tag被选择,那么其他的tag都会被排除;
-k num:在退出前,仅处理num个匹配的日志记录;
-L limit:在最旧的事务处理被强制完成之前,设置保持不完整的事务处理的上限。在发生这种情况时,会合成一个警告。这个设置保持了
运行查询时内存使用的上限,默认为1000个事务处理;
-n name:指定varnish实例用来获取日志的名称,如果未指定-n参数,那么就使用主机名;
-N filename:指定过时VSM实例的文件名。当使用这个参数时,放弃检查功能会被禁用;
-P file:将进程的PID写入到指定文件中;
-q query:使用指定的VSL query;
-r filename:从该文件中读取二进制格式的日志。该文件可使用varnishlog -B -w filename来创建;
-T seconds:设置事务处理的超时时间。它定义了在一个Begintag和Endtag之间经过的最大时间。如果这个超时时间过期了,就会合成一
个警告记录且该事务处理被强制完成。默认超时时间为120秒;
-v Use:详细输出日志记录并在每一日志行上给出VXID。如果不设置该参数,VXID将只会在事务处理首部给出;
-V:打印版本信息并退出;
-w filename:重定向输出到指定文件,如果-a参数未指定那么该文件将会被覆盖重写。如果varnish收到一个SIGHUP信号,那么该文件会
被重新打开,且将旧的文件移开(日志回滚功能);
-x taglist:在日志输出中,不包含符合以下tags的日志记录。可使用多个-x参数;
-X <[taglist:]regex>:不包含正则表达式匹配的内容;不会输出taglist和正则表达式匹配的日志记录。如果taglist未给出会应用到所有的
tag;
接受的信号类型:
SIGHUP:回滚日志文件;
SIGUSR1:刷新任何尚未解决的事务;
个人翻译,难免有误,请参考官方文档:
二.varnishhist
功能:显示varnish请求的柱状图
语法:varnishhist [-C] [-d] [-g ] [-h] [-L limit] [-n name] [-N filename] [-p period] [-P ] [-q query] [-r filename] [-T seconds] [-V]
描述:
varnishhist会读取共享内存日志并提供一个不断更新的柱状图来显示最后N个处理请求的分布。N和垂直刻度的值在左下角显示,水平刻度的值对数。匹配记录标记有管道符 | 而未匹配记录标记有hash符 #;
参数:
-C:做正则表达式和字符匹配时不区分大小写;
-d:在日志的首部开始处理日志记录而不是日志结尾;
-g :日志记录的分组,默认分组为vxid;
-h:打印varnishhist用法并退出;
-L limit:在最旧的事务处理被强制完成之前,设置保持不完整的事务处理的上限。在发生这种情况时,会合成一个警告。这个设置保持了
运行查询时内存使用的上限,默认为1000个事务处理;
-n name:指定了varnish实例用来获取日志的名称,如果未指定-n参数,那么就使用主机名;
-N filename:指定过时VSM实例的文件名。当使用这个参数时,放弃检查功能会被禁用;
-p period:指定屏幕刷新的秒数,默认为1秒,可以在运行时通过[1-9]键来更改;
-P :要么指定size或responsetime配置文件,要么创建一个新的。定义我们将要寻找的tag值
和感兴趣的字段数的值。min和max是该柱状图的边界;
-q query:使用指定的VSL query;
-r filename:从该文件中读取二进制格式的日志。该文件可使用varnishlog -B -w filename来创建;
-T seconds:设置事务处理的超时时间。它定义了在一个Begin tag和End tag之间经过的最大时间。如果这个超时时间过期了就会合成一个
警告记录且该事务处理被强制完成。默认超时时间为120秒;
-V:打印版本信息并退出;
官方文档:
三.varnishncsa
功能:以apache/NCSA的格式显示varnish日志
语法:
varnishncsa [-a] [-C] [-d] [-D] [-F format] [-g ] [-h] [-n name] [-N filename] [-P file] [-q query] [-V] [-w filename]
描述:varnishncsa会读取varnishd共享内存日志并以apache/NCSA组合日志格式显示出来。每一行提供的日志都是基于从共享内存日志中收集的一个单独的请求类型事务。为了输出一个日志行,该请求事务会被相关部分进行数据核实。过滤产生的日志行,使用适当的查询语言去选择合适的事务。非请求事务被忽略;
参数:
-a:当把日志写到文件里时,使用附加方式而不是覆盖;
-C:做正则表达式和字符匹配时不区分大小写;
-d:在日志的首部开始处理日志记录而不是日志结尾;
-D:以守护进程方式运行;
-F format:设置输出日志格式字符串;
-g :日志记录的分组,默认分组为vxid;
-h:打印varnishlog用法并退出;
-n name:指定varnish实例用来获取日志的名称,如果未指定-n参数,那么就使用主机名;
-N filename:指定过时VSM实例的文件名。当使用这个参数时,放弃检查功能会被禁用;
-P file:将进程的PID写入到指定文件中;
-q query:使用指定的VSL;
-V:打印版本信息并退出;
-w filename:重定向输出到指定文件,如果-a参数未指定那么该文件将会被覆盖重写。如果varnish收到一个SIGHUP信号,那么该文件会
被重新打开,且将旧的文件移开(即日志回滚功能);
格式FORMAT:
指定可以使用的日志格式,如果未指定那么就使用默认的格式;
默认的日志格式为:
%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"
支持转义字符\n和\t;
支持的格式标志符有:
%b:response的字节大小,不包括HTTP报头。当没有字节被发送时,CLF格式中是 - 而不是0;
%D:处理请求的实际时间,单位为微秒;
%H:请求协议。如果不知道的话默认为HTTP/1.0;
%h:远程主机。如果不知道的话默认为 - ;
%I:从客户端接收的总字节大小;
%{X}i:请求报头X的内容;
%l:远程登录用户(总是为 - );
%m:请求方法;如果不知道的话默认为 -
%{X}o:响应报头X的内容;
%O:发送的总字节大小;
%q:查询字符串,如果没有查询字符串存在,使用空字符串;
%r:请求的第一行。从其他字段合成,所以可能不会原样呈现请求;
%s:发送到客户端的状态;
%t:请求被接受时的时间(HTTP date/time格式);
%{X}t:请求被接受时的时间(以指定的X格式)。时间规范格式和strftime一样;
%T:处理请求的实际时间,单位为秒;
%U:不带有任何查询字符串的URL请求。如果不知道的话默认为 - ;
%u:远程认证用户;
%{X}x:扩展变量。支持的变量有:
Varnish:time_firstbyte
从请求开始处理到第一个字节被发送到客户端的时间
Varnish:hitmiss
请求是否命中缓存。pipe和pass被看作是未命中的;
Varnish:handling
请求是如何处理的,它是缓存命中 未命中 pass pipe还是error的;
VCL_Log:key
在VCL中由std.log("key:value")设置值;
接受的信号类型:
SIGHUP:回滚日志文件(查看-w参数);
SIGUSR1:刷新任何尚未解决的事务;
官方文档:
四.varnishstat
功能:varnish 缓存统计
语法:varnishstat [-1] [-x] [-j] [-f field_list] [-l] [-n varnish_name] [-N filename] [-V] [-w delay]
描述:varnishstat程序会显示运行的varnishd实例的统计信息;
参数:
-1:不是呈现一个连续不断更新的显示,而是打印统计信息到标准输出上;
-f field_list:Field inclusion glob。Field glob包含有三部分,typeident和name且ident为可选项。每个部分都可以在结尾包含一个*字符来
匹配前缀。使用反斜线来转义字符。如果该参数以 ^号开始,那么会应用到 作为排除功能的glob。可以指定多个-f参数,如果指定多个-f
参数,它们将会按顺序应用;
-l:列出可用的field(通过-f参数来使用该field);
-n:指定varnish实例用来获取日志的名称,如果未指定-n参数,那么就使用主机名;
-N:指定过时VSM实例的文件名。当使用这个参数时,放弃检查功能会被禁用;
-V:打印版本信息并退出;
-w delay:更新时的等待延迟时间。默认为1。也可使用-1 -x或-j来重复输出;
-x:结果以XML方式显示;
-j:结果以JSON方式显示;
CURSES MODE:
当没有-1 -x或-j参数给出时,应用程序会启动curses mode,它会显示计数器值的连续更新的视图,以及其描述;
顶部区域显示了程序正常运行时间信息;
中心区域显示了一系列计数器的值;
底部区域显示了当前选择的计数器的描述;
列Columns(从左到右):
Name:计数器名称;
Current:计数器的当前值;
Change:最后一个更新间隔的每秒平均变化;
Average:varnish daemon运行时计数器的平均值,或者该计数器无法被平均时的周期;
Avg_10:在最后10个更新间隔的移动平均值;
Avg_100:在最后100个更新间隔的移动平均值;
Avg_1000:在最后1000个更新间隔的移动平均值;
键位绑定Key bindings(控制交互显示):
:操纵计数器上一行;
:操纵计数器下一行;
or :操纵计数器上一页;
or :操纵计数器下一页;
:在显示和隐藏隐藏计数器之间切换。隐藏计数器是在整个varnishstat运行期间以之为0的。默认隐藏隐藏计数器
:跳到计数器列表顶部;
:跳到计数器列表底部;
:循环通过详细级别,默认仅显示计数器的信息;
:退出;
:此时抽样采集(Sample now);
XML Output:
当使用-x参数时,输出为:
FIELD TYPE
FIELD IDENT
FIELD NAME
FIELD VALUE
FIELD FORMAT
FIELD DESCRIPTION
[..]
JSON OUTPUT:
使用-j参数时输出格式为:
{
"timestamp": "YYYY-MM-DDTHH:mm:SS",
"FIELD NAME": {"type": "FIELD TYPE", "ident": "FIELD IDENT", "value": FIELD VALUE, "flag": "FIELD FORMAT", "description": "FIELD DESCRIPTION"},
[..]
}
type和ident是可选的。时间戳是varnishstat产生report时的时间。使用-1 -x或-j重复输出时,在每一个输出块之间会有一个
空行(\n);
官方文档:
五.VSL(Varnish Shared Memory Logging)
VSL概述
它描述了所有Varnish shared memory logging tags的格式和内容,这些tags被由varnish支持的日志工具varnishlog, varnishtop等使用;
其官方文档:
六.日志管理
通过官方推荐的rpm方式安装的varnish有日志命令varnishlog和varnishncsa的脚本,但默认这些脚本开机并不会自动启动,即默认不记录日志。
1.varnishlog的使用
1.1启动varnishlog:
出现错误:
[root@localhost ~]# service varnishlog start
Starting varnish logging daemon: Can't open log - retrying for 5 seconds
Can't open VSM file (Cannot open /var/lib/varnish/localhost.localdomain/_.vsm: No such file or directory
)[FAILED]
解决办法:
先查看varnishd进程的PID号:
[root@localhost ~]# netstat -untlp| grep varnish 或者 ps aux | grep varnish
tcp 0 0 127.0.0.1:6082 0.0.0.0:* LISTEN 25605/varnishd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 25605/varnishd
tcp 0 0 :::80 :::* LISTEN 25605/varnishd
然后使用lsof命令查看_vsm的实际路径:
[root@localhost ~]# lsof -p 25605 | grep vsm
varnishd 25605 varnish mem REG 8,2 84934656 782103 /var/lib/varnish/varnish/_.vsm
最后创建对应的目录和链接并重新启动varnishlog:
[root@localhost ~]# mkdir -pv /var/lib/varnish/localhost.localdomain/ #localhost.localdomain为主机名;
[root@localhost ~]# ln -s /var/lib/varnish/varnish/_.vsm /var/lib/varnish/localhost.localdomain/_.vsm
[root@localhost ~]# service varnishlog start
Starting varnish logging daemon: [ OK ]
1.2对varnish执行一些操作后就会显示操作日志
[root@localhost ~]# curl
This is a backend server 192.168.85.156
[root@localhost ~]# varnishlog -r /var/log/varnish/varnish.log
* << Request >> 65665
- Begin req 65664 rxreq
- Timestamp Start: 1461231430.441955 0.000000 0.000000
- Timestamp Req: 1461231430.441955 0.000000 0.000000
- ReqStart 192.168.85.129 34407
- ReqMethod PURGE
- ReqURL /index.html
- ReqProtocol HTTP/1.1
- ReqHeader User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
- ReqHeader Host: 192.168.85.129
- ReqHeader Accept: */*
- ReqHeader X-Forwarded-For: 192.168.85.129
- VCL_call RECV
- VCL_acl MATCH purges "192.168.85.0"/24
- VCL_return purge
- VCL_call HASH
- VCL_return lookup
- VCL_call PURGE
- VCL_return synth
- Timestamp Process: 1461231430.442978 0.001023 0.001023
- RespHeader Date: Thu, 21 Apr 2016 09:37:10 GMT
- RespHeader Server: Varnish
- RespHeader X-Varnish: 65665
- RespProtocol HTTP/1.1
- RespStatus 200
- RespReason OK
- RespReason Purged
- VCL_call SYNTH
- RespHeader Content-Type: text/html; charset=utf-8
- RespHeader Retry-After: 5
- VCL_return deliver
- RespHeader Content-Length: 240
- Storage malloc Transient
- RespHeader Accept-Ranges: bytes
- Debug "RES_MODE 2"
- RespHeader Connection: keep-alive
- Timestamp Resp: 1461231430.443884 0.001929 0.000905
- ReqAcct 189 0 189 218 240 458
- End
上面的是默认使用的日志文件,也可以使用varnishlog -a -w log_path来指定日志存放位置。但是要注意的是,读取日志时,要使用varnishlog -r log_path命令,使用其他如cat more等命令时会出现乱码。
2.varnishncsa的使用
2.1启动服务
[root@localhost ~]# service varnishncsa start
Starting varnish ncsa logging daemon: [ OK ]
2.2指定日志输出位置
[root@localhost ~]# varnishncsa -a -w /var/log/varnish/varnish_ncsa
2.3执行varnish操作并查看日志
[root@localhost ~]# curl
This is a backend server 192.168.85.156
[root@localhost ~]# cat /var/log/varnish/varnish_ncsa
192.168.85.129 - - [21/Apr/2016:02:53:15 -0700] "GET HTTP/1.1" 200 49 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
varnishncsa和varnishlog不同,它支持使用cat命令来查看日志。而且,如果不喜欢这种默认的日志输出格式,我们还可以自己定义;
2.4定义日志输出格式
[root@localhost ~]# varnishncsa -a -w /var/log/varnish/varnish_ncsa -F "%t %T %h %l %s %H %m "%{Varnish:hitmiss}x""
[root@localhost ~]# curl
node2.a.com
[root@localhost ~]# cat /var/log/varnish/varnish_ncsa
192.168.85.129 - - [21/Apr/2016:02:53:15 -0700] "GET HTTP/1.1" 200 49 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
[21/Apr/2016:03:10:20 -0700] 0 192.168.85.129 - 200 HTTP/1.1 GET hit
[21/Apr/2016:03:10:44 -0700] 0 192.168.85.129 - 200 HTTP/1.1 GET hit
3.varnishstat和varnishhist的使用
因为varnishstat和varnishhist命是统计信息命令所以不需要启动。用法也很简单,结合上述命令的使用方法直接使用即可。
可参考文章(3版本的):
阅读(4150) | 评论(0) | 转发(0) |