summaryrefslogtreecommitdiffstats
path: root/source/compatibility/v4compatibility.rst
diff options
context:
space:
mode:
Diffstat (limited to 'source/compatibility/v4compatibility.rst')
-rw-r--r--source/compatibility/v4compatibility.rst132
1 files changed, 132 insertions, 0 deletions
diff --git a/source/compatibility/v4compatibility.rst b/source/compatibility/v4compatibility.rst
new file mode 100644
index 0000000..ddbce3e
--- /dev/null
+++ b/source/compatibility/v4compatibility.rst
@@ -0,0 +1,132 @@
+Compatibility Notes for rsyslog v4
+==================================
+
+*Written by* `Rainer Gerhards <http://www.gerhards.net/rainer>`_
+*(2009-07-15)*
+
+The changes introduced in rsyslog v4 are numerous, but not very
+intrusive. This document describes things to keep in mind when moving
+from v3 to v4. It does not list enhancements nor does it talk about
+compatibility concerns introduced by v3 (for this, see the `rsyslog v3
+compatibility notes <v3compatibility.html>`_).
+
+HUP processing
+--------------
+
+With v3 and below, rsyslog used the traditional HUP behaviour. That
+meant that all output files are closed and the configuration file is
+re-read and the new configuration applied.
+
+With a program as simple and static as sysklogd, this was not much of an
+issue. The most important config settings (like udp reception) of a
+traditional syslogd can not be modified via the configuration file. So a
+config file reload only meant setting up a new set of filters. It also
+didn't account as problem that while doing so messages may be lost -
+without any threading and queuing model, a traditional syslogd will
+potentially always loose messages, so it is irrelevant if this happens,
+too, during the short config re-read phase.
+
+In rsyslog, things are quite different: the program is more or less a
+framework into which loadable modules are loaded as needed for a
+particular configuration. The software that will actually be running is
+tailored via the config file. Thus, a re-read of the config file
+requires a full, very heavy restart, because the software actually
+running with the new config can be totally different from what ran with
+the old config.
+
+Consequently, the traditional HUP is a very heavy operation and may even
+cause some data loss because queues must be shut down, listeners stopped
+and so on. Some of these operations (depending on their configuration)
+involve intentional message loss. The operation also takes up a lot of
+system resources and needs quite some time (maybe seconds) to be
+completed. During this restart period, the syslog subsystem is not fully
+available.
+
+From the software developer's point of view, the full restart done by a
+HUP is rather complex, especially if user-timeout limits set on action
+completion are taken into consideration (for those in the know: at the
+extreme ends this means we need to cancel threads as a last resort, but
+than we need to make sure that such cancellation does not happen at
+points where it would be fatal for a restart). A regular restart, where
+the process is actually terminated, is much less complex, because the
+operating system does a full cleanup after process termination, so
+rsyslogd does not need to take care for exotic cleanup cases and leave
+that to the OS. In the end result, restart-type HUPs clutter the code,
+increase complexity (read: add bugs) and cost performance.
+
+On the contrary, a HUP is typically needed for log rotation, and the
+real desire is to close files. This is a non-disruptive and very
+lightweight operation.
+
+Many people have said that they are used to HUP the syslogd to apply
+configuration changes. This is true, but it is questionable if that
+really justifies all the cost that comes with it. After all, it is the
+difference between typing
+
+::
+
+ $ kill -HUP `cat /var/run/rsyslogd.pid`
+
+versus
+
+::
+
+ $ /etc/init.d/rsyslog restart
+
+Semantically, both is mostly the same thing. The only difference is that
+with the restart command rsyslogd can spit config error message to
+stderr, so that the user is able to see any problems and fix them. With
+a HUP, we do not have access to stderr and thus can log error messages
+only to their configured destinations; experience tells that most users
+will never find them there. What, by the way, is another strong argument
+against restarting rsyslogd by HUPing it.
+
+So a restart via HUP is not strictly necessary and most other daemons
+require that a restart command is typed in if a restart is required.
+
+Rsyslog will follow this paradigm in the next versions, resulting in
+many benefits. In v4, we provide some support for the old-style
+semantics. We introduced a setting $HUPisRestart which may be set to
+"on" (traditional, heavy operation) or "off" (new, lightweight "file
+close only" operation). The initial versions had the default set to
+traditional behavior, but starting with 4.5.1 we are now using the new
+behavior as the default.
+
+Most importantly, **this may break some scripts**, but my sincere belief
+is that there are very few scripts that automatically **change**
+rsyslog's config and then do a HUP to reload it. Anyhow, if you have
+some of these, it may be a good idea to change them now instead of
+turning restart-type HUPs on. Other than that, one mainly needs to
+change the habit of how to restart rsyslog after a configuration change.
+
+**Please note that restart-type HUP is deprecated and will go away in
+rsyslog v5.** So it is a good idea to become ready for the new version
+now and also enjoy some of the benefits of the "real restart", like the
+better error-reporting capability.
+
+Note that code complexity reduction (and thus performance improvement)
+needs the restart-type HUP code to be removed, so these changes can (and
+will) only happen in version 5.
+
+outchannels
+-----------
+
+Note: as always documented, outchannels are an experimental feature that
+may be removed and/or changed in the future. There is one concrete
+change done starting with 4.6.7: let's assume an outchannel "mychannel"
+was defined. Then, this channel could be used inside an
+
+\*.\* $mychannel
+
+This is still supported and will remain to be
+supported in v4. However, there is a new variant which explicitly tells
+this is to be handled by omfile. This new syntax is as follows:
+
+\*.\* :omfile:$mychannel
+
+Note that future versions, specifically
+starting with v6, the older syntax is no longer supported. So users are
+strongly advised to switch to the new syntax. As an aid to the
+conversion process, rsyslog 4.7.4 and above issue a warning message if
+the old-style directive is seen -- but still accept the old syntax
+without any problems.