233 lines
6.6 KiB
Markdown
233 lines
6.6 KiB
Markdown
# logrotate Cookbook
|
|
[](http://travis-ci.org/stevendanna/logrotate)
|
|
|
|
Manages the logrotate package and provides a definition to manage
|
|
application specific logrotate configuration.
|
|
|
|
|
|
## Requirements
|
|
|
|
### Platforms
|
|
|
|
Should work on any platform that includes a 'logrotate' package and
|
|
writes logrotate configuration to /etc/logrotate.d. Tested on Ubuntu
|
|
and Centos.
|
|
|
|
|
|
### Chef
|
|
|
|
- Chef 12.5+
|
|
|
|
### Cookbooks
|
|
|
|
- none
|
|
|
|
## Recipes
|
|
|
|
### global
|
|
|
|
Generates and controls a global `/etc/logrotate.conf` file that will
|
|
include additional files generated by the `logrotate_app` definition
|
|
(see below). The contents of the configuration file is controlled
|
|
through node attributes under `node['logrotate']['global']`. The
|
|
default attributes are based on the configuration from the Ubuntu
|
|
logrotate package.
|
|
|
|
To define a valueless directive (e.g. `compress`, `copy`) simply add
|
|
an attribute named for the directive with a truthy value:
|
|
|
|
```ruby
|
|
node['logrotate']['global']['compress'] = 'any value here'
|
|
```
|
|
|
|
Note that defining a valueless directive with a falsey value will not
|
|
make it false, but will remove it:
|
|
|
|
```ruby
|
|
# Removes a defaulted 'compress' directive; does not add a 'nocompress' directive.
|
|
node.override['logrotate']['global']['compress'] = false
|
|
```
|
|
|
|
To fully override a booleanish directive like `compress`, you should
|
|
probably remove the positive form and add the negative form:
|
|
|
|
```ruby
|
|
node.override['logrotate']['global']['compress'] = false
|
|
node.override['logrotate']['global']['nocompress'] = true
|
|
```
|
|
|
|
The same is true of frequency directives; to be certain the frequency
|
|
directive you want is included in the global configuration, you should
|
|
override the ones you don't want as false:
|
|
|
|
```ruby
|
|
%w[ daily weekly yearly ].each do |freq|
|
|
node.override['logrotate']['global'][freq] = false
|
|
end
|
|
node.override['logrotate']['global']['monthly'] = true
|
|
```
|
|
|
|
To define a parameter with a value (e.g. `create`, `mail`) add an
|
|
attribute with the desired value:
|
|
|
|
```ruby
|
|
node['logrotate']['global']['create'] = '0644 root adm'
|
|
```
|
|
|
|
To define a path stanza in the global configuration (generally
|
|
unneeded because of the `logrotate_app` definition) just add an
|
|
attribute with the path as the name and a hash containing directives
|
|
and parameters as described above:
|
|
|
|
```ruby
|
|
node['logrotate']['global']['/var/log/wtmp'] = {
|
|
'missingok' => true,
|
|
'monthly' => true,
|
|
'create' => '0660 root utmp',
|
|
'rotate' => 1
|
|
}
|
|
```
|
|
|
|
`firstaction`, `prerotate`, `postrotate`, and `lastaction` scripts can
|
|
be defined either as arrays of the lines to put in the script or
|
|
multiline strings:
|
|
|
|
```ruby
|
|
node['logrotate']['global']['/var/log/foo/*.log'] = {
|
|
'missingok' => true,
|
|
'monthly' => true,
|
|
'create' => '0660 root adm',
|
|
'rotate' => 1,
|
|
'prerotate' => ['service foo start_rotate', 'logger started foo service log rotation'],
|
|
'postrotate' => <<-EOF
|
|
service foo end_rotate
|
|
logger completed foo service log rotation
|
|
EOF
|
|
}
|
|
```
|
|
|
|
|
|
Resources
|
|
-----------
|
|
### logrotate_app
|
|
|
|
This resource can be used to drop off customized logrotate config
|
|
files on a per application basis.
|
|
|
|
The resource takes the following properties:
|
|
|
|
- `path`: specifies a single path (string) or multiple paths (array)
|
|
that should have logrotation stanzas created in the config file. No
|
|
default, this must be specified.
|
|
|
|
- `cookbook`: The cookbook that continues the template for
|
|
logrotate_app config definitions. By default this is `logrotate`.
|
|
Users can provide their own template by setting this attribute to
|
|
point at a different cookbook.
|
|
|
|
- `template_name`: sets the template source, default is
|
|
"logrotate.erb".
|
|
|
|
- `template_mode`: the mode to create the logrotate template with
|
|
(default: "0644")
|
|
|
|
- `template_owner`: the owner of the logrotate template (default:
|
|
"root")
|
|
|
|
- `template_group`: the group of the logrotate template (default:
|
|
"root")
|
|
|
|
- `frequency`: sets the frequency for rotation. Default value is
|
|
'weekly'. Valid values are: hourly, daily, weekly, monthly, yearly,
|
|
see the logrotate man page for more information. Note that usually
|
|
logrotate is configured to be run by cron daily. You have to change
|
|
this configuration and run logrotate hourly to be able to really
|
|
rotate logs hourly. Hourly rotation requires logrotate v3.8.5 or
|
|
higher.
|
|
|
|
- `options`: Any logrotate configuration option that doesn't specify a
|
|
value. See the logrotate(8) manual page of v3.9.2 or earlier for
|
|
details.
|
|
|
|
In addition to these properties, any logrotate option that takes a
|
|
parameter can be used as a logrotate_app property. For example, to set
|
|
the `rotate` option you can use a resource declaration such as:
|
|
|
|
```ruby
|
|
logrotate_app 'tomcat-myapp' do
|
|
path '/var/log/tomcat/myapp.log'
|
|
frequency 'daily'
|
|
rotate 30
|
|
create '644 root adm'
|
|
end
|
|
```
|
|
|
|
See the logrotate(8) manual page of v3.9.2 or earlier for the list of
|
|
available options.
|
|
|
|
|
|
## Usage
|
|
|
|
The default recipe will ensure logrotate is always up to date.
|
|
|
|
To create application specific logrotate configs, use the
|
|
`logrotate_app` definition. For example, to rotate logs for a tomcat
|
|
application named myapp that writes its log file to
|
|
`/var/log/tomcat/myapp.log`:
|
|
|
|
```ruby
|
|
logrotate_app 'tomcat-myapp' do
|
|
path '/var/log/tomcat/myapp.log'
|
|
frequency 'daily'
|
|
rotate 30
|
|
create '644 root adm'
|
|
end
|
|
```
|
|
|
|
To rotate multiple logfile paths, specify the path as an array:
|
|
|
|
```ruby
|
|
logrotate_app 'tomcat-myapp' do
|
|
path ['/var/log/tomcat/myapp.log', '/opt/local/tomcat/catalina.out']
|
|
frequency 'daily'
|
|
create '644 root adm'
|
|
rotate 7
|
|
end
|
|
```
|
|
|
|
To specify which logrotate options, specify the options as an array:
|
|
|
|
```ruby
|
|
logrotate_app 'tomcat-myapp' do
|
|
path '/var/log/tomcat/myapp.log'
|
|
options ['missingok', 'delaycompress', 'notifempty']
|
|
frequency 'daily'
|
|
rotate 30
|
|
create '644 root adm'
|
|
end
|
|
```
|
|
|
|
## License & Authors
|
|
|
|
- Author:: Steven Danna (<steve@chef.io>)
|
|
- Author:: Scott M. Likens (<scott@likens.us>)
|
|
- Author:: Joshua Timberman (<joshua@chef.io>)
|
|
|
|
```text
|
|
Copyright 2009, Scott M. Likens
|
|
Copyright 2011-2012, Chef Software, Inc.
|
|
Copyright 2016, Steven Danna
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
```
|