diff options
Diffstat (limited to '')
-rw-r--r-- | source/configuration/converting_to_new_format.rst | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/source/configuration/converting_to_new_format.rst b/source/configuration/converting_to_new_format.rst new file mode 100644 index 0000000..fcff061 --- /dev/null +++ b/source/configuration/converting_to_new_format.rst @@ -0,0 +1,196 @@ +Converting older formats to |FmtAdvancedName| +============================================= + +First of all, converting of older formats is not strictly necessary. All +formats can be mixed and matched and play well together. + +There are stil a number of reasons to convert older formats: + +* existing simple constructs need to be enhanced and become more complex +* aid future extensions +* ensure no side-effects accidentally occur +* unify rsyslog.conf language + +Do not overdo conversion +~~~~~~~~~~~~~~~~~~~~~~~~ + +Note: simple facility and severity based filters which trigger writing to +files can actually be very well expressd in |FmtBasicName|. So if you have +something like:: + + mail.info /var/log/maillog + +We suggest you leave it as-is without conversion. Equally, in our opinion it is +also fine to add new rules like the above. If you still want to convert, the +line may look as follows (completely in new format):: + + if prifilt("mail.info") then { + action(type="omfile" file="/var/log/maillog") + } + +More compact, this can also be written like:: + + if prifilt("mail.info") then action(type="omfile" file="/var/log/maillog") + +The older-selector-style filter is well-known, so this may also write it as:: + + mail.info action(type="omfile" file="/var/log/maillog") + +There are ample additional possibilities. We suggest to keep things consistent. + +Converting Module Load +~~~~~~~~~~~~~~~~~~~~~~ +This is very straight-forward. In |FmtObsoleteName| format we use:: + + $ModLoad module-name + +This is very simply converted to:: + + module(load="module-name") + +Sometimes modules provide global settings. In |FmtObsoleteName| format these are given in +individual lines **after** the \$ModLoad. In |FmtAdvancedName| format they are given inside +the module object. This makes it much clearer which module they belong to and +that they actually are global parameters (in contrast to per-action or per-listener +parameters). A typical example is `imtcp`:: + + $ModLoad imtcp + $InputTCPMaxSession 500 + +This is converted to:: + + module(load="imtcp" maxSessions="500") + +Note: in |FmtObsoleteName| format it is possible to provide global parameters more than once. +In this case it is unclear which one actually applies. For example:: + + $ModLoad imtcp + $InputTCPMaxSession 500 + ... + *.* /var/log/messages + ... + $InputTCPMaxSession 200 + +This is especially problematic if module-global parameters are used multiple times +in include files. + +In |FmtAdvancedName| format this is no longer possible. Module-global parameters can only +be applied once when the module is loaded. Any attempt to change them afterwards +results in an error message and will be ignored. The error messages will help you +find and fix multiple settings. Let us assume "200" is the setting actually intended +in above config snippet. So it would be converted to:: + + module(load="imtcp" maxSessions="200") + ... + *.* /var/log/messages + ... + + +Converting Actions +~~~~~~~~~~~~~~~~~~ +In general, you have lines like:: + + filter action + +where *filter* is any of the filters and *action* is ... the action to be +carried out. As could be seen above, the filter does **not** necessarily +need to be changed in order to convert the action. All filters also work +with all config formats. It often is best to keep existing filters, at +least while working on the conversion (do not change too many things at once). + +The following table lists traditional action syntax and how it can be +converted to new-style ``action()`` objects. The link will bring you to +detail documentation. In these detail documentations all parameters are given. +It is also specified which |FmtObsoleteName| directives map to |FmtAdvancedName| +properties. +This table is not conclusive but covers the most commonly used actions. + +.. csv-table:: + :header: "|FmtBasicName|", "|FmtAdvancedName|" + :widths: auto + :class: parameter-table + + "file path (`/var/log/...`)", "action(type="":doc:`omfile <modules/omfile>`"" file=""/var/log.../"" ...)" + "UDP forwarding (`@remote`)", "action(type="":doc:`omfwd <modules/omfwd>`"" target=""remote"" protocol=""udp"" ...)" + "TCP forwarding (`@@remote`)", "action(type="":doc:`omfwd <modules/omfwd>`"" target=""remote"" protocol=""tcp"" ...)" + "user notify (``:omusrmsg:user``)", "action(type="":doc:`omusrmsg <modules/omusrmsg>`"" users=""user"" ...)" + "module name (``:omxxx:..``)", "action(type="":doc:`omxxx <modules/idx_output>`"" ...)" + +Some concrete examples:: + + OLD: :hostname, contains, "remote-sender" @@central + NEW: :hostname, contains, "remote-sender" action(type="omfwd" target="central" protocol="tcp") + + OLD: if $msg contains "error" then @central + NEW: if $msg contains "error" then action(type="omfwd" target="central" protocol="udp") + + OLD: *.emerg :omusrmsg:* + NEW: *.emerg action(type="omusrmsg" users="*") + +**NOTE:** Some actions do not have a |FmtBasicName| format configuration line. They may +only be called via the ``action()`` syntax. Similarly, some very few actions, +mostly contributed, do not support ``action()`` syntax and thus can only be +configured via |FmtBasicName| and |FmtObsoleteName|. See module doc for details. + + +Action with Multiple Parameters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In many cases, actions have additional parameters, which also need to be converted. In +|FmtObsoleteName| format the action parameters are given before the actual action call. +To convert such constructs, you need to map all |FmtObsoleteName| parameters to |FmtAdvancedName| +ones. To look these up, you need to turn to three different documentation pages: + +* the :doc:`action object <actions>` itself +* the :doc:`output module <modules/idx_output>` that is called in the action (e.g. omfwd) +* the :doc:`queue documentation <../rainerscript/queue_parameters>` (if an action queue is used) + +To find the parameter in question, you can other do an on-page search via the browser on these +pages. Often it is very convenient to just use the +`rsyslog doc search engine <https://www.rsyslog.com/doc/master/search.html?q=>`_: +Type the |FmtObsoleteName| format statement into the search box. Most often, one of the first +search results is the matching object description doc page. + +Converting Action Chains +~~~~~~~~~~~~~~~~~~~~~~~~ + +Actions can be chained via the ampersand character ('``&``'). In |FmtAdvancedName| +format this has been replaced by blocks. For example:: + + *.error /var/log/errorlog + & @remote + +becomes:: + + *.error { + action(type="omfile" file="/var/log/errorlog") + action(type="omfwd" target="remote" protocol="udp") + } + +The latter is much easier to understand and less error-prone when extended. + +A common construct is to send messages to a remote host based on some message +content and then not further process it. This involves the ``stop`` statement +(or it's very old-time equivalent tilde ('``~``'). It may be specfied as such:: + + :msg, contains, "error" @remote + & ~ + +which is equavalent to:: + + :msg, contains, "error" @remote + & stop + +This format is often found in more modern distro's rsyslog.conf. It again is +fully equivalent to:: + + :msg, contains, "error" { + action(type="omfwd" target="remote" protocol="udp") + stop + } + +And, just to prove the point, this is also exactly the same like:: + + if $msg contains "error" then { + action(type="omfwd" target="remote" protocol="udp") + stop + } |