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

FreeBSD Manual Pages

  
 
  

home | help
tenshi(8)		    System Manager's Manual		     tenshi(8)

NAME
       tenshi -	Log Monitoring and Reporting tool

SYNOPSIS
       tenshi  [  -c <conf file> ] [ -C	] [ -d <debug level> ] [ -f ] [	-h ] [
       -p ] [ -P <pid file> ]

DESCRIPTION
       tenshi is a log monitoring program, designed to watch one or  more  log
       files for lines matching	user defined regular expressions and report on
       the  matches. The regular expressions are assigned to queues which have
       an alert	interval and a list of mail recipients.

       Queues can be set to send a notification	as soon	as there is a log line
       assigned	to it, or to send periodic reports.

       Additionally, uninteresting fields in the log lines (such as  PID  num-
       bers) can be masked with	the standard regular expression	grouping oper-
       ators  (	 ). This allows	cleaner	and more readable reports. All reports
       are separated by	hostname and all messages are condensed	when possible.

       The program reads a configuration file (tenshi.conf) and	then  forks  a
       deamon for monitoring the specified log files.

OPTIONS

       -c <conf	file>
	      Read  configuration  from	 file.	The  default file is /etc/ten-
	      shi/tenshi.conf .

       -C     Perform a	syntax check of	the configuration  file.  The  program
	      exits  after parsing the configuration with either a return code
	      of 0 or an error.

       -d <debug level>
	      Enable debug messages. Default level is 1	if none	is  specified,
	      level 2 enables SMTP connection debug messages. In this mode the
	      main process remains in the foreground.

       -f     Enable  foreground  mode.	In this	mode the main process operates
	      normally but remains in the foreground, this is needed for  some
	      process supervisors.

       -p     Enable  profiling	mode. In this mode the main process remains in
	      the foreground and expects log lines to be fed to	 standard  in.
	      When  it receives	an EOF it will stop processing.	No alerts will
	      be sent in this mode, it is used solely for  measuring  tenshi's
	      line  processing	speed.	For  example: time $(cat /var/log/mes-
	      sages|tenshi -p >	/dev/null)

       -P <pid file>
	      Define the file containing the PID of the	 process,  this	 over-
	      rides any	'pidfile' option present in the	configuration file.

CONFIGURATION FILE
       All directives are shown	with the standard default value	where applica-
       ble, if omitted the default value will be used.

       EXTERNAL	CONFIGURATION FILES

       All  configuration  directives  can  be optionally split	into different
       configuration files and then read with the two following	statements.

       include <configuration file>
	      Parse the	specified configuration	file.

       includedir <directory>
	      Parse all	files inside <directory>. The files will be parsed  in
	      alphabetical  order,  keep in mind that regexps order matters so
	      includedir should	be used	carefully, see REGEXP DEFINITIONS  for
	      details.

       STATIC OPTIONS

       These  options will be set the first time tenshi	reads its config file.
       They cannot be changed by re-reading the	config file. If	you change one
       of these	options	and HUP	tenshi it will die. You	have been warned.

       set uid tenshi
	      Specify the effective user ID of	the  process  when  in	daemon
	      mode.  The  user must be able to read the	selected log files and
	      the configuration	file. Using a privileged user  is  discouraged
	      as it is not usually necessary (log files	permissions can	be set
	      accordingly with most syslog implementations).

       set gid tenshi
	      Specify  the  effective  group  ID of the	process	when in	daemon
	      mode.

       set pidfile /var/run/tenshi.pid
	      The  file	 containing  the  PID  of  the	process,  useful   for
	      start/stop scripts.

       set logfile <log	file path>
	      A	 log  file to monitor, this may	be specified multiple times to
	      watch more than one log file. Depending on your tail implementa-
	      tion you might need to use the tail_multiple setting for	multi-
	      ple  files to work. This mode can	be used	along with fifo	, lis-
	      ten and redisqueue settings.

       set tail	/usr/bin/tail -q --follow=name --retry -n 0
	      Specify the path and arguments for  the  tail  binary  used  for
	      reading the log files. The invocation must be tuned against your
	      current 'tail' implementation. Default values are	configured for
	      standard GNU coreutils tail. The --follow=name and --retry flags
	      should  deal  properly with log rotation,	if missing on your im-
	      plementation we suggest that you use 'cp /dev/null logfile',  or
	      similar techniques, as a safe way	to clear the log file upon ro-
	      tation.

       set tail_multiple <on|off>
	      Some  tail implementations do not	handle more than one log file.
	      When this	option is  enabled  multiple  tail  commands  will  be
	      forked,  instead	of  a  single command with multiple arguments.
	      This option is disabled by default.

       set fifo	<fifo path>
	      A	FIFO file to monitor. This option allows you to	use a  syslog-
	      ng  pipe()  destination (or any other syslog implementation that
	      allows FIFO usage). This may  be	specified  multiple  times  to
	      watch  more  than	one fifo file. This option is meant to be used
	      only when	the installed 'tail' binary  doesn't  behave  properly
	      with  FIFOs,  please  test your tail implementation before using
	      this. This mode can be used along	with logfile , listen and  re-
	      disqueue settings.

       set listen 0.0.0.0:514
	      Enables syslog server mode. With this option tenshi will bind to
	      the  specified address:port pair and read	messages acting	like a
	      syslog server. We	always recommend to filter  the	 port  accord-
	      ingly  and possibly stunnel, or similar wrappers,	to encrypt the
	      traffic. This mode can be	used along with	logfile	, fifo and re-
	      disqueue settings.

       set redisqueue <queue name>
	      Enables monitoring of logs consumed from a Redis	queue  of  the
	      given  name,  this  may  be specified multiple times. See	redis-
	      server setting for instance specification. This mode can be used
	      along with logfile , fifo	and listen settings.

       set redisserver 127.0.0.1:6379
	      Specify the server path for the Redis instance to	be used	by the
	      redisqueue setting. The parameter	is passed to the new()	method
	      of  the  perl  Redis binding, please refer to its	manual for ac-
	      cepted values. The setting  typically  accepts  an  address:port
	      pair or socket path.

       DYNAMIC OPTIONS

       These  options  are set each time the config file is read. tenshi reads
       its config file once on start-up	and whenever it	receives a HUP.

       set sleep 5
	      The loop sleep time for the notification process.	The value must
	      be <= 60 seconds.

       set limit <number of lines>
	      The maximum number of messages per hostname allowed in a report,
	      any lines	after the maximum will be omitted and  a  warning  in-
	      cluded. If this option is	omitted	then no	limit is applied.

       set pager_limit <number of lines>
	      The  maximum  number  of	messages per hostname allowed in pager
	      friendly reports,	any lines after	the maximum will  be  omitted.
	      If this option is	omitted	then no	limit is applied.

       set logprefix <regexp>
	      All  valid syslog	messages are parsed by default,	while non-sys-
	      log ones are discarded unless the	special	noprefix queue is set.
	      This option allows to define  an	additional  valid  prefix  for
	      watching	other  type of logs. If	the regexp is matched then the
	      prefix is	removed	from the log and the first grouped  string  is
	      used  for	 the  hostname	field.	This may be specified multiple
	      times to watch many different non-syslog logs.

       set mask	______
	      The mask for strings enclosed by the grouping operators (	). See
	      the REGEXP DEFINITIONS section. 'set mask' on its	own  will  set
	      the mask to an empty string.

       set mailserver localhost
	      The mail server to be contacted for sending out reports.

       set mailtimeout 10
	      The timeout in seconds for mail server reply.

       set mailhelo localhost.localdomain
	      The  client  identification sent to the mailserver with the SMTP
	      HELO command.

       set subject tenshi report
	      The subject of report emails, the	queue name is always automati-
	      cally appended.

       set hidepid <on|off>
	      This option turns	on automatic stripping of  'foo[1234]:'	 style
	      PID  strings  from  the start of log lines i.e. 'foo[1234]:' be-
	      comes 'foo:'. This allows	you to write regexps without  worrying
	      about  masking  the  PID.	 Bear in mind that any time you	change
	      this option you will need	to re-write your regex rules  or  they
	      will not work. This option is disabled by	default.

       set filter <queue> <filter path>	<arguments>
	      When  this  option is enabled all	reports	matching the specified
	      queue will be passed as STDIN to the specified filter,  the  re-
	      sulting  output is sent via smtp instead of the original report.
	      The full path of the filter application must be specified.

       set csv <cron_spec> <filter path> <arguments>
	      This feature allows periodic reporting, using a five-field cron-
	      style specification like the set queue option, to	the  specified
	      filter. The output is pre-formatted as CSV (Comma	Separated Val-
	      ues)  with  hostname,log,hits format. This feature was coded for
	      using AfterGlow (http://afterglow.sf.net)	as a filter and	graph-
	      ing tenshi output. Check the FAQ for sample usage.

       set sort_order <descending|ascending>
	      The sorting order	for reports. It	can be	either	descending  or
	      ascending,  the  number of messages is used as a key for sorting
	      the log messages.	The default order is ascending.

       set resolve <on|off>
	      This option turns	on resolution of the  fully  qualified	domain
	      name  for	 the  hostname	passed along with log messages and, if
	      found, reports it	along with the original	one. This only affects
	      reports and not pager messages. The name resolution is cached in
	      order to avoid re-resolving addresses that have  been  seen  al-
	      ready,  you  have	to restart or HUP tenshi in order to flush the
	      cache. This option is disabled by	default.

       set threshold <queue> <count> <regex>
	      This option can be used to discard lines from a report that have
	      a	count below the	given threshold. If a line matches  the	 regex
	      in  the  given  queue  but has fewer hits	than count, it is dis-
	      carded and omitted from the report. Note that  this  matches  on
	      the  content  of	the lines that will actually appear in the re-
	      port, in contrast	to queue escalation which uses a  count	 based
	      on the regex that	is matched.

       QUEUES OPTIONS

       All  messages are assigned to queues. Every queue is processed periodi-
       cally according to its notification interval. There  are	 four  default
       builtin queues, trash to	which unwanted messages	can be assigned	(think
       /dev/null),  repeat  which  is used for smart repeat messages handling,
       group and group_host , see REGEXP DEFINITIONS for details. There's also
       a special noprefix queue, read further for details about	it.

       All queues are automatically flushed before shutdown when a SIGTERM  is
       received. Please	see section SIGNALS for	additional information.

       The syntax is the following:

       set queue <queue_name> <mail_from> [pager:]<mail_to> <cron_spec>	[<sub-
       ject>]

       <queue_name>
	      The  queue name. Can be any alphanumeric character string	except
	      for the builtin queues name.

       <mail_from>
	      The mail sender for reports related to the queue.

       <mail_to>
	      The mail recipient(s) for	reports	related	to the queue. Multiple
	      address can be specified,	separated by commas. Using the	pager:
	      prefix enables a pager friendly report.

       [<cron_spec>]
	      This  is	a five-field cron-style	specification for when the re-
	      ports should be emailed. Ranges and skip values are supported as
	      per the de facto crontab syntax with a  few  exceptions.	Please
	      see  crontab  man	 page for crontab syntax explanation. The sup-
	      ported day names are: Mon, Tue, Wed, Thu,	Fri, Sat, Sun.	Monday
	      is  1,  Sunday 0 or 7. Supported month names are:	Jan, Feb, Mar,
	      Apr, May,	Jun, Jul, Aug, Sep, Oct, Nov, Dec. Day and Month names
	      are not case sensitive. Additionally, 'now' can be specified for
	      immediate	notifications.

       <subject>
	      This is the subject for to use for email reports regarding  this
	      queue.  If this isn't specified then the default subject will be
	      used.

       The special noprefix queue can be used and defined like any other queue
       with the	difference that	it will	get all	messages that don't match  any
       configured prefix.

       Examples:
       set queue report	tenshi@localhost sysadmin@localhost [0 9-17 * *	*]
       set queue report	tenshi@localhost sysadmin@localhost [30	18 * * *]
       set queue report	tenshi@localhost sysadmin@localhost [*/10 * * *	*]
       set  queue  critical  tenshi@localhost sysadmin@localhost,noc@localhost
       [now] CRITICAL WARNING -
       set   queue    pager    tenshi@localhost	   pager:sysadmin_pager@local-
       host,pager:noc_pager@localhost [now] ALERT

       REGEXP DEFINITIONS

       All  valid  syslog  messages are	matched	against	standard perl regexps,
       all regexps are defined with the	following syntax:

       <queue_name>[,<queue_name>[:<escalation_number>]..] <regexp>

       The regexps are evaluated in order so a matched message is not  checked
       against	the  subsequent	regexps. Keep this in mind when	assembling the
       configuration file. It's	advisable to catch all messages	by placing  an
       all  matching  regexp  at  the end of the configuration file. It's also
       good for	performance having trash rules not  logically  connected  with
       other  matching	rules at the beginning of the section. Multiple	queues
       can be defined with a comma separated list, builtin  queues  cannot  be
       used when using this syntax.

       If  an  escalation  number is provided for a queue, the matched message
       will only be placed into	the queue  when	 <escalation_number>  messages
       have  matched  the  regexp.  The	 queue	will  receive the message that
       matched the regexp at the time of escalation, with a count equal	to the
       escalation number. The count of messages	matching the  regexp  will  be
       reset  when  the	left most queue	mentioned in the queue list is mailed.
       The left	most queue cannot have an escalation number unless it  is  the
       only  queue  listed.  When the number of	messages that match the	regexp
       reaches the greatest escalation number mentioned, escalation will begin
       again into the escalation queues, modulus the greatest escalation  num-
       ber.  For  example,  using  the	queues `a,b:10,c:50', when 10 messages
       match the regexp, a message will	go into	b, when	50 match, one will  go
       into  c.	At 60, another will go into b, and at 100, another into	c, 110
       to b, 150 to c, and so on. Escalation numbers must be positive integers
       greater than zero and must be listed in increasing order	from  left  to
       right.  All  queues without escalation numbers must be listed more left
       than the	queues with escalation numbers.

       The standard grouping operators ( ) can be  used	 for  string  masking,
       literal "(" and ")" can be protected with the standard quotation	opera-
       tor  "\".  There's  a lot of documentation about	regular	expressions, a
       good start could	be perl	perlre and perlretut manual pages.
       You can also use	the (?:	) operators to	use  groups  without  masking.
       This  allows you	to match, for example, output from several programs in
       a similar format.  There	is an  example	of  this  below	 (the  sudo/su
       line).

       The builtin queue repeat	can be used for	special	handling of "last mes-
       sage  repeated  x times"	style log lines. When the assigned regexps are
       matched the line	count for the last line	received from the same host is
       incremented by the first	grouped	string.	Keep in	mind that it is	possi-
       ble for syslog lines to be received from	remote hosts out of order.  If
       this  happens  you should not use this feature because tenshi will mis-
       report line counts.

       The builtin queue group can be used to group sets of regex together  to
       speed  up  line	matching. If a line fails to match a regex assigned to
       the group queue then tenshi will	skip all the regex up until  the  next
       group_end  statement.  Nested groups are	allowed. An example of this is
       included	below.

       The builtin group_host queue can	be used	for selective hostname	match-
       ing.  Like  the	group  queue  it is also terminated with the group_end
       statement. All regex definitions	within that group will only  apply  if
       the  hostname associated	to the log entries matches the regex passed to
       the group_host definition.

       The regexps below assume	hidepid	is turned on. If you  have  it	turned
       off  then  you  will need to add	in \[(.+)\] to the regex following the
       progam name to get them to work.
       For example: mail ^sendmail: (.+): to=(.+),(.+)delay=(.+) becomes: mail
       ^sendmail\[(.+)\]: (.+):	to=(.+),(.+)delay=(.+)

       Examples:

       trash ^xinetd

       repeat ^(?:last message repeated|above message repeats) (\d+) time

       group ^sendmail:
       mail ^sendmail: (.+): to=(.+),(.+)delay=(.+)
       mail ^sendmail: (.+): to=(.+),(.+)relay=(.+),(.+)stat=Sent
       group_end

       group_host mailserver1
       mail1 ^sendmail
       mail1 ^sendmail:.+
       critical,mail1 ^sendmail:.+SYSERR.+
       group_end

       mail ^ipop3d: Login user=(.+)

       critical,report ^sshd: Illegal user

       general,urgent:200,critical:1000	^sshd: Illegal user

       root ^sshd\(pam_unix\): session opened for user root by root\(uid=0\)

       report ^sshd: Accepted rsa for (.+) from	(.+) port (.+)

       trash ^sshd

       critical	^(?:sudo|su):

       critical,pager ^Oops

       misc .*

SIGNALS
       tenshi can handle different signals sent	to  the	 process,  here's  the
       list of supported ones:

       TERM   flush all	queues and then	exit

       INT    flush all	queues and then	exit

       USR1   flush any	queues which have reached their	notification interval

       USR2   force  all  queues  to be	flushed, even if they have not reached
	      their notification interval

       HUP    force all	queues to be flushed, even if they  have  not  reached
	      their  notification  interval,  re-read the config file and con-
	      tinue as normal.

       WARNING:	If you change a	STATIC OPTION in the config file and send ten-
       shi a HUP it will die. You will need to restart tenshi for  changes  to
       STATIC OPTIONs to take effect.

EXAMPLES
       See the included	tenshi.conf.

REQUIREMENTS
       - Perl.

       - A working 'tail' implementation, when using the logfile option.

       - The Net::SMTP perl module to mail reports, typically included in perl
       installations.

       - The IO::BufferedSelect	perl module.

       - The Redis perl	module,	when using the redisqueue option.

       Any missing module can be downloaded from CPAN (http://www.cpan.org) or
       installed using the CPAN	shell (`perl -e	shell -MCPAN`).

BUGS
       Double  quote  characters  present  in your logs	might break csv	output
       (depending on how you pipe/process it in	the filter) since  there's  no
       escape code (yet).

       Please report any bugs you find at <andrea@inversepath.com>

LICENSE
       tenshi  is  distributed	under the terms	of the following ISC-style li-
       cense:

       Permission to use, copy,	modify,	and distribute this software  for  any
       purpose	with or	without	fee is hereby granted, provided	that the above
       copyright notice	and this permission notice appear in all copies.

       THE SOFTWARE IS PROVIDED	"AS IS"	AND  THE  AUTHOR  DISCLAIMS  ALL  WAR-
       RANTIES	WITH  REGARD TO	THIS SOFTWARE INCLUDING	ALL IMPLIED WARRANTIES
       OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE	LIABLE
       FOR ANY SPECIAL,	DIRECT,	INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAM-
       AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA	OR PROFITS, WHETHER IN
       AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
       OF OR IN	CONNECTION WITH	THE USE	OR PERFORMANCE OF THIS SOFTWARE.

DISTRIBUTION
       The  tenshi repository is hosted	at https://github.com/inversepath/ten-
       shi

NOTES
       tenshi was once known as	wasabi.	 The name was changed due to a	trade-
       mark claim relating to another piece of software.

SEE ALSO
       It  should  be  noted  that  tenshi was initially a perl	rewrite	of oak
       (http://www.ktools.org).

       Friedl, Jeffrey E.  F.  Mastering  Regular  Expressions,	 2nd  Edition.
       O'Reilly

AUTHORS
       Copyright 2004-2017 Andrea Barisani <andrea@inversepath.com>

version	0.17			  19 Oct 2017			     tenshi(8)

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

home | help