summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteffen Zieger <me@saz.sh>2013-04-07 13:37:37 -0700
committerSteffen Zieger <me@saz.sh>2013-04-07 13:37:37 -0700
commit08c49965861137ae79620c7ca82af572f0ef024f (patch)
tree37f2661e7c324a750c290fbf2f57b29c4307a8e3
parentbf2b8f173e353d85fba4aa0eb0b57ab6a6c0c0b0 (diff)
parent43ea1899ea60f28e6d8139f53f0b0d6602525512 (diff)
Merge pull request #24 from johanek/development
Allow server to split logs by hostname
-rw-r--r--README.md7
-rw-r--r--manifests/server.pp10
-rw-r--r--spec/classes/rsyslog_server_spec.rb83
-rw-r--r--templates/server-default.conf.erb (renamed from templates/server.conf.erb)39
-rw-r--r--templates/server-hostname.conf.erb41
-rw-r--r--templates/server/_default-footer.conf.erb13
-rw-r--r--templates/server/_default-header.conf.erb20
7 files changed, 155 insertions, 58 deletions
diff --git a/README.md b/README.md
index c4a4604..d2e2dd5 100644
--- a/README.md
+++ b/README.md
@@ -105,3 +105,10 @@ The following lists all the class parameters this module accepts.
Due to a missing feature in current RELP versions (InputRELPServerBindRuleset option),
remote logging is using TCP. You can switch between TCP and UDP. As soon as there is
a new RELP version which supports setting Rulesets, I will add support for relp back.
+
+By default, rsyslog::server will strip numbers from hostnames. This means the logs of
+multiple servers with the same non-numerical name will be aggregrated in a single
+directory. i.e. www01 www02 and www02 would all log to the www directory.
+
+To log each host to a seperate directory, set the custom_config parameter to
+'rsyslog/server-hostname.conf.erb'
diff --git a/manifests/server.pp b/manifests/server.pp
index 00e042b..fdc911f 100644
--- a/manifests/server.pp
+++ b/manifests/server.pp
@@ -15,8 +15,16 @@
#
# === Examples
#
+# Defaults
+#
# class { 'rsyslog::server': }
#
+# Create seperate directory per host
+#
+# class { 'rsyslog::server':
+# custom_config => 'rsyslog/server-hostname.conf.erb'
+# }
+#
class rsyslog::server (
$enable_tcp = true,
$enable_udp = true,
@@ -27,7 +35,7 @@ class rsyslog::server (
) inherits rsyslog {
$real_content = $custom_config ? {
- '' => template("${module_name}/server.conf.erb"),
+ '' => template("${module_name}/server-default.conf.erb"),
default => template($custom_config),
}
diff --git a/spec/classes/rsyslog_server_spec.rb b/spec/classes/rsyslog_server_spec.rb
index 4f8bb62..ec2b523 100644
--- a/spec/classes/rsyslog_server_spec.rb
+++ b/spec/classes/rsyslog_server_spec.rb
@@ -1,51 +1,84 @@
require 'spec_helper'
describe 'rsyslog::server', :type => :class do
- context "osfamily = RedHat" do
- let :facts do
- {
- :osfamily => 'RedHat',
- }
- end
- context "default usage (osfamily = RedHat)" do
- let(:title) { 'rsyslog-server-basic' }
+ ['RedHat', 'Debian'].each do |osfamily|
+ context "osfamily = #{osfamily}" do
+ let :facts do
+ {
+ :osfamily => osfamily,
+ }
+ end
- it 'should compile' do
- should contain_file('/etc/rsyslog.d/server.conf')
+ context "default usage (osfamily = #{osfamily})" do
+ let(:title) { 'rsyslog-server-basic' }
+
+ it 'should compile' do
+ should contain_file('/etc/rsyslog.d/server.conf').with_content(/\(\[A-Za-z-\]\*\)--end%\/auth.log/)
+ should contain_file('/etc/rsyslog.d/server.conf').with_content(/\(\[A-Za-z-\]\*\)--end%\/messages/)
+ end
end
+
+ context "enable_onefile (osfamily = #{osfamily})" do
+ let(:title) { 'rsyslog-server-onefile' }
+ let(:params) { {'enable_onefile' => 'true'} }
+
+ it 'should compile' do
+ should_not contain_file('/etc/rsyslog.d/server.conf').with_content(/\(\[A-Za-z-\]\*\)--end%\/auth.log/)
+ should contain_file('/etc/rsyslog.d/server.conf').with_content(/\(\[A-Za-z-\]\*\)--end%\/messages/)
+ end
+ end
+
+ context "hostname_template (osfamily = #{osfamily})" do
+ let(:title) { 'rsyslog-server-onefile' }
+ let(:params) { {'custom_config' => 'rsyslog/server-hostname.conf.erb'} }
+
+ it 'should compile' do
+ should contain_file('/etc/rsyslog.d/server.conf').with_content(/%hostname%\/auth.log/)
+ should contain_file('/etc/rsyslog.d/server.conf').with_content(/%hostname%\/messages/)
+ end
+ end
+
end
end
- context "osfamily = Debian" do
+
+ context "osfamily = FreeBSD" do
let :facts do
{
- :osfamily => 'Debian',
+ :osfamily => 'freebsd',
}
end
- context "default usage (osfamily = Debian)" do
+ context "default usage (osfamily = FreeBSD)" do
let(:title) { 'rsyslog-server-basic' }
it 'should compile' do
- should contain_file('/etc/rsyslog.d/server.conf')
+ should contain_file('/etc/syslog.d/server.conf').with_content(/\(\[A-Za-z-\]\*\)--end%\/auth.log/)
+ should contain_file('/etc/syslog.d/server.conf').with_content(/\(\[A-Za-z-\]\*\)--end%\/messages/)
end
end
- end
- context "osfamily = FreeBSD" do
- let :facts do
- {
- :osfamily => 'freebsd',
- }
+ context "enable_onefile (osfamily = FreeBSD)" do
+ let(:title) { 'rsyslog-server-onefile' }
+ let(:params) { {'enable_onefile' => 'true'} }
+
+ it 'should compile' do
+ should_not contain_file('/etc/syslog.d/server.conf').with_content(/\(\[A-Za-z-\]\*\)--end%\/auth.log/)
+ should contain_file('/etc/syslog.d/server.conf').with_content(/\(\[A-Za-z-\]\*\)--end%\/messages/)
+ end
end
- context "default usage (osfamily = Debian)" do
- let(:title) { 'rsyslog-server-basic' }
-
+ context "hostname_template (osfamily = FreeBSD)" do
+ let(:title) { 'rsyslog-server-onefile' }
+ let(:params) { {'custom_config' => 'rsyslog/server-hostname.conf.erb'} }
+
it 'should compile' do
- should contain_file('/etc/syslog.d/server.conf')
+ should contain_file('/etc/syslog.d/server.conf').with_content(/%hostname%\/auth.log/)
+ should contain_file('/etc/syslog.d/server.conf').with_content(/%hostname%\/messages/)
end
end
+
end
-end
+
+end # describe 'rsyslog::server'
diff --git a/templates/server.conf.erb b/templates/server-default.conf.erb
index dbb1a5f..fdf32d1 100644
--- a/templates/server.conf.erb
+++ b/templates/server-default.conf.erb
@@ -1,27 +1,12 @@
# File is managed by puppet
-<% if scope.lookupvar('rsyslog::server::enable_udp') -%>
-# Load UDP module
-$ModLoad imudp
-<% end -%>
-
-<% if scope.lookupvar('rsyslog::server::enable_tcp') -%>
-# Load TCP module
-$ModLoad imtcp
-<% end -%>
-
-<% if scope.lookupvar('rsyslog::server::high_precision_timestamps') == false -%>
-#
-# Use traditional timestamp format.
-# To enable high precision timestamps, comment out the following line.
-#
-$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
-<% end -%>
-
-# Switch to remote ruleset
-$RuleSet remote
+<% # Common header across all templates -%>
+<%= scope.function_template(['rsyslog/server/_default-header.conf.erb']) %>
+# Log files are stored in directories matching the short hostname, excluding numbers
+# i.e. web01 web02 and web03 will all log to a the web directory
<% if scope.lookupvar('rsyslog::server::enable_onefile') == false -%>
+
# Templates
$Template dynAuthLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/auth.log"
$Template dynSyslog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/syslog"
@@ -53,15 +38,5 @@ $Template dynAllMessages,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>
*.* -?dynAllMessages
<% end -%>
-# Switch back to default ruleset
-$RuleSet RSYSLOG_DefaultRuleset
-
-<% if scope.lookupvar('rsyslog::server::enable_udp') -%>
-$InputUDPServerBindRuleset remote
-$UDPServerRun 514
-<% end -%>
-
-<% if scope.lookupvar('rsyslog::server::enable_tcp') -%>
-$InputTCPServerBindRuleset remote
-$InputTCPServerRun 514
-<% end -%>
+<% # Common footer across all templates -%>
+<%= scope.function_template(['rsyslog/server/_default-footer.conf.erb']) %>
diff --git a/templates/server-hostname.conf.erb b/templates/server-hostname.conf.erb
new file mode 100644
index 0000000..2c2e75a
--- /dev/null
+++ b/templates/server-hostname.conf.erb
@@ -0,0 +1,41 @@
+# File is managed by puppet
+
+<% # Common header across all templates -%>
+<%= scope.function_template(['rsyslog/server/_default-header.conf.erb']) %>
+
+# Log files are stored in directories matching the hostname
+<% if scope.lookupvar('rsyslog::server::enable_onefile') == false -%>
+
+# Templates
+$Template dynAuthLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/auth.log"
+$Template dynSyslog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/syslog"
+$Template dynCronLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/cron.log"
+$Template dynDaemonLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/daemon.log"
+$Template dynKernLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/kern.log"
+$Template dynUserLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/user.log"
+$Template dynMailLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/mail.log"
+$Template dynDebug,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/debug"
+$Template dynMessages,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/messages"
+
+# Rules
+auth,authpriv.* ?dynAuthLog
+*.*;auth,authpriv.none,mail.none,cron.none -?dynSyslog
+cron.* ?dynCronLog
+daemon.* -?dynDaemonLog
+kern.* -?dynKernLog
+mail.* -?dynMailLog
+user.* -?dynUserLog
+*.=info;*.=notice;*.=warn;\
+ auth.none,authpriv.none;\
+ cron.none,daemon.none;\
+ mail.none,news.none -?dynMessages
+<% else -%>
+# Template
+$Template dynAllMessages,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%hostname%/messages"
+
+# Rules
+*.* -?dynAllMessages
+<% end -%>
+
+<% # Common footer across all templates -%>
+<%= scope.function_template(['rsyslog/server/_default-footer.conf.erb']) %>
diff --git a/templates/server/_default-footer.conf.erb b/templates/server/_default-footer.conf.erb
new file mode 100644
index 0000000..7ba4750
--- /dev/null
+++ b/templates/server/_default-footer.conf.erb
@@ -0,0 +1,13 @@
+
+# Switch back to default ruleset
+$RuleSet RSYSLOG_DefaultRuleset
+
+<% if scope.lookupvar('rsyslog::server::enable_udp') -%>
+$InputUDPServerBindRuleset remote
+$UDPServerRun 514
+<% end -%>
+
+<% if scope.lookupvar('rsyslog::server::enable_tcp') -%>
+$InputTCPServerBindRuleset remote
+$InputTCPServerRun 514
+<% end -%>
diff --git a/templates/server/_default-header.conf.erb b/templates/server/_default-header.conf.erb
new file mode 100644
index 0000000..19eb173
--- /dev/null
+++ b/templates/server/_default-header.conf.erb
@@ -0,0 +1,20 @@
+<% if scope.lookupvar('rsyslog::server::enable_udp') -%>
+# Load UDP module
+$ModLoad imudp
+<% end -%>
+
+<% if scope.lookupvar('rsyslog::server::enable_tcp') -%>
+# Load TCP module
+$ModLoad imtcp
+<% end -%>
+
+<% if scope.lookupvar('rsyslog::server::high_precision_timestamps') == false -%>
+#
+# Use traditional timestamp format.
+# To enable high precision timestamps, comment out the following line.
+#
+$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
+<% end -%>
+
+# Switch to remote ruleset
+$RuleSet remote