diff options
author | Steffen Zieger <me@saz.sh> | 2013-04-07 13:37:37 -0700 |
---|---|---|
committer | Steffen Zieger <me@saz.sh> | 2013-04-07 13:37:37 -0700 |
commit | 08c49965861137ae79620c7ca82af572f0ef024f (patch) | |
tree | 37f2661e7c324a750c290fbf2f57b29c4307a8e3 | |
parent | bf2b8f173e353d85fba4aa0eb0b57ab6a6c0c0b0 (diff) | |
parent | 43ea1899ea60f28e6d8139f53f0b0d6602525512 (diff) |
Merge pull request #24 from johanek/development
Allow server to split logs by hostname
-rw-r--r-- | README.md | 7 | ||||
-rw-r--r-- | manifests/server.pp | 10 | ||||
-rw-r--r-- | spec/classes/rsyslog_server_spec.rb | 83 | ||||
-rw-r--r-- | templates/server-default.conf.erb (renamed from templates/server.conf.erb) | 39 | ||||
-rw-r--r-- | templates/server-hostname.conf.erb | 41 | ||||
-rw-r--r-- | templates/server/_default-footer.conf.erb | 13 | ||||
-rw-r--r-- | templates/server/_default-header.conf.erb | 20 |
7 files changed, 155 insertions, 58 deletions
@@ -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 |