Skip to content

Commit 671029a

Browse files
committed
Merge pull request #53 from Aethylred/multiple_hosts
Configuring mulitple remote servers
2 parents c4211ac + 8804f3f commit 671029a

4 files changed

Lines changed: 105 additions & 13 deletions

File tree

README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,45 @@ for read from file
3939
4040
```
4141

42+
#### Logging to multiple remote servers
43+
44+
The `remote_servers` parameter can be used to set up logging to multiple remote servers which are supplied as a list of key value pairs for each remote. There is an example configuration provided in `./test/multiple_hosts.pp`
45+
46+
Using the `remote_servers` parameter over-rides the other remote sever parameters, and they will not be used in the client configuration file:
47+
* `log_remote`
48+
* `remote_type`
49+
* `server`
50+
* `port`
51+
52+
The following example sets up three remote logging hosts for the client:
53+
54+
```puppet
55+
class{'rsyslog::client':
56+
remote_servers => [
57+
{
58+
host => 'logs.example.org',
59+
},
60+
{
61+
port => '55514',
62+
},
63+
{
64+
host => 'logs.somewhere.com',
65+
port => '555',
66+
pattern => '*.log',
67+
protocol => 'tcp',
68+
format => 'RFC3164fmt',
69+
},
70+
]
71+
}
72+
```
73+
74+
Each host has the following parameters:
75+
* *host*: Sets the address or hostname of the remote logging server. Defaults to `localhost`
76+
* *port*: Sets the port the host is listening on. Defaults to `514`
77+
* *pattern*: Sets the pattern to match logs. Defaults to `*.*`
78+
* *protocol*: Sets the protocol. Only recognises TCP and UDP. Defaults to UDP
79+
* *format*: Sets the log format. Defaults to not specifying log format, which defaults to the format set by `ActionFileDefaultTemplate` in the client configuration.
80+
4281
#### Logging to a MySQL or PostgreSQL database
4382

4483
Events can also be logged to a MySQL or PostgreSQL database. The database needs to be deployed separately, either locally or remotely. Schema are available from the `rsyslog` source:
@@ -91,6 +130,7 @@ The following lists all the class parameters this module accepts.
91130
high_precision_timestamps true,false Whether or not to use high precision timestamps.
92131
preserve_fqdn true,false Whether or not to preserve the fully qualified domain name when logging.
93132
actionfiletemplate STRING If set this defines the `ActionFileDefaultTemplate` which sets the default logging format for remote and local logging..
133+
remote_servers HASH Provides a hash of multiple remote logging servers. Check documentation.
94134

95135
RSYSLOG::CLIENT CLASS PARAMETERS VALUES DESCRIPTION
96136
-------------------------------------------------------------------

manifests/client.pp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@
55
# === Parameters
66
#
77
# [*sample_parameter*]
8-
# [*log_remote*]
98
# [*spool_size*]
10-
# [*remote_type*]
119
# [*log_local*]
1210
# [*log_auth_local*]
1311
# [*custom_config*]
1412
# [*custom_params*]
13+
# [*log_remote*]
1514
# [*server*]
15+
# [*remote_type*]
1616
# [*port*]
17+
# [*remote_servers*]
1718
# [*ssl_ca*]
1819
# [*actionfiletemplate*]
1920
#
@@ -33,9 +34,10 @@
3334
$custom_params = undef,
3435
$server = 'log',
3536
$port = '514',
37+
$remote_servers = false,
3638
$ssl_ca = undef,
37-
$actionfiletemplate = undef,
38-
$preserve_fqdn = undef
39+
$actionfiletemplate = false,
40+
$preserve_fqdn = false
3941
) inherits rsyslog {
4042

4143
$content_real = $custom_config ? {

templates/client.conf.erb

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,48 @@ $ActionFileDefaultTemplate <%= scope.lookupvar('rsyslog::client::actionfiletempl
1414
#Using default format for default logging fromat:
1515
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
1616
<% end -%>
17+
<% if scope.lookupvar('rsyslog::client::remote_servers') and ! scope.lookupvar('rsyslog::client::remote_servers').empty? -%>
18+
<% scope.lookupvar('rsyslog::client::remote_servers').flatten.compact.each do |server| -%>
19+
<% if server['pattern'] and server['pattern'] != ''-%>
20+
<% pattern = server['pattern'] -%>
21+
<% else -%>
22+
<% pattern = '*.*' -%>
23+
<% end -%>
24+
<% if server['protocol'] == 'TCP' or server['protocol'] == 'tcp'-%>
25+
<% protocol = '@@' -%>
26+
<% protocol_type = 'TCP' -%>
27+
<% else -%>
28+
<% protocol = '@' -%>
29+
<% protocol_type = 'UDP' -%>
30+
<% end -%>
31+
<% if server['host'] and server['host'] != ''-%>
32+
<% host = server['host'] -%>
33+
<% else -%>
34+
<% host = 'localhost' -%>
35+
<% end -%>
36+
<% if server['port'] and server['port'] != ''-%>
37+
<% port = server['port'] -%>
38+
<% else -%>
39+
<% port = '514' -%>
40+
<% end -%>
41+
<% if server['format'] -%>
42+
<% format = ";#{server['format']}" -%>
43+
<% format_type = server['format'] -%>
44+
<% else -%>
45+
<% format = '' -%>
46+
<% format_type = 'the default' -%>
47+
<% end -%>
48+
# Sending logs that match <%= pattern %> to <%= host %> via <%= protocol_type %> on <%= port %> using <%=format_type %> format.
49+
<%= pattern %> <%= protocol %><%= host %>:<%= port %><%= format %>
50+
<% end -%>
51+
<% elsif scope.lookupvar('rsyslog::client::log_remote') -%>
52+
# Log to remote syslog server using <%= scope.lookupvar('rsyslog::client::remote_type') %>
53+
<% if scope.lookupvar('rsyslog::client::remote_type') == 'tcp' -%>
54+
*.* @@<%= scope.lookupvar('rsyslog::client::server') -%>:<%= scope.lookupvar('rsyslog::client::port') -%>;RSYSLOG_ForwardFormat
55+
<% else -%>
56+
*.* @<%= scope.lookupvar('rsyslog::client::server') -%>:<%= scope.lookupvar('rsyslog::client::port') -%>;RSYSLOG_ForwardFormat
57+
<% end -%>
58+
<% end -%>
1759
<% if scope.lookupvar('rsyslog::client::log_auth_local') or scope.lookupvar('rsyslog::client::log_local') -%>
1860
<% if scope.lookupvar('rsyslog::client::ssl') -%>
1961
# Setup SSL connection.
@@ -26,15 +68,6 @@ $ActionSendStreamDriverMode 1
2668
$ActionSendStreamDriverAuthMode anon
2769
<% end -%>
2870

29-
<% if scope.lookupvar('rsyslog::client::log_remote') -%>
30-
# Log to remote syslog server using <%= scope.lookupvar('rsyslog::client::remote_type') %>
31-
<% if scope.lookupvar('rsyslog::client::remote_type') == 'tcp' -%>
32-
*.* @@<%= scope.lookupvar('rsyslog::client::server') -%>:<%= scope.lookupvar('rsyslog::client::port') -%>;RSYSLOG_ForwardFormat
33-
<% else -%>
34-
*.* @<%= scope.lookupvar('rsyslog::client::server') -%>:<%= scope.lookupvar('rsyslog::client::port') -%>;RSYSLOG_ForwardFormat
35-
<% end -%>
36-
<% end -%>
37-
3871
# Logging locally.
3972

4073
<% if scope.lookupvar('rsyslog::log_style') == 'debian' -%>

tests/multiple_hosts.pp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class{'rsyslog::client':
2+
remote_servers => [
3+
{
4+
host => 'logs.example.org',
5+
},
6+
{
7+
port => '55514',
8+
},
9+
{
10+
host => 'logs.somewhere.com',
11+
port => '555',
12+
pattern => '*.log',
13+
protocol => 'tcp',
14+
format => 'RFC3164fmt',
15+
},
16+
]
17+
}

0 commit comments

Comments
 (0)