NAME
fetchlog - fetch and convert new messages of a logfile
SYNOPSIS
fetchlog -f first:last:len:conv
logfile bookmarkfile [ pattern .. ]
fetchlog -F first:last:len:conv logfile
bookmarkfile [ pattern .. ]
fetchlog [-h|-V]
DESCRIPTION
The fetchlog utility displays the last
new messages of a logfile. It is similar like tail(1) but
offers some extra functionality for output formatting. To show only
the new messages appeared since the last call fetchlog uses
a bookmark to remember which messages have been fetched.
fetchlog scans backwards logfile and collects all
messages, optionally only those matching any of the given
regex-style patterns. Then fetchlog converts found message
lines for output. It stops scanning when one of these conditions
become true: The bookmark from bookmarkfile is reached, or
len characters are ready for output, or an error occurs.
fetchlog knows about rotated and uncompressed logfiles and
continues scanning in rotated logfiles by appending '.0', '.1' upto
'.9' to logfile when scanning in rotated logfiles. Scanning
stops without error when a rotated logfile does not exist.
OPTIONS
- -f
- do not update bookmark in bookmarkfile.
- -F
- update bookmark in bookmarkfile : set bookmark to the
very last line fetched from logfile
- first
- The first column of text fetchlog will read from
logfile. Lines shorter than first will be show up as
a single newline. The column count starts with 1.
- last
- The maximum last column fetchlog will read from
logfile. Lines longer than last will be cut off and a
`~` will be set at column last for output. The column count
starts with 1.
- len
- The maximum number of characters fetchlog will output.
If more than len characters are available after cutting and
conversion, the first line put out will start with '...'.
- conv
- Conversion: one ore more of characters 'bpsno'.
- b [brackets] convert '<' and '>' to '(' and ')'
for safe HTML output.
- p [percent] convert '%' to 'p' for safe printf(1)
output.
- s [shell] convert '$', '^', and the three quotes
(backquote, doublequote, singlequote) to '_' and '\' to '/'. This
conversion is useful when passing the result of fetchlog to
a shell command as a parameter.
- n [newline] convert newline characters to '\n' sequence
to get a single line of output.
- o [ok message] Show 'OK: no messages' if no new messages
are available for output.
- logfile
- Absolute path to the unrotated logfile to fetch data from. The
user needs read access to logfile.
- bookmarkfile
- Absolute path to the file holding the bookmark. The user needs
read access to the file when using option -f and write
access plus permission to create files in the directory of
bookarkfile when using option -F (update bookmark).
- If bookmarkfile does not exist fetchlog assumes
an infinite old bookmark.
- pattern
- A extended regular expression pattern, see re_format(7)
for details. If one or more pattern are defined,
fetchlog will only pick lines where any of these
pattern match. Pattern matching is done after trimming the
lines with respect to first and last and before any
conversions takes place. In other words: pattern matching operates
on data that fetchlog shows when no conversion is set.
- -h
- print help message
- -V
- print version
MULTIPLE FETCHING
Fetching the same logfile with different
bookmarks works without problem. Simultanously fetching with option
-F (update mode) using the same bookmark file works too, but
unpredictable results will occur. For safety reasons
bookmarkfile will never be opened for writing directly,
instead a temporary file will be used and renamed to
bookmarkfile when writing has finished.
PERFORMANCE
Before opening logfiles for scanning
fetchlog first checks the modification time of
logfile and compares this time with the modification time
stored in bookmarkfile. If both timestamps are the same then
fetchlog exits with 0 (no messages). Otherwise the
logfile(s) get mapped to memory step by step and are scanned
backwards line by line until one of the end conditions become true.
fetchlog uses the logfiles inode to distinguish different
logs.
NAGIOS
fetchlog may be used as a local plugin for
the Nagios network monitoring system to monitor a local
logfile. It follows the calling convention for Nagios plugins if at
least conversions on are set and len is 'short'
enough for Nagios. It is recommended to use conversion s
also because shell metacharacters in fetched messages may confuse
Nagios' notification system.
When using fetchlog as a local plugin for Nagios then
return status is as follows:
- OK
- No new messages in logfile where found. The single line
'OK: no messages' will be send to stdout.
- WARNING
- fetchlog detected an internal error while fetching. A
one line error message starting with 'ERROR: fetchlog:' is send to
stdout.
- CRITICAL
- New messages in logfile where found. A single line with
the last new messages will be send to stdout.
- UNKNOWN
- fetchlog was called with wrong parameters. A multiline
usage message is send to stdout.
Nagios can monitor remote logfiles together with NET-SNMP
and fetchlog using the check-snmp plugin. Please read the
README files coming with fetchlog how to setup this.
SNMP
The motivation for fetchlog was to create a
helper tool for NET-SNMP's snmpd to enable monitoring of
remote kernel syslogs using SNMP. If configured properly,
snmpd replies to a specific SNMP request with the output of
an external helper program. With fetchlog using update mode
-F and conversions on one can peek at a remote syslog
file and gets either 'OK: no messages' or one line with the new
syslog messages appeared since the last SNMP request.
Because of some limitiations of SNMP itself and the monitoring
applications using SNMP, the length of the SNMP reply must not
exceed a specific size. To ease the integration of SNMP in
monitoring software it is useful to have the SNMP reply only
consist of a single line of text rather than multiple lines.
COMPRESSING OUTPUT
The syslog messages fetched can be
compressed by increasing first to skip the timestamp and
host entry from syslog. Lowering last gives even more
compression for long syslog lines. As a result one gets a very
short message that gives an idea of what is going wrong.
DIAGNOSTICS
fetchlog sends all output and error
messages to stdout. Exit codes:
- 0
- No new messages in logfile were found. If conversion
o is set, the single line 'OK: no messages' will be send to
stdout.
- 1
- An internal error in fetchlog occured. A one line error
message will be send to stdout. The error message starts with
'ERROR: fetchlog:' and shows detailed information about what went
wrong. Length limitation by parameter len is applied, if an
error message is too long the last part will be cut off and a '~'
is appended.
- 2
- New messages in logfile were found. The new messages
will be send to stdout. If conversion n is set, a single
line of text is send, else zero or more lines of converted syslog
messages are send.
- 3
- fetchlog was called with wrong parameters, a multiline
usage message is print to stdout.
Note: Since version 0.93 the meanings of exit code 1 and 2 have
been exchanged.
AUTHOR
Alexander Haderer, Radiology Department, Charite
Berlin
SEE ALSO
tail(1),
cat(1),
head(1),
sed(1),
re_format(7),
(8),
newsyslog(8)
NET-SNMP - Various tools relating to the Simple Network
Management Protocol SNMP (NET-SNMP: formerly known as UCD-SNMP)
http://www.net-snmp.org
Nagios - A Network monitoring system
http://www.nagios.org
Nagios Plugins - Plugins for Nagios
http://nagiosplug.sourceforge.net
fetchlog homepage - download, support and bugtracking
http://fetchlog.sourceforge.net
BUGS
Bookmarkfiles are not portable across plattforms or
fetchlog versions.
Logfiles are expected not to shrink.
fetchlog does not work with compressed logfiles.
Fetching when logfile rotation takes place may result in some
messages to appear twice.
If an regex error occurs during pattern matching this error is
silently ignored and will be handled as non-match.
LEGAL
Nagios is a registered trademark of Ethan Galstad.