varnishncsa

在Apache中展示varnish日志/NCSA组合日志格式化

概要

varnishncsa [-a] [-b] [-c] [-C] [-d] [-D] [-F format] [-f formatfile] [-g <request|vxid>] [-h] [-n name] [-N filename] [-P file] [-q query] [-r filename] [-t <seconds|off>] [-V] [-w filename]

描述

varnishncsa可以读取varnishd共享内存日志,并将它们按照apache/NCSA组合的格式进行格式化。

产生的每个日志行都是基于共享内存日志中单个请求类型收集而来的。该请求会扫描相关部分,以输出日志行。如果要筛选产生的日志行,可以使用查询语言来做适当的处理。非请求的都会被忽略。

下面的参数都是可用的:

  • -a

当将输出写入文件时,追加内容而不是覆盖它。

  • -b

记录后端请求。如果没有指定-c参数,则仅仅会记录后端请求日志。

  • -c

记录客户端请求,这个是默认的。如果指定了-b参数,则-c参数也会记录客户端请求。

  • -C

所有正则表达式和字符串是否匹配

  • -d

开始处理头部日志而不是尾部记录。

  • -D

守护进程模式

  • -F format

设置日志输出格式化字符串

  • -f formatfile

从一个文件读取输出格式化字符串。将会从指定文件中读取一行,并使用这一行来进行格式化

  • -g <request|vxid>

日志记录分组,默认是按照vxid。

  • -h

打印程序使用状况,并退出

  • -n name

指定varnish实例名字,用来获取日志。如果没有指定-n参数,那么会使用host name。

  • -N filename

指定一个旧的VSM实例的文件名。当使用此选项时,abandonment检查是被禁用的。

  • -P file

指定记录进程PID的文件。

  • -q query

指定要使用的VSL查询字符串

  • -r filename

从这个文件中以二进制形式读取日志。这个文件可以通过varnishlog -w filename来创建。

  • -t <seconds|off>

初始化VSM连接返回错误之前的超时时间。如果设置了VSM连接将会每隔一段时间就重试一次。如果设置为0,连接将会只尝试一次,如果失败就立即失效。如果设置为off,连接将不会失败,而是允许工具启动并等待varnish实例出现。默认为5妙。

  • -V

打印版本信息并退出。

  • -w filename

重定向输出到文件。这个会将其覆盖除非使用了-a参数。如果在守护进程模式下程序收到SIGHUP,那么文件会被重新打开,并允许旧数据回转。该文件可以被varnishlog或者其他工具使用-r选项读取,除非指定了-A选项。在守护进程模式下运行时,这个选项是必需的。

模式

默认的模式是“client mode”(客户端模式)。在这种模式下,日志将会和web服务器类似。客户端模式可以通过使用-c参数来使用。

如果指定了-b参数,varnishncsa将会使用"backend mode"(后端模式)。在这种模式下,通过varnish生成的后端请求都会被记录。除非指定了-c参数,客户端请求接收到之后也会被忽略。

当运行varnishncsa同时使用客户端模式和后端模式,强烈建议你包含格式化说明符%{Varnish:side}来区分是后端请求还是客户端请求。

在管道中(例如在vcl中的return(pipe))产生的客户端请求,将不会再后端模式中被记录。这是因为varnish不产生请求,而是以为的在两个方向中传递字节。然而,在正常模式下,可以通过%{Varnish:handling}x来看到这种情况。

在后台模式下,一些字段在格式化字符串中有不同的意义。最需要注意的是,字节计数格式化(%b, %I, %O)会认为是客户端。

当然也有可能是使用了两个varnishncsa的实例,一个使用后端模式,一个使用客户端模式,记录到两个不同的文件。

格式化

指定使用的日志格式。如果没有指定格式,则使用默认的日志格式。

默认的日志格式为:

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

支持\n和\t转义字符。

支持的格式化方式如下:

  • %b

在客户端模式下,以字节为单位统计响应的大小,不包含HTTP头。在后端模式下,是从后端接收到的字节数,不包含http头。在CLF格式中,当没有数据传输时时一个"-"而不是0.

  • %D

在客户端模式下,是服务器请求的时间,以微妙为单位。在后端模式下是从请求发送到全部被接收的时间。

  • %H

请求的协议。默认是HTTP/1.0。

  • %h

远程主机。如果没有默认是“-”。在后端模式下是后端服务器的IP地址。

  • %I

在客户端模式下,是从客户单接收的总字节数。在后端模式下,是发送到后端的总字节数。

  • %{X}i

请求头X的内容。

  • %l

远程登录名字(总是“-”)

  • %m

请求方式,如果不知道的话默认是“-”

  • %{X}o

响应头X的内容。

  • %O

在客户端模式下,是发送到客户端的总字节数。在后端模式下,是从后端接收到的总字节数。

  • %q

查询字符串。如果没有,则是空字符串。

  • %r

请求的第一行,是从其他字段组合而成,因此它可能不是逐字的。

  • %s

发送到客户端的状态。在后端模式下,是从后端接收到的状态。

  • %t

在客户端模式下,是当请求接收到的时间,格式为HTTP date/time格式时间。在后端模式下,则是请求发送的时间。

  • %{X}t

在客户端模式下,是请求收到的时间。在后端模式下,是请求发送的时间。时间的格式和strftime相同。

  • %T

在客户端模式下,是服务请求话费的时间,单位秒。在后端模式下,则是从请求发送到被接收花费的时间。

  • %U

不包含查询字符串的url。如果没有则为“-”

  • %u

认证的远程用户

  • %{X}x

扩展变量,支持的变量有:

  1. Varnish:time_firstbyte:从请求处理开始到第一字节发送到客户端的时间。对于后端模式,是从请求发起到后端接收到整个头部的时间。
  2. Varnish:hitmiss:请求是否命中缓存。pipe和pass都会被认为未命中。
  3. Varnish:handling:请求如何被处理,无论请求缓存是hit、miss、pass、pipe、synth。
  4. Varnish:side:后端或者客户端。两个中的某一个值,“b”或者“c”(不带引号),这取决于发出请求的地方。在纯后端模式或者客户端模式,这个是不变的。
  5. Varnish:vxid:varnish处理中的VXID
  6. VCL_Log:key:在VCL中通过std.log("key:value")来设置输出值。
  7. VSL:tag or VSL:tag[field]:给定标签的varnishlog项的值。如果字段指定了,则仅仅展示指定的部分。当key没见过时则默认为“-”。若一个key在同一事务中出现多次,则只会使用第一次出现的。例如%{VSL:Begin[2]}x将会打印开始标记的第二个字段,它是父事务的VXID。

信号

  • SIGHUP

反转日志

  • SIGUSR1

刷新所有未完成的事务

results matching ""

    No results matching ""