Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
VINYLNCSA(1)		    General Commands Manual		  VINYLNCSA(1)

NAME
       vinylncsa - Display Vinyl Cache logs in Apache /	NCSA combined log for-
       mat

SYNOPSIS
       vinylncsa [-a] [-b] [-c]	[-C] [-d] [-D] [-E] [-F	<format>] [-f <format-
       file>]  [-g  <request|vxid>]  [-h]  [-j]	 [-k  <num>]  [-L <limit>] [-n
       <workdir>] [-P <file>] [-Q <file>] [-q  <query>]	 [-r  <filename>]  [-R
       <limit[/duration]>] [-t <seconds|off>] [-V] [-w <filename>]

DESCRIPTION
       The  vinylncsa  utility reads vinyld(1) shared memory logs and presents
       them in the Apache / NCSA "combined" log	format.

       Each log	line produced is based on a single  Request  type  transaction
       gathered	 from  the  shared memory log. The Request transaction is then
       scanned for the relevant	parts in order to output one log line. To fil-
       ter the log lines produced, use the query language to  select  the  ap-
       plicable	transactions. Non-request transactions are ignored.

       The following options are available:

       -a     When  writing  output  to	a file,	append to it rather than over-
	      write it.	This option has	no effect without the -w option.

       -b     Log backend requests. If -c is not specified, then only  backend
	      requests will trigger log	lines.

       -c     Log  client  requests.  This is the default. If -b is specified,
	      then -c is needed	to also	log client requests

       -C     Do all regular expression	and string matching caseless.

       -d     Process log records at the head of the log and exit.

       -D     Daemonize.

       -E     Show ESI requests, implies client	mode.

       -F <format>
	      Set the output log format	string.

       -f <formatfile>
	      Read output format from a	file. Will read	a single line from the
	      specified	file, and use that line	as the format.

       -g <request|vxid>
	      The grouping of the log records. The  default  is	 to  group  by
	      vxid.

       -h     Print program usage and exit

       -j     Make  format-specifier replacements JSON-compatible. When	escap-
	      ing characters, use JSON-style \uXXXX escape  sequences  instead
	      of  C-style  \xXX	sequences. Empty strings will be replaced with
	      "" instead of "-", and empty  integers  will  be	replaced  with
	      null. Use	-F or -f in combination	with -j	to write JSON logs.

       -k <num>
	      Process this number of matching log transactions before exiting.

       -L <limit>
	      Sets  the	upper limit of incomplete transactions kept before the
	      oldest transaction is force completed. A warning record is  syn-
	      thesized when this happens. This setting keeps an	upper bound on
	      the  memory  usage of running queries. Defaults to 1000 transac-
	      tions.

       -n <workdir>
	      Specify the vinyl	working	directory of the  instance  to	attach
	      to.  See vinyld(1) -n option documentation for additional	infor-
	      mation and defaults.

       -P <file>
	      Write the	process' PID to	the specified file.

       -Q <file>
	      Specifies	the file containing the	VSL query to use. When	multi-
	      ple  -Q  or -q options are specified, all	queries	are considered
	      as if the	'or' operator was used to combine them.

       -q <query>
	      Specifies	the VSL	query to use. When multiple -q or  -Q  options
	      are  specified, all queries are considered as if the 'or'	opera-
	      tor was used to combine them.

       -r <filename>
	      Read log in binary file format from this file. The file  can  be
	      created  with  vinyllog  -w filename. If the filename is -, logs
	      are read from the	standard input.	and cannot work	as a daemon.

       -R <limit[/duration]>
	      Restrict the output to the specified limit. Transactions exceed-
	      ing the limit will be suppressed.	The limit is specified as  the
	      maximum  number  of  transactions	 (with	respect	 to the	chosen
	      grouping method) and an optional time period. If no duration  is
	      specified,  a  default  of  s is used. The duration field	can be
	      formatted	as in VCL (e.g.	-R 10/2m) or as	a simple  time	period
	      without  the prefix (e.g.	-R 5/m). When in -g raw	grouping mode,
	      this setting can not be used alongside -i, -I, -x	or -X, and  we
	      advise using -q instead.

       -t <seconds|off>
	      Timeout before returning error on	initial	VSM connection.	If set
	      the  VSM	connection  is retried every 0.5 seconds for this many
	      seconds. If zero the connection is attempted only	once and  will
	      fail  immediately	 if unsuccessful. If set to "off", the connec-
	      tion will	not fail, allowing the utility to start	and  wait  in-
	      definitely  for  the  vinyld  instance to	appear.	 Defaults to 5
	      seconds.

       -V     Print version information	and exit.

       -w <filename>
	      Redirect output to file. The file	will be	overwritten unless the
	      -a option	was specified. If the application receives a SIGHUP in
	      daemon mode the file will	be reopened allowing the old one to be
	      rotated away. This option	is required  when  running  in	daemon
	      mode.  If	 the  filename	is -, vinylncsa	writes to the standard
	      output and cannot	work as	a daemon.

       --optstring
	      Print the	optstring parameter to getopt(3) to help writing wrap-
	      per scripts.

MODES
       The default mode	of vinylncsa is	"client	mode".	In this	mode, the  log
       will  be	 similar  to what a web	server would produce in	the absence of
       Vinyl Cache.  Client mode can be	explicitly selected by using -c.

       If the -b switch	is  specified,	vinylncsa  will	 operate  in  "backend
       mode".  In this mode, requests generated	by Vinyl Cache to the backends
       will  be	logged.	 Unless	-c is also specified, client requests received
       by vinyld will be ignored.

       When running vinylncsa in both backend and client mode, it is  strongly
       advised	to  include the	format specifier %{Vinyl:side}x	to distinguish
       between backend and client requests.

       Client requests that results in a pipe (ie. return(pipe)	in vcl),  will
       not  generate  logging  in backend mode.	This is	because	Vinyl Cache is
       not generating requests,	but blindly passes on  bytes  in  both	direc-
       tions.	However,  a  vinylncsa instance	running	in normal mode can see
       this case by using the  formatter  %{Vinyl:handling}x,  which  will  be
       'pipe'.

       In  backend mode, some of the fields in the format string get different
       meanings.  Most notably,	the byte counting formatters (%b, %I, %O) con-
       siders vinyld to	be the client.

       It is possible to keep two vinylncsa instances running, one in  backend
       mode, and one in	client mode, logging to	different files.

FORMAT
       Specify	the  log  format to use. If no format is specified the default
       log format is used:

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

       Escape sequences	\n and \t are supported.

       Supported formatters are:

       %b     In client	mode, size of response in bytes, excluding HTTP	 head-
	      ers.   In	 backend  mode,	 the number of bytes received from the
	      backend, excluding HTTP headers.	In  CLF	 format,  i.e.	a  '-'
	      rather than a 0 when no bytes are	sent.

       %D     In  client  mode,	 time taken to serve the request, in microsec-
	      onds.  In	backend	mode, time from	the request was	 sent  to  the
	      entire body had been received. This is equivalent	to %{us}T.

       %H     The request protocol. Defaults to	HTTP/1.0 if not	known.

       %h     Remote host. Defaults to '-' if not known.  In backend mode this
	      is the IP	of the backend server.

       %I     In  client  mode,	 total bytes received from client.  In backend
	      mode, total bytes	sent to	the backend.

       %{X[:first|last]}i
	      The contents of request header X before any VCL  processing  for
	      client  side,  and before	vcl_backend_response for backend side.
	      If the header appears multiple times in  a  single  transaction,
	      the last occurrence is used in backend mode and the first	one in
	      client mode.

	      If  an  optional :first or :last is used,	VCL processing will be
	      taken into account and the matching rule will be first match  or
	      last  match  respectively.  When using :last, unset headers will
	      still be captured.

       %l     Remote logname. Always '-'.

       %m     Request method. Defaults to '-' if not known.

       %{X[:first|last]}o
	      The contents of response header  X,  as  it  was	delivered  for
	      client  mode, and	before VCL processing for backend mode.	If the
	      header appears multiple times in a single	transaction, the  last
	      occurrence  is  used in client mode and the first	one in backend
	      mode.

	      If an optional :first or :last is	used, VCL processing  will  be
	      taken  into account and the matching rule	will be	first match or
	      last match respectively.	When using :last, unset	 headers  will
	      still be captured.

       %O     In  client  mode,	 total bytes sent to client.  In backend mode,
	      total bytes received from	the backend.

       %q     The query	string.	Defaults to an empty string if not present.

       %r     The first	line of	the request. Synthesized from other fields, so
	      it may not be the	request	verbatim. See the NOTES	section.

       %s     Status sent to the client.  In  backend  mode,  status  received
	      from the backend.

       %t     In  client  mode,	 time  when  the request was received, in HTTP
	      date/time	format.	 In backend mode, time when  the  request  was
	      sent.

       %{X}t  In  client mode, time when the request was received, in the for-
	      mat specified by X.  In backend mode, time when the request  was
	      sent.   The  time	 specification format is the same as for strf-
	      time(3) with these extensions:

	      	%{sec}:	number of seconds since	the Epoch

	      	%{msec}: number	of milliseconds	since the Epoch

	      	%{usec}: number	of milliseconds	since the Epoch

	      	%{msec_frac}: millisecond fraction

	      	%{usec_frac}: microsecond fraction

	      The extensions cannot be combined	with each other	or strftime(3)
	      in the same specification. Use multiple %{X}t specifications in-
	      stead.

       %T     In client	mode, time taken to serve the request, in seconds.  In
	      backend mode, time from the request was sent to the entire  body
	      had been received. This is equivalent to %{s}T.

       %{X}T  In  client  mode,	time taken to serve the	request, in the	format
	      specified	by X.  In backend mode,	time from the request was sent
	      to the entire body had been  received.  The  time	 specification
	      format  can  be  one  of the following: s	(same as %T), ms or us
	      (same as %D).

       %U     The request URL without the query	string.	Defaults to '-'	if not
	      known.

       %u     Remote user from auth.

       %{X}x  Extended variables.  Supported variables are:

	      Vinyl:default_format
		     The log format used when neither -f nor  -F  options  are
		     specified.	  Useful  for  appending/prepending with other
		     formatters.

	      Vinyl:time_firstbyte
		     Time from when the	request	processing  starts  until  the
		     first  byte is sent to the	client,	in seconds.  For back-
		     end mode: Time from the request was sent to  the  backend
		     to	the entire header had been received.

	      Vinyl:hitmiss
		     In	 client	 mode, one of the 'hit'	or 'miss' strings, de-
		     pending on	whether	the request was	a cache	hit  or	 miss.
		     Pipe,  pass  and  synth are considered misses. In backend
		     mode, this	field is blank.

	      Vinyl:handling
		     In	client mode, one of the	'hit',	'hitmiss',  'hitpass',
		     'miss',  'pass', 'pipe' or	'synth'	strings	indicating how
		     the request was handled. In backend mode, this  field  is
		     blank.

	      Vinyl:side
		     Backend  or  client  side.	One of two values, 'b' or 'c',
		     depending on where	the request was	made. In pure  backend
		     or	client mode, this field	will be	constant.

	      Vinyl:vxid
		     The VXID of the vinyld transaction.

	      VCL_Log:key
		     The value set by std.log("key:value") in VCL.

	      VSL:tag:record-prefix[field]
		     The  value	of the VSL entry for the given tag-record pre-
		     fix-field combination. Tag	is mandatory, the other	compo-
		     nents are optional.

		     The record	prefix will limit the matches to those records
		     that have this prefix as the first	 part  of  the	record
		     content followed by a colon.

		     The  field	 will,	if  present, treat the log record as a
		     white space separated list	of fields, and	only  the  nth
		     part  of the record will be matched against. Fields start
		     counting at 1 and run up to 255.

		     Defaults to '-' when the tag is not seen, the record pre-
		     fix does not match	or the field is	out of	bounds.	 If  a
		     tag  appears  multiple times in a single transaction, the
		     first occurrence is used.

SIGNALS
        SIGHUP

	 Rotate	the log	file (see -w option) in	daemon mode,  abort  the  loop
	 and die gracefully when running in the	foreground.

        SIGUSR1

	 Flush any outstanding transactions.

NOTES
       The  %r formatter is equivalent to %m http://%{Host}i%U%q %H. This dif-
       fers from the Apache HTTP Server	%r behavior, equivalent	to %m %U%q %H.

       Note that request fields	are collected on a first match basis in	client
       mode and	last match basis in backend mode. Similarly,  response	fields
       are collected on	a first	match basis in backend mode and	last match ba-
       sis in client mode.

       In  other  words, request headers are logged as they were received from
       the client and as they were sent	to the backend,	while response headers
       are logged as they were sent to the client and as  they	were  received
       from the	backend.

       Furthermore, these rules	also apply to items that appear	multiple times
       in  a transaction. For example, if a header appears multiple times in a
       client request, the first occurrence is logged in client	mode, while in
       backend mode the	last occurrence	is logged.

       Prior to	7.7, formats %{X}i and %{X}o used  to  include	header	fields
       populated  from	VCL.  Consider %{VCL_Log:key}x instead to capture data
       from VCL	transactions.

EXAMPLE
       Log the second field of the Begin record, corresponding to the VXID  of
       the parent transaction:

	  vinylncsa -F "%{VSL:Begin[2]}x"

       Log the entire Timestamp	record associated with the processing length:

	  vinylncsa -F "%{VSL:Timestamp:Process}x"

       Log  in JSON, using the -j flag to ensure that the output is valid JSON
       for all inputs:

	  vinylncsa -j -F '{"size": %b,	"time":	"%t", "ua": "%{User-Agent}i"}'

       Log the first and last values of	a request header that is modified mul-
       tiple times in VCL:
	  vinylncsa -F "%{x-custom-header:first}i %{x-custom-header:last}i"

SEE ALSO
       vinyld(1) vinyllog(1) vinylstat(1) vsl-query(7) vsl(7)

HISTORY
       The vinylncsa utility was developed by Poul-Henning Kamp	in cooperation
       with Verdens Gang AS and	Redpill-Linpro.	This manual page was initially
       written by Dag-Erling Smrgrav < <des@des.no> >, and  later  updated  by
       Martin Blix Grydeland and Pl Hermunn Johansen.

COPYRIGHT
       This document is	licensed under the same	licence	as Vinly Cache itself.
       See LICENCE for details.

        Copyright (c) 2006 Verdens Gang AS

        Copyright (c) 2006-2016 Varnish Software AS

								  VINYLNCSA(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=vinylncsa&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help