.. _ref-omfile:
**************************
omfile: File Output Module
**************************
=========================== ===========================================================================
**Module Name:** **omfile**
**Author:** `Rainer Gerhards `_
=========================== ===========================================================================
Purpose
=======
The omfile plug-in provides the core functionality of writing messages
to files residing inside the local file system (which may actually be
remote if methods like NFS are used). Both files named with static names
as well files with names based on message content are supported by this
module.
Notable Features
================
- :ref:`omfile-statistic-counter`
Configuration Parameters
========================
Omfile is a built-in module that does not need to be loaded. In order to
specify module parameters, use
.. code-block:: none
module(load="builtin:omfile" ...parameters...)
Note that legacy parameters **do not** affect new-style RainerScript configuration
objects. See :doc:`basic configuration structure doc <../basic_structure>` to
learn about different configuration languages in use by rsyslog.
.. note::
Parameter names are case-insensitive; CamelCase is recommended for readability.
.. toctree::
:hidden:
../../reference/parameters/omfile-asyncwriting
../../reference/parameters/omfile-addlf
../../reference/parameters/omfile-closetimeout
../../reference/parameters/omfile-compression-driver
../../reference/parameters/omfile-compression-zstd-workers
../../reference/parameters/omfile-createdirs
../../reference/parameters/omfile-cry-provider
../../reference/parameters/omfile-dircreatemode
../../reference/parameters/omfile-dirgroup
../../reference/parameters/omfile-dirgroupnum
../../reference/parameters/omfile-dirowner
../../reference/parameters/omfile-dirownernum
../../reference/parameters/omfile-dynafile
../../reference/parameters/omfile-dynafile-donotsuspend
../../reference/parameters/omfile-dynafilecachesize
../../reference/parameters/omfile-failonchownfailure
../../reference/parameters/omfile-file
../../reference/parameters/omfile-filecreatemode
../../reference/parameters/omfile-filegroup
../../reference/parameters/omfile-filegroupnum
../../reference/parameters/omfile-fileowner
../../reference/parameters/omfile-fileownernum
../../reference/parameters/omfile-flushinterval
../../reference/parameters/omfile-flushontxend
../../reference/parameters/omfile-iobuffersize
../../reference/parameters/omfile-rotation-sizelimit
../../reference/parameters/omfile-rotation-sizelimitcommand
../../reference/parameters/omfile-rotation-sizelimitcommandpassfilename
../../reference/parameters/omfile-sig-provider
../../reference/parameters/omfile-sync
../../reference/parameters/omfile-template
../../reference/parameters/omfile-veryrobustzip
../../reference/parameters/omfile-ziplevel
General Notes
-------------
As can be seen in the parameters below, owner and groups can be set either by
name or by direct id (uid, gid). While using a name is more convenient, using
the id is more robust. There may be some situations where the OS is not able
to do the name-to-id resolution, and these cases the owner information will be
set to the process default. This seems to be uncommon and depends on the
authentication provider and service start order. In general, using names
is fine.
Module Parameters
-----------------
.. list-table::
:widths: 30 70
:header-rows: 1
* - Parameter
- Summary
* - :ref:`param-omfile-template`
- .. include:: ../../reference/parameters/omfile-template.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-addlf`
- .. include:: ../../reference/parameters/omfile-addlf.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dircreatemode`
- .. include:: ../../reference/parameters/omfile-dircreatemode.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-filecreatemode`
- .. include:: ../../reference/parameters/omfile-filecreatemode.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-fileowner`
- .. include:: ../../reference/parameters/omfile-fileowner.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-fileownernum`
- .. include:: ../../reference/parameters/omfile-fileownernum.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-filegroup`
- .. include:: ../../reference/parameters/omfile-filegroup.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-filegroupnum`
- .. include:: ../../reference/parameters/omfile-filegroupnum.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dirowner`
- .. include:: ../../reference/parameters/omfile-dirowner.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dirownernum`
- .. include:: ../../reference/parameters/omfile-dirownernum.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dirgroup`
- .. include:: ../../reference/parameters/omfile-dirgroup.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dirgroupnum`
- .. include:: ../../reference/parameters/omfile-dirgroupnum.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dynafile-donotsuspend`
- .. include:: ../../reference/parameters/omfile-dynafile-donotsuspend.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-compression-driver`
- .. include:: ../../reference/parameters/omfile-compression-driver.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-compression-zstd-workers`
- .. include:: ../../reference/parameters/omfile-compression-zstd-workers.rst
:start-after: .. summary-start
:end-before: .. summary-end
Action Parameters
-----------------
Note that **one** of the parameters *file* or *dynaFile* must be specified. This
selects whether a static or dynamic file (name) shall be written to.
.. list-table::
:widths: 30 70
:header-rows: 1
* - Parameter
- Summary
* - :ref:`param-omfile-template`
- .. include:: ../../reference/parameters/omfile-template.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-addlf`
- .. include:: ../../reference/parameters/omfile-addlf.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-fileowner`
- .. include:: ../../reference/parameters/omfile-fileowner.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-fileownernum`
- .. include:: ../../reference/parameters/omfile-fileownernum.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-filegroup`
- .. include:: ../../reference/parameters/omfile-filegroup.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-filegroupnum`
- .. include:: ../../reference/parameters/omfile-filegroupnum.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dirowner`
- .. include:: ../../reference/parameters/omfile-dirowner.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dirownernum`
- .. include:: ../../reference/parameters/omfile-dirownernum.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dirgroup`
- .. include:: ../../reference/parameters/omfile-dirgroup.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dirgroupnum`
- .. include:: ../../reference/parameters/omfile-dirgroupnum.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-file`
- .. include:: ../../reference/parameters/omfile-file.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dynafile`
- .. include:: ../../reference/parameters/omfile-dynafile.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-closetimeout`
- .. include:: ../../reference/parameters/omfile-closetimeout.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dynafilecachesize`
- .. include:: ../../reference/parameters/omfile-dynafilecachesize.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-ziplevel`
- .. include:: ../../reference/parameters/omfile-ziplevel.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-rotation-sizelimit`
- .. include:: ../../reference/parameters/omfile-rotation-sizelimit.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-rotation-sizelimitcommand`
- .. include:: ../../reference/parameters/omfile-rotation-sizelimitcommand.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-rotation-sizelimitcommandpassfilename`
- .. include:: ../../reference/parameters/omfile-rotation-sizelimitcommandpassfilename.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-veryrobustzip`
- .. include:: ../../reference/parameters/omfile-veryrobustzip.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-flushinterval`
- .. include:: ../../reference/parameters/omfile-flushinterval.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-asyncwriting`
- .. include:: ../../reference/parameters/omfile-asyncwriting.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-flushontxend`
- .. include:: ../../reference/parameters/omfile-flushontxend.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-iobuffersize`
- .. include:: ../../reference/parameters/omfile-iobuffersize.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-filecreatemode`
- .. include:: ../../reference/parameters/omfile-filecreatemode.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-dircreatemode`
- .. include:: ../../reference/parameters/omfile-dircreatemode.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-failonchownfailure`
- .. include:: ../../reference/parameters/omfile-failonchownfailure.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-createdirs`
- .. include:: ../../reference/parameters/omfile-createdirs.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-sync`
- .. include:: ../../reference/parameters/omfile-sync.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-sig-provider`
- .. include:: ../../reference/parameters/omfile-sig-provider.rst
:start-after: .. summary-start
:end-before: .. summary-end
* - :ref:`param-omfile-cry-provider`
- .. include:: ../../reference/parameters/omfile-cry-provider.rst
:start-after: .. summary-start
:end-before: .. summary-end
.. _omfile-statistic-counter:
Statistic Counter
=================
This plugin maintains :doc:`statistics <../rsyslog_statistic_counter>` for each
dynafile cache. Dynafile cache performance is critical for overall system performance,
so reviewing these counters on a busy system (especially one experiencing performance
problems) is advisable. The statistic is named "dynafile cache", followed by the
template name used for this dynafile action.
The following properties are maintained for each dynafile:
- **request** - total number of requests made to obtain a dynafile
- **level0** - requests for the current active file, so no real cache
lookup needed to be done. These are extremely good.
- **missed** - cache misses, where the required file did not reside in
cache. Even with a perfect cache, there will be at least one miss per
file. That happens when the file is being accessed for the first time
and brought into cache. So "missed" will always be at least as large
as the number of different files processed.
- **evicted** - the number of times a file needed to be evicted from
the cache as it ran out of space. These can simply happen when
date-based files are used, and the previous date files are being
removed from the cache as time progresses. It is better, though, to
set an appropriate "closeTimeout" (counter described below), so that
files are removed from the cache after they become no longer accessed.
It is bad if active files need to be evicted from the cache. This is a
very costly operation as an evict requires to close the file (thus a
full flush, no matter of its buffer state) and a later access requires
a re-open – and the eviction of another file, as the cache obviously has
run out of free entries. If this happens frequently, it can severely
affect performance. So a high eviction rate is a sign that the dynafile
cache size should be increased. If it is already very high, it is
recommended to re-think about the design of the file store, at least if
the eviction process causes real performance problems.
- **maxused** - the maximum number of cache entries ever used. This can
be used to trim the cache down to a value that’s actually useful but
does not waste resources. Note that when date-based files are used and
rsyslog is run for an extended period of time, the cache gradually fills
up to the max configured value as older files are migrated out of it.
This will make "maxused" questionable after some time. Frequently enough
purging the cache can prevent this (usually, once a day is sufficient).
- **closetimeouts** - available since 8.3.3 – tells how often a file was
closed due to timeout settings ("closeTimeout" action parameter). These
are cases where dynafiles or static files have been closed by rsyslog due
to inactivity. Note that if no "closeTimeout" is specified for the action,
this counter always is zero. A high or low number in itself doesn’t mean
anything good or bad. It totally depends on the use case, so no general
advise can be given.
Caveats/Known Bugs
==================
- people often report problems that dynafiles are not properly created.
The common cause for this problem is SELinux rules, which do not permit
the create of those files (check generated file names and paths!). The
same happens for generic permission issues (this is often a problem
under Ubuntu where permissions are dropped by default)
- One needs to be careful with log rotation if signatures and/or
encryption are being used. These create side-files, which form a set
and must be kept together.
For signatures, the ".sigstate" file must NOT be rotated away if
signature chains are to be build across multiple files. This is
because .sigstate contains just global information for the whole file
set. However, all other files need to be rotated together. The proper
sequence is to
#. move all files inside the file set
#. only AFTER this is completely done, HUP rsyslog
This sequence will ensure that all files inside the set are
atomically closed and in sync. HUPing only after a subset of files
have been moved results in inconsistencies and will most probably
render the file set unusable.
- If ``zipLevel`` is greater than 0 and ``veryRobustZip`` is set to off,
data appended to previously unclean closed files will not be
accessible with ``gunzip`` if rsyslog writes again in the same
file. Nonetheless, data is still there and can be correctly accessed
with other tools like `gztool `_ (v>=1.1) with: ``gztool -p``.
Examples
========
Example 1
---------
The following command writes all syslog messages into a file.
.. code-block:: none
action(type="omfile" dirCreateMode="0700" FileCreateMode="0644"
File="/var/log/messages")