From 2f405ef14aa6427ff8e2a02304dd9c00e431fd3a Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Fri, 27 Jun 2008 16:11:49 +0200 Subject: added doc: howto set up a reliable connection to remote server via queued mode (and plain tcp protocol) --- ChangeLog | 2 + doc/manual.html | 15 ++-- doc/rsyslog_reliable_forwarding.html | 152 +++++++++++++++++++++++++++++++++++ 3 files changed, 160 insertions(+), 9 deletions(-) create mode 100644 doc/rsyslog_reliable_forwarding.html diff --git a/ChangeLog b/ChangeLog index 7861ca49..850a4771 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ --------------------------------------------------------------------------- Version 3.17.5 (rgerhards), 2008-06-?? +- added doc: howto set up a reliable connection to remote server via + queued mode (and plain tcp protocol) - bugfix: comments after actions were not properly treated. For some actions (e.g. forwarding), this could also lead to invalid configuration --------------------------------------------------------------------------- diff --git a/doc/manual.html b/doc/manual.html index c3a623f1..a416277a 100644 --- a/doc/manual.html +++ b/doc/manual.html @@ -50,14 +50,11 @@ modules
  • rsyslogd man page

    We have some in-depth papers on

    Our rsyslog history page is for you if you would like to learn a little more diff --git a/doc/rsyslog_reliable_forwarding.html b/doc/rsyslog_reliable_forwarding.html new file mode 100644 index 00000000..870ca9b7 --- /dev/null +++ b/doc/rsyslog_reliable_forwarding.html @@ -0,0 +1,152 @@ + +Reliable Forwarding of syslog Messages (via plain TCP syslog) + + +

    Reliable Forwarding of syslog Messages with Rsyslog

    +

    Written by + Rainer + Gerhards (2008-06-27)

    +

    Abstract

    +

    In this paper, I describe how to forward +syslog + + messages (quite) reliable to a central rsyslog server. +This depends on rsyslog being installed on the client system and +it is recommended to have it installed on the server system. Please note +that industry-standard +plain TCP syslog protocol is not fully reliable +(thus the "quite reliable"). If you need a truely reliable solution, you need +to look into RELP (natively supported by rsyslog).

    + +

    The Intention

    +

    Whenever two systems talk over a network, something can go wrong. +For example, the communications link may go down, or a client or server may abort. +Even in regular cases, the server may be offline for a short period of time +because of routine maintenance. +

    A logging system should be capable of avoiding message loss in situations where the +server is not reachable. To do so, unsent data needs to be buffered at the client while the +server is offline. Then, once the server is up again, this data is to be sent. +

    This can easily be acomplished by rsyslog. In rsyslog, every action runs on its own queue +and each queue can be set to buffer data if the action is not ready. Of course, +you must be able to detect that "the action is not ready", which means the remote +server is offline. This can be detected with plain TCP syslog and RELP, but not with UDP. +So you need to use either of the two. In this howto, we use plain TCP syslog. +

    Please note that we are using rsyslog-specific features. The are required on the +client, but not on the server. So the client system must run rsyslog (at least version 3.12.0), while on the +server another syslogd may be running, as long as it supports plain tcp syslog. +

    The rsyslog queueing subsystem tries to buffer to memory. So even if the +remote server goes +offline, no disk file is generated. File on disk are created only if there is +need to, for example if rsyslog runs out of (configured) memory queue space or needs +to shutdown (and thus persist yet unsent messages). Using main memory and going to the +disk when needed is a huge performance benefit. You do not need to care about it, +because, all of it is handled automatically and transparently by rsyslog.

    +

    How To Setup

    +

    First, you need to create a working directory for rsyslog. This is where it +stores its queue files (should need arise). You may use any location on your +local system. +

    Next, you need to do is instruct rsyslog to use a +disk queue and then configure your action. There is nothing else to do. With the +following simple config file, you forward anything you receive to a remote server +and have buffering applied automatically when it goes down. This must be done on the +client machine.

    + +

    The port given above is optional. It may not be specified, in which case you only +provide the server name. The "$ActionQueueFileName" is used to create queue files, should need +arise. This value must be unique inside rsyslog.conf. No two rules must use the same queue file. +Also, for obvious reasons, it must only contain those characters that can be used inside a +valid file name. Rsyslog possibly adds some characters in front and/or at the end of that name +when it creates files. So that name should not be at the file size name length limit (which +should not be a problem these days). +

    Please note that actual spool files are only created if the remote server is down +and there is no more space in the in-memory queue. By default, a short failure +of the remote server will never result in the creation of a disk file as a couple of +hundered messages can be held in memory by default. [These parameters can be fine-tuned. However, +then you need to either fully understand how the queue works +(read elaborate doc) or +use professional services +to have it done based on +your specs ;) - what that means is that fine-tuning queue parameters is far from +being trivial...] +

    If you would like to test if your buffering scenario works, you need to +stop, wait a while and restart you central server. Do not watch for files being created, +as this usually does not happen and never happens immediately. + +

    Forwarding to More than One Server

    +

    If you have more than one server you would like to forward to, that's quickly done. +Rsyslog has no limit on the number or type of actions, so you can define as many targets +as you like. What is important to know, however, is that the full set of directives make +up an action. So you can not simply add (just) a second forwarding rule, but need to +duplicate the rule configuration as well. Be careful that you use different queue +file names for the second action, else you will mess up your system. +

    A sample for forwarding to two hosts looks like this: +

    + +

    Note the filename used for the first rule it is "srvrfwd1" and for the second it +is "srvrfwd2". I have used a server without port name in the second forwarding rule. +This was just to illustrate how this can be done. You can also specify a port there +(or drop the port from server1). +

    When there are multiple action queues, they all work independently. Thus, if server1 +goes down, server2 still receives data in real-time. The client will not block +and wait for server1 to come back online. Similarily, server1's operation will not +be affected by server2's state. + +

    Some Final Words on Reliability ...

    +

    Using plain TCP syslog provides a lot of reliability over UDP syslog. However, +plain TCP syslog is not a fully reliable transport. In order to get full reliability, +you need to use the RELP protocol. +

    Folow the next link to learn more about +the +problems you may encounter with plain tcp syslog. +

    Feedback requested

    +

    I would appreciate feedback on this tutorial. If you have additional ideas, +comments or find bugs (I *do* bugs - no way... ;)), please +let me know.

    +

    Revision History

    + +

    Copyright

    +

    Copyright (c) 2008 +Rainer Gerhards and +Adiscon.

    +

    Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license can be viewed at + +http://www.gnu.org/copyleft/fdl.html.

    + + -- cgit