This section describes a round robin load balancing method based on the ${R_MSEC} macro of syslog-ng OSE to load balance your logs between multiple syslog-ng OSE destinations.

TIP: If ${R_MSEC} is not precise enough, you can replace it with ${R_USEC} (which uses microseconds instead of milliseconds).

For more information about the ${R_MSEC} macro and further macros, see Macros of syslog-ng OSE.

Example: round robin load balancing between multiple destinations

The following example is a round-robin load balancing method, based on ${R_MSEC} macro of syslog-ng OSE.

destination d_lb_network { 
  channel { 
    channel { 
      filter { 
      "0" == "$(% ${R_MSEC} 2)" 
      }; 
      destination { 
        network("myhost1" 
          disk-buffer(mem-buf-length(10000) disk-buf-size(2000000))); 
      }; 
      flags(final); 
    }; 
  
    channel { 
    filter { 
    "1" == "$(% ${R_MSEC} 2)" 
    }; 

    destination { 
      network("myhost2" 
        disk-buffer(mem-buf-length(10000) disk-buf-size(2000000))); 
    }; 
    flags(final); 
    }; 
  }; 
};

The filter {" <return value >" == "$(% ${R_MSEC} 2)"}; code snippets (in bold) serve as the basis of the method. This filter separates incoming log messages' timestamp values based on the ${R_MSEC} macro, using a division with remainder method, and distributes the log messages equally between two destinations based on the return value (in this case, 0 or 1).

If you need a file instead of a network destination, replace the network destination with the file in the example (and use the same analogy for any other syslog-ng OSE destinations).

For an alternative method to use the round robin load balancing method based on the ${R_MSEC} macro, see Configuration generator for the load balancing method based on ${R_MSEC} hashing.

Updated: