[FUEL-286] Added syslog option

This commit is contained in:
Vladimir Kuklin 2013-01-11 13:39:17 +04:00
parent 543f591788
commit e4f045a630
40 changed files with 958 additions and 16 deletions

View File

@ -0,0 +1,76 @@
[loggers]
keys = root, cinder
[handlers]
keys = stderr, stdout, watchedfile, syslog, null
[formatters]
keys = legacycinder, default
[logger_root]
level = WARNING
handlers = null
[logger_cinder]
level = DEBUG
handlers = syslog
qualname = cinder
[logger_amqplib]
level = WARNING
handlers = stderr
qualname = amqplib
[logger_sqlalchemy]
level = WARNING
handlers = stderr
qualname = sqlalchemy
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARNING" logs neither. (Recommended for production systems.)
[logger_boto]
level = WARNING
handlers = stderr
qualname = boto
[logger_suds]
level = INFO
handlers = stderr
qualname = suds
[logger_eventletwsgi]
level = WARNING
handlers = stderr
qualname = eventlet.wsgi.server
[handler_stderr]
class = StreamHandler
args = (sys.stderr,)
formatter = legacycinder
[handler_stdout]
class = StreamHandler
args = (sys.stdout,)
formatter = legacycinder
[handler_watchedfile]
class = handlers.WatchedFileHandler
args = ('cinder.log',)
formatter = legacycinder
[handler_syslog]
class = handlers.SysLogHandler
args = ('/dev/log', handlers.SysLogHandler.LOG_LOCAL3)
formatter = legacycinder
[handler_null]
class = nova.openstack.common.log.NullHandler
formatter = default
args = ()
[formatter_legacycinder]
class = nova.openstack.common.log.LegacyFormatter
[formatter_default]
format = %(message)s

View File

@ -13,7 +13,8 @@ class cinder::base (
$rabbit_virtual_host = '/',
$rabbit_userid = 'nova',
$package_ensure = 'present',
$verbose = 'True'
$verbose = 'True',
$use_syslog = false
) {
include cinder::params
@ -28,6 +29,15 @@ class cinder::base (
ensure => $package_ensure,
}
if $use_syslog {
cinder_config {'DEFAULT/log_config': value => "/etc/cinder/logging.conf";}
file { "cinder-logging.conf":
source=>"puppet:///cinder/logging.conf",
path => "/etc/cinder/logging.conf",
owner => "cinder",
group => "cinder",
}
}
File {
ensure => present,
owner => 'cinder',

View File

@ -0,0 +1,48 @@
[loggers]
keys = root, glance
[handlers]
keys = stderr, stdout, watchedfile, syslog, null
[formatters]
keys = legacyglance, default
[logger_root]
level = WARNING
handlers = null
[logger_glance]
level = DEBUG
handlers = syslog
qualname = glance
[handler_stderr]
class = StreamHandler
args = (sys.stderr,)
formatter = legacyglance
[handler_stdout]
class = StreamHandler
args = (sys.stdout,)
formatter = legacyglance
[handler_watchedfile]
class = handlers.WatchedFileHandler
args = ('/var/log/glance/glance.log',)
formatter = legacyglance
[handler_syslog]
class = handlers.SysLogHandler
args = ('/dev/log', handlers.SysLogHandler.LOG_LOCAL2)
formatter = legacyglance
[handler_null]
class = glance.openstack.common.log.NullHandler
formatter = default
args = ()
[formatter_legacyglance]
class = glance.openstack.common.log.LegacyFormatter
[formatter_default]
format = %(message)s

View File

@ -47,7 +47,8 @@ class glance::api(
$keystone_user = 'admin',
$enabled = true,
$sql_idle_timeout = '3600',
$sql_connection = 'sqlite:///var/lib/glance/glance.sqlite'
$sql_connection = 'sqlite:///var/lib/glance/glance.sqlite',
$use_syslog = false
) inherits glance {
# used to configure concat
@ -83,6 +84,12 @@ class glance::api(
} else {
fail("Invalid db connection ${sql_connection}")
}
if $use_syslog
{
glance_api_config {'DEFAULT/log_config': value => "/etc/glance/logging.conf";}
}
# basic service config
glance_api_config {

View File

@ -4,6 +4,8 @@ class glance(
include glance::params
file { '/etc/glance/':
ensure => directory,
owner => 'glance',
@ -11,6 +13,13 @@ class glance(
mode => '0770',
require => Package['glance']
}
file {"glance-logging.conf":
source=>"puppet:///glance/logging.conf",
path => "/etc/glance/logging.conf",
owner => "glance",
group => "glance",
require => [User['glance'],Group['glance'],File['/etc/glance/']]
}
group {'glance': gid=> 161, ensure=>present, system=>true}
user {'glance': uid=> 161, ensure=>present, system=>true, gid=>"glance", require=>Group['glance']}
User['glance'] -> Package['glance']

View File

@ -13,8 +13,15 @@ class glance::registry(
$auth_protocol = 'http',
$keystone_tenant = 'admin',
$keystone_user = 'admin',
$enabled = true
$enabled = true,
$use_syslog = false
) inherits glance {
if $use_syslog
{
glance_registry_config {'DEFAULT/log_config': value => "/etc/glance/logging.conf";}
##TODO add rsyslog module config
}
require 'keystone::python'

View File

@ -0,0 +1,42 @@
[loggers]
keys=root,keystone
[formatters]
keys=normal,normal_with_name,debug
[handlers]
keys=production,file,devel
[logger_keystone]
level=DEBUG
handlers=devel
qualname=keystone
[logger_root]
level=DEBUG
handlers=production
[handler_production]
class=handlers.SysLogHandler
formatter=normal_with_name
args=('/dev/log', handlers.SysLogHandler.LOG_LOCAL1)
[handler_file]
class=logging.handlers.WatchedFileHandler
formatter=normal_with_name
args=('/var/log/keystone/keystone.log', 'a')
[handler_devel]
class=StreamHandler
level=NOTSET
formatter=debug
args=(sys.stdout,)
[formatter_normal]
format=%(asctime)s %(levelname)s %(message)s
[formatter_normal_with_name]
format=(%(name)s): %(asctime)s %(levelname)s %(message)s
[formatter_debug]
format=(%(name)s): %(asctime)s %(levelname)s %(module)s %(funcName)s %(message)s

View File

@ -65,9 +65,19 @@ class keystone(
Keystone_config<||> ~> Exec<| title == 'keystone-manage db_sync'|>
# TODO implement syslog features
if ( $use_syslog != 'False') {
fail('use syslog currently only accepts false')
if $use_syslog
{
keystone_config {'DEFAULT/log_config': value => "/etc/keystone/logging.conf";}
file {"keystone-logging.conf":
source=>"puppet:///keystone/logging.conf",
path => "/etc/keystone/logging.conf",
owner => "keystone",
group => "keystone",
require => [User['keystone'],Group['keystone'],File['/etc/keystone']]
}
##TODO add rsyslog module config
}
include 'keystone::params'

View File

@ -0,0 +1,76 @@
[loggers]
keys = root, nova
[handlers]
keys = stderr, stdout, watchedfile, syslog, null
[formatters]
keys = legacynova, default
[logger_root]
level = WARNING
handlers = null
[logger_nova]
level = DEBUG
handlers = syslog
qualname = nova
[logger_amqplib]
level = WARNING
handlers = stderr
qualname = amqplib
[logger_sqlalchemy]
level = WARNING
handlers = stderr
qualname = sqlalchemy
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARNING" logs neither. (Recommended for production systems.)
[logger_boto]
level = WARNING
handlers = stderr
qualname = boto
[logger_suds]
level = INFO
handlers = stderr
qualname = suds
[logger_eventletwsgi]
level = WARNING
handlers = stderr
qualname = eventlet.wsgi.server
[handler_stderr]
class = StreamHandler
args = (sys.stderr,)
formatter = legacynova
[handler_stdout]
class = StreamHandler
args = (sys.stdout,)
formatter = legacynova
[handler_watchedfile]
class = handlers.WatchedFileHandler
args = ('/var/log/nova/nova.log',)
formatter = legacynova
[handler_syslog]
class = handlers.SysLogHandler
args = ('/dev/log', handlers.SysLogHandler.LOG_LOCAL0)
formatter = legacynova
[handler_null]
class = nova.openstack.common.log.NullHandler
formatter = default
args = ()
[formatter_legacynova]
class = nova.openstack.common.log.LegacyFormatter
[formatter_default]
format = %(message)s

View File

@ -38,6 +38,8 @@ class nova(
# this is how to query all resources from our clutser
$nova_cluster_id='localcluster',
$sql_connection = false,
$use_syslog = false,
$syslog_log_facility = "LOCAL0",
$image_service = 'nova.image.glance.GlanceImageService',
# these glance params should be optional
# this should probably just be configured as a glance client
@ -62,6 +64,7 @@ class nova(
#$root_helper = $::nova::params::root_helper,
$monitoring_notifications = false,
$api_bind_address = '0.0.0.0',
$remote_syslog_server = '127.0.0.1'
) inherits nova::params {
# all nova_config resources should be applied
@ -126,6 +129,33 @@ class nova(
require => Package['nova-common'],
}
#Configure logging in nova.conf
if $use_syslog
{
nova_config
{
'DEFAULT/log_config': value => "/etc/nova/logging.conf";
'DEFAULT/use_syslog': value => "True";
'DEFAULT/syslog_log_facility': value => $syslog_log_facility;
'DEFAULT/logging_context_format_string':
value => '%(levelname)s %(name)s [%(request_id)s %(user_id)s %(project_id)s] %(instance)s %(message)s';
'DEFAULT/logging_default_format_string':
value =>'%(levelname)s %(name)s [-] %(instance)s %(message)s';
}
file {"nova-logging.conf":
source=>"puppet:///nova/logging.conf",
path => "/etc/nova/logging.conf",
owner => "nova",
group => "nova",
require => [User['glance'],Group['glance'],Package['nova-common']]
}
##TODO: Add rsyslog module for nova logging to <splunkhost>
}
file { $logdir:
ensure => directory,
mode => '0751',
@ -166,7 +196,7 @@ class nova(
}
nova_config { 'DEFAULT/allow_resize_to_same_host': value => 'True' }
nova_config { 'DEFAULT/image_service': value => $image_service }
if $image_service == 'nova.image.glance.GlanceImageService' {
if $glance_api_servers {
nova_config { 'DEFAULT/glance_api_servers': value => $glance_api_servers }

View File

@ -93,6 +93,17 @@ $tenant_network_type = 'gre'
$quantum_host = $internal_virtual_ip
$use_syslog = false
if $use_syslog {
class { "::rsyslog::client":
log_local => true,
log_auth_local => true,
server => '127.0.0.1',
port => '514'
}
}
# OpenStack packages to be installed
$openstack_version = {
'keystone' => 'latest',
@ -121,6 +132,7 @@ if $::operatingsystem == 'Ubuntu'
class { 'openstack::apparmor::disable': stage => 'openstack-custom-repo' }
}
# Definition of OpenStack controller nodes.
node /fuel-controller-[\d+]/ {
class { 'openstack::controller_ha':
@ -166,6 +178,7 @@ node /fuel-controller-[\d+]/ {
galera_nodes => $controller_hostnames,
manage_volumes => $manage_volumes,
nv_physical_volume => $nv_physical_volume,
use_syslog => $use_syslog,
}
}
@ -202,6 +215,7 @@ node /fuel-compute-[\d+]/ {
db_host => $internal_virtual_ip,
ssh_private_key => 'puppet:///ssh_keys/openstack',
ssh_public_key => 'puppet:///ssh_keys/openstack.pub',
use_syslog => $use_syslog,
}
}
@ -229,7 +243,8 @@ node /fuel-quantum/ {
tenant_network_type => $tenant_network_type,
external_ipinfo => $external_ipinfo,
segment_range => $segment_range,
api_bind_address => $internal_address
api_bind_address => $internal_address,
use_syslog => $use_syslog,
}
class { 'openstack::auth_file':

View File

@ -96,7 +96,15 @@ $quantum_db_dbname = 'quantum'
$tenant_network_type = 'gre'
$quantum_host = $internal_virtual_ip
$use_syslog = false
if $use_syslog {
class { "::rsyslog::client":
log_local => true,
log_auth_local => true,
server => '127.0.0.1',
port => '514'
}
}
# OpenStack packages to be installed
$openstack_version = {
'keystone' => 'latest',
@ -172,6 +180,7 @@ class compact_controller {
manage_volumes => $manage_volumes,
galera_nodes => $controller_hostnames,
nv_physical_volume => $nv_physical_volume,
use_syslog => $use_syslog,
}
class { 'swift::keystone::auth':
password => $swift_user_password,
@ -270,6 +279,7 @@ node /fuel-compute-[\d+]/ {
db_host => $internal_virtual_ip,
ssh_private_key => 'puppet:///ssh_keys/openstack',
ssh_public_key => 'puppet:///ssh_keys/openstack.pub',
use_syslog => $use_syslog,
}
}
@ -297,7 +307,8 @@ node /fuel-quantum/ {
tenant_network_type => $tenant_network_type,
segment_range => $segment_range,
external_ipinfo => $external_ipinfo,
api_bind_address => $internal_address
api_bind_address => $internal_address,
use_syslog => $use_syslog,
}
class { 'openstack::auth_file':

View File

@ -96,6 +96,15 @@ $quantum_db_dbname = 'quantum'
$tenant_network_type = 'gre'
$quantum_host = $internal_virtual_ip
$use_syslog = false
if $use_syslog {
class { "::rsyslog::client":
log_local => true,
log_auth_local => true,
server => '127.0.0.1',
port => '514'
}
}
# OpenStack packages to be installed
$openstack_version = {
'keystone' => 'latest',
@ -171,6 +180,7 @@ class compact_controller {
manage_volumes => $manage_volumes,
galera_nodes => $controller_hostnames,
nv_physical_volume => $nv_physical_volume,
use_syslog => $use_syslog,
}
class { 'swift::keystone::auth':
@ -273,6 +283,7 @@ node /fuel-compute-[\d+]/ {
cinder => $cinder,
ssh_private_key => 'puppet:///ssh_keys/openstack',
ssh_public_key => 'puppet:///ssh_keys/openstack.pub',
use_syslog => $use_syslog,
}
}
@ -301,7 +312,8 @@ node /fuel-quantum/ {
tenant_network_type => $tenant_network_type,
segment_range => $segment_range,
external_ipinfo => $external_ipinfo,
api_bind_address => $internal_address
api_bind_address => $internal_address,
use_syslog => $use_syslog,
}
class { 'openstack::auth_file':

View File

@ -97,6 +97,15 @@ $quantum_db_dbname = 'quantum'
$tenant_network_type = 'gre'
$quantum_host = $internal_virtual_ip
$use_syslog = false
if $use_syslog {
class { "::rsyslog::client":
log_local => true,
log_auth_local => true,
server => '127.0.0.1',
port => '514'
}
}
# OpenStack packages to be installed
$openstack_version = {
'keystone' => 'latest',
@ -171,6 +180,7 @@ node /fuel-controller-[\d+]/ {
manage_volumes => $manage_volumes,
galera_nodes => $controller_hostnames,
nv_physical_volume => $nv_physical_volume,
use_syslog => $use_syslog,
}
class { 'swift::keystone::auth':
@ -213,6 +223,7 @@ node /fuel-compute-[\d+]/ {
db_host => $internal_virtual_ip,
ssh_private_key => 'puppet:///ssh_keys/openstack',
ssh_public_key => 'puppet:///ssh_keys/openstack.pub',
use_syslog => $use_syslog,
}
}
@ -291,7 +302,8 @@ node /fuel-quantum/ {
tenant_network_type => $tenant_network_type,
segment_range => $segment_range,
external_ipinfo => $external_ipinfo,
api_bind_address => $internal_address
api_bind_address => $internal_address,
use_syslog => $use_syslog,
}
class { 'openstack::auth_file':

View File

@ -67,6 +67,14 @@ $quantum_host = $controller_node_address
$sql_connection = "mysql://nova:${nova_db_password}@${controller_node_internal}/nova"
$quantum_sql_connection = "mysql://${quantum_db_user}:${quantum_db_password}@${quantum_host}/${quantum_db_dbname}"
if $use_syslog {
class { "::rsyslog::client":
log_local => true,
log_auth_local => true,
server => '127.0.0.1',
port => '514'
}
}
# OpenStack packages to be installed
$openstack_version = {
'keystone' => 'latest',
@ -126,6 +134,7 @@ node /fuel-controller-[\d+]/ {
cinder_iscsi_bind_iface => $cinder_iscsi_bind_iface,
manage_volumes => $manage_volumes,
nv_physical_volume => $nv_physical_volume,
use_syslog => $use_syslog,
}
class { 'openstack::auth_file':
@ -165,5 +174,6 @@ node /fuel-compute-[\d+]/ {
db_host => $conrtoller_node_internal,
manage_volumes => $manage_volumes,
verbose => $verbose,
use_syslog => $use_syslog,
}
}

View File

@ -95,12 +95,12 @@ class openstack::compute (
$ssh_private_key = undef,
$ssh_public_key = undef,
# if the cinder management components should be installed
$cinder = 'false',
$cinder_user_password = 'cinder_user_pass',
$cinder_db_password = 'cinder_db_pass',
$cinder_db_user = 'cinder',
$cinder_db_dbname = 'cinder',
$db_host = '127.0.0.1',
$use_syslog = false,
) {
@ -165,6 +165,7 @@ class openstack::compute (
glance_api_servers => $glance_api_servers,
verbose => $verbose,
rabbit_host => $rabbit_host,
use_syslog => $use_syslog,
}
if ($cinder) {
@ -182,6 +183,7 @@ class openstack::compute (
auth_host => $service_endpoint,
bind_host => false,
cinder_user_password => $cinder_user_password,
use_syslog => $use_syslog,
}
} else {
@ -320,6 +322,7 @@ class openstack::compute (
rabbit_host => $rabbit_nodes ? { false => $rabbit_host, default => $rabbit_nodes },
rabbit_user => $rabbit_user,
rabbit_password => $rabbit_password,
use_syslog => $use_syslog,
#sql_connection => $quantum_sql_connection,
}

View File

@ -152,6 +152,7 @@ class openstack::controller (
$galera_nodes = ['127.0.0.1'],
$manage_volumes = false,
$nv_physical_volume = undef,
$use_syslog => false,
) {
# Ensure things are run in order
@ -229,6 +230,7 @@ class openstack::controller (
quantum_user_password => $quantum_user_password,
enabled => $enabled,
package_ensure => $::openstack_keystone_version,
use_syslog => $use_syslog,
}
@ -246,7 +248,8 @@ class openstack::controller (
bind_host => $api_bind_address,
enabled => $enabled,
glance_backend => $glance_backend,
registry_host => $service_endpoint,
registry_host => $service_endpoint,
use_syslog => $use_syslog,
}
######## BEGIN NOVA ###########
@ -309,7 +312,8 @@ class openstack::controller (
exported_resources => $export_resources,
enabled_apis => $enabled_apis,
api_bind_address => $api_bind_address,
ensure_package => $::openstack_version['nova']
ensure_package => $::openstack_version['nova'],
use_syslog => $use_syslog,
}
######### Cinder Controller Services ########
@ -332,6 +336,7 @@ class openstack::controller (
bind_host => $api_bind_address,
iscsi_bind_host => $cinder_iscsi_bind_addr,
cinder_user_password => $cinder_user_password,
use_syslog => $use_syslog,
}
} else {
if $manage_volumes {

View File

@ -87,7 +87,7 @@ class openstack::controller_ha (
$rabbit_nodes, $memcached_servers, $export_resources, $glance_backend='file', $swift_proxies=undef,
$quantum = false, $quantum_user_password, $quantum_db_password, $quantum_db_user = 'quantum',
$quantum_db_dbname = 'quantum', $cinder = false, $cinder_iscsi_bind_iface = false, $tenant_network_type = 'gre', $segment_range = '1:4094',
$nv_physical_volume = undef, $manage_volumes = false,$galera_nodes,
$nv_physical_volume = undef, $manage_volumes = false,$galera_nodes, $use_syslog = false,
) {
$which = $::hostname ? { $master_hostname => 0, default => 1 }
@ -287,6 +287,7 @@ local0.* -/var/log/haproxy.log'
nv_physical_volume => $nv_physical_volume,
# turn on SWIFT_ENABLED option for Horizon dashboard
swift => $glance_backend ? { 'swift' => true, default => false },
use_syslog => $use_syslog,
}
class { 'openstack::auth_file':

View File

@ -73,6 +73,7 @@ class openstack::nova::controller (
$ensure_package = present,
$enabled_apis = 'ec2,osapi_compute,metadata',
$api_bind_address = '0.0.0.0',
$use_syslog = false,
) {
# Configure the db string
@ -145,7 +146,8 @@ if ($rabbit_nodes)
verbose => $verbose,
rabbit_host => $rabbit_connection,
ensure_package => $ensure_package,
api_bind_address => $api_bind_address
api_bind_address => $api_bind_address,
use_syslog => $use_syslog,
}
}

View File

@ -28,6 +28,7 @@ class openstack::quantum_router (
$quantum_db_password = 'quantum_pass',
$quantum_user_password = 'quantum_pass',
$tenant_network_type = 'gre',
$use_syslog = false,
)
{
# Set up Quantum
@ -42,6 +43,7 @@ class openstack::quantum_router (
# sql_connection => $quantum_sql_connection,
verbose => $verbose,
debug => $verbose,
use_syslog => $use_syslog,
}
class { 'quantum::plugins::ovs':

View File

@ -0,0 +1,77 @@
[loggers]
keys = root, quantum
[handlers]
keys = stderr, stdout, watchedfile, syslog, null
[formatters]
keys = legacyquantum, default
[logger_root]
level = WARNING
handlers = null
[logger_quantum]
level = DEBUG
handlers = syslog
qualname = quantum
[logger_amqplib]
level = WARNING
handlers = stderr
qualname = amqplib
[logger_sqlalchemy]
level = WARNING
handlers = stderr
qualname = sqlalchemy
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARNING" logs neither. (Recommended for production systems.)
[logger_boto]
level = WARNING
handlers = stderr
qualname = boto
[logger_suds]
level = INFO
handlers = stderr
qualname = suds
[logger_eventletwsgi]
level = WARNING
handlers = stderr
qualname = eventlet.wsgi.server
[handler_stderr]
class = StreamHandler
args = (sys.stderr,)
formatter = legacyquantum
[handler_stdout]
class = StreamHandler
args = (sys.stdout,)
formatter = legacyquantum
[handler_watchedfile]
class = handlers.WatchedFileHandler
args = ('/var/log/quantum/quantum.log',)
formatter = legacyquantum
[handler_syslog]
class = handlers.SysLogHandler
args = ('/dev/log', handlers.SysLogHandler.LOG_LOCAL4)
formatter = legacyquantum
[handler_null]
class = quantum.openstack.common.log.NullHandler
formatter = default
args = ()
[formatter_legacyquantum]
class = quantum.openstack.common.log.LegacyFormatter
[formatter_default]
format = %(message)s

View File

@ -20,6 +20,7 @@ class quantum (
$rabbit_port = '5672',
$rabbit_user = 'guest',
$rabbit_virtual_host = '/',
$use_syslog = false
) {
include 'quantum::params'
@ -76,7 +77,17 @@ class quantum (
'DEFAULT/rabbit_password': value => $rabbit_password;
'DEFAULT/rabbit_virtual_host': value => $rabbit_virtual_host;
}
if $use_syslog
{
quantum_config {'DEFAULT/log_config': value => "/etc/quantum/logging.conf";}
file {"quantum-logging.conf":
source=>"puppet:///quantum/logging.conf",
path => "/etc/quantum/logging.conf",
owner => "quantum",
group => "quantum",
}
}
# SELINUX=permissive
if !defined(Class['selinux']) and ($::osfamily == 'RedHat') {
class { 'selinux' : }

View File

@ -0,0 +1,8 @@
name 'saz-rsyslog'
version '1.1.4'
source 'UNKNOWN'
author 'saz'
license 'Apache License, Version 2.0'
summary 'UNKNOWN'
description 'Manage rsyslog client and server via Puppet'
project_page 'https://github.com/saz/puppet-rsyslog'

View File

@ -0,0 +1,80 @@
# puppet-rsyslog
================
Manage rsyslog client and server via Puppet
## REQUIREMENTS
* Puppet >=2.6 if using parameterized classes
* Currently supports Ubuntu >=11.04 & Debian running rsyslog >=4.5
## USAGE
### Client
#### Using default values
```
class { 'rsyslog::client': }
```
#### Variables and default values
```
class { 'rsyslog::client':
log_remote => true,
remote_type => 'tcp',
log_local => false,
log_auth_local => false,
custom_config => undef,
server => 'log',
port => '514',
}
```
### Server
#### Using default values
```
class { 'rsyslog::server': }
```
#### Variables and default values
```
class { 'rsyslog::server':
enable_tcp => true,
enable_udp => true,
server_dir => '/srv/log/',
custom_config => undef,
high_precision_timestamps => false,
}
```
Both can be installed at the same time.
## PARAMETERS
The following lists all the class parameters this module accepts.
RSYSLOG::SERVER CLASS PARAMETERS VALUES DESCRIPTION
--------------------------------------------------------------
enable_tcp true,false Enable TCP listener. Defaults to true.
enable_udp true,false Enable UDP listener. Defaults to true.
server_dir STRING Folder where logs will be stored on the server. Defaults to '/srv/log/'
custom_config STRING Specify your own template to use for server config. Defaults to undef. Example usage: custom_config => 'rsyslog/my_config.erb'
high_precision_timestamps true,false Whether or not to use high precision timestamps.
RSYSLOG::CLIENT CLASS PARAMETERS VALUES DESCRIPTION
--------------------------------------------------------------
log_remote true,false Log Remotely. Defaults to true.
remote_type 'tcp','udp' Which protocol to use when logging remotely. Defaults to 'tcp'.
log_local true,false Log locally. Defualts to false.
log_auth_local true,false Just log auth facility locally. Defaults to false.
custom_config STRING Specify your own template to use for client config. Defaults to undef. Example usage: custom_config => 'rsyslog/my_config.erb
server STRING Rsyslog server to log to. Will be used in the client configuration file.
### Other notes
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.

View File

@ -0,0 +1,3 @@
# File is managed by puppet
RSYSLOGD_OPTIONS="-c4"

View File

@ -0,0 +1,24 @@
class rsyslog::client (
$log_remote = true,
$remote_type = 'tcp',
$log_local = false,
$log_auth_local = false,
$custom_config = undef,
$server = 'log',
$port = '514'
) inherits rsyslog {
$content_real = $custom_config ? {
'' => template("${module_name}/client.conf.erb"),
default => template($custom_config),
}
file { $rsyslog::params::client_conf:
ensure => present,
owner => root,
group => $rsyslog::params::run_group,
content => $content_real,
require => Class['rsyslog::config'],
notify => Class['rsyslog::service'],
}
}

View File

@ -0,0 +1,37 @@
class rsyslog::config {
file { $rsyslog::params::rsyslog_d:
owner => root,
group => $rsyslog::params::run_group,
purge => true,
recurse => true,
force => true,
require => Class["rsyslog::install"],
ensure => directory,
}
file { $rsyslog::params::rsyslog_conf:
owner => root,
group => $rsyslog::params::run_group,
ensure => file,
content => template("${module_name}/rsyslog.conf.erb"),
require => Class["rsyslog::install"],
notify => Class["rsyslog::service"],
}
file { $rsyslog::params::rsyslog_default:
owner => root,
group => $rsyslog::params::run_group,
ensure => file,
source => "puppet:///modules/rsyslog/rsyslog_default",
require => Class["rsyslog::install"],
notify => Class["rsyslog::service"],
}
file { $rsyslog::params::spool_dir:
owner => root,
group => $rsyslog::params::run_group,
ensure => directory,
require => Class["rsyslog::install"],
notify => Class["rsyslog::service"],
}
}

View File

@ -0,0 +1,19 @@
define rsyslog::imfile(
$file_name,
$file_tag,
$file_facility,
$polling_interval = 10,
$file_severity = 'notice',
$run_file_monitor = true
) {
include rsyslog::params
file { "${rsyslog::params::rsyslog_d}${name}.conf":
ensure => file,
owner => 'root',
group => $rsyslog::params::run_group,
content => template('rsyslog/imfile.erb'),
require => Class['rsyslog::install'],
notify => Class['rsyslog::service'],
}
}

View File

@ -0,0 +1,3 @@
class rsyslog {
include rsyslog::params, rsyslog::install, rsyslog::config, rsyslog::service
}

View File

@ -0,0 +1,9 @@
class rsyslog::install {
package { $rsyslog::params::rsyslog_package_name:
ensure => $rsyslog::params::package_status,
}
package { $rsyslog::params::relp_package_name:
ensure => $rsyslog::params::package_status
}
}

View File

@ -0,0 +1,42 @@
class rsyslog::params {
case $::operatingsystem {
ubuntu, debian: {
$rsyslog_package_name = 'rsyslog'
$relp_package_name = 'rsyslog-relp'
$package_status = 'latest'
$rsyslog_d = '/etc/rsyslog.d/'
$rsyslog_conf = '/etc/rsyslog.conf'
$rsyslog_default = '/etc/default/rsyslog'
$run_user = 'root'
$run_group = 'root'
$log_user = 'root'
$log_group = 'adm'
$spool_dir = '/var/spool/rsyslog/'
$service_name = 'rsyslog'
$client_conf = "${rsyslog_d}client.conf"
$server_conf = "${rsyslog_d}server.conf"
}
freebsd: {
$rsyslog_package_name = 'rsyslog5'
$relp_package_name = 'rsyslog5-relp'
$package_status = 'present'
$rsyslog_d = '/etc/syslog.d/'
$rsyslog_conf = '/etc/syslog.conf'
$rsyslog_default = '/etc/defaults/syslogd'
$run_user = 'root'
$run_group = 'wheel'
$log_user = 'root'
$log_group = 'wheel'
$spool_dir = '/var/spool/syslog/'
$service_name = 'syslogd'
$client_conf = "${rsyslog_d}client.conf"
$server_conf = "${rsyslog_d}server.conf"
}
default: {
fail("Unsupported platform: ${::operatingsystem}")
}
}
}

View File

@ -0,0 +1,20 @@
class rsyslog::server (
$enable_tcp = true,
$enable_udp = true,
$server_dir = '/srv/log/',
$custom_config = undef,
$high_precision_timestamps = false
) inherits rsyslog {
file { $rsyslog::params::server_conf:
ensure => present,
owner => root,
group => $rsyslog::params::run_group,
content => $custom_config ? {
'' => template("${module_name}/server.conf.erb"),
default => template($custom_config),
},
require => Class['rsyslog::config'],
notify => Class['rsyslog::service'],
}
}

View File

@ -0,0 +1,7 @@
class rsyslog::service {
service { $rsyslog::params::service_name:
ensure => running,
enable => true,
require => Class["rsyslog::config"],
}
}

View File

@ -0,0 +1,6 @@
--format
s
--colour
--loadby
mtime
--backtrace

View File

@ -0,0 +1,18 @@
require 'pathname'
dir = Pathname.new(__FILE__).parent
$LOAD_PATH.unshift(dir, dir + 'lib', dir + '../lib')
require 'mocha'
require 'puppet'
gem 'rspec', '=1.2.9'
require 'spec/autorun'
Spec::Runner.configure do |config|
config.mock_with :mocha
end
# We need this because the RAL uses 'should' as a method. This
# allows us the same behaviour but with a different method name.
class Object
alias :must :should
end

View File

@ -0,0 +1,86 @@
# file is managed by puppet
# An "In-Memory Queue" is created for remote logging.
$WorkDirectory <%= scope.lookupvar('rsyslog::params::spool_dir') -%> # where to place spool files
$ActionQueueFileName queue # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinety retries if host is down
<% if scope.lookupvar('rsyslog::client::log_remote') -%>
# Log to remote syslog server using <%= scope.lookupvar('rsyslog::client::remote_type') %>
<% if scope.lookupvar('rsyslog::client::remote_type') == 'tcp' -%>
*.* @@<%= scope.lookupvar('rsyslog::client::server') -%>:<%= scope.lookupvar('rsyslog::client::port') -%>;RSYSLOG_ForwardFormat
<% else -%>
*.* @<%= scope.lookupvar('rsyslog::client::server') -%>:<%= scope.lookupvar('rsyslog::client::port') -%>;RSYSLOG_ForwardFormat
<% end -%>
<% end -%>
<% if scope.lookupvar('rsyslog::client::log_auth_local') or scope.lookupvar('rsyslog::client::log_local') -%>
# We log locally, restore to default format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Log auth messages locally
auth,authpriv.* /var/log/auth.log
<% end -%>
<% if scope.lookupvar('rsyslog::client::log_local') -%>
# First some standard log files. Log by facility.
#
*.*;auth,authpriv.none -/var/log/syslog
cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
#
# Logging for INN news system.
#
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
#
# Some "catch-all" log files.
#
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
# news.=crit;news.=err;news.=notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warn /dev/tty8
# The named pipe /dev/xconsole is for the `xconsole' utility. To use it,
# you must invoke `xconsole' with the `-file' option:
#
# $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
# busy site..
#
daemon.*;mail.*;\
news.err;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole
<% end -%>

View File

@ -0,0 +1,11 @@
$ModLoad imfile
$InputFileName <%= file_name %>
$InputFileTag <%= file_tag %>
$InputFileStateFile state-<%= name %>
$InputFileSeverity <%= file_severity %>
$InputFileFacility <%= file_facility %>
$InputFilePollingInterval <%= polling_interval %>
<% if run_file_monitor == true -%>
$InputRunFileMonitor
<% end -%>

View File

@ -0,0 +1,33 @@
# file is managed by puppet
#################
#### MODULES ####
#################
$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
###########################
#### GLOBAL DIRECTIVES ####
###########################
#
# Set the default permissions for all log files.
#
$FileOwner <%= scope.lookupvar('rsyslog::params::log_user') %>
$FileGroup <%= scope.lookupvar('rsyslog::params::log_group') %>
$FileCreateMode 0640
$DirCreateMode 0755
$PrivDropToUser <%= scope.lookupvar('rsyslog::params::run_user') %>
$PrivDropToGroup <%= scope.lookupvar('rsyslog::params::run_group') %>
#
# Include all config files in <%= scope.lookupvar('rsyslog::params::rsyslog_d') %>
#
$IncludeConfig <%= scope.lookupvar('rsyslog::params::rsyslog_d') -%>*.conf
#
# Emergencies are sent to everybody logged in.
#
*.emerg *

View File

@ -0,0 +1,59 @@
# 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
# 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"
$Template dynCronLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/cron.log"
$Template dynDaemonLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/daemon.log"
$Template dynKernLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/kern.log"
$Template dynUserLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/user.log"
$Template dynMailLog,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/mail.log"
$Template dynDebug,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/debug"
$Template dynMessages,"<%= scope.lookupvar('rsyslog::server::server_dir') -%>%source:R,ERE,1,DFLT:([A-Za-z-]*)--end%/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
# 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 -%>

View File

@ -0,0 +1 @@
include rsyslog