Files
puppet-tripleo/manifests/profile/base/logging/logrotate.pp
Bogdan Dobrelya 67a7dc70f2 Fix containerized logrotate configuration
Use copytruncate and 'hourly' log rotation by default.  Increase the
default max number of rotated files to 336, which corresponds to 14
days, so that default period retained as is.

With the copytruncate option enabled, logs should be hourly rotated to
decrease disk IO load when copying log files around. The default
maxsize of 10M is better maintained for often rotations done within a
day as well, so log files will not happen to become unexpectedly huge
at the end of it.

W/o copytruncate, the containerized logrotate sends no signals to
processes, as files are only renamed and not unlinked. That makes the
files deletion based filter failing, until the default period of 14
days expires. To fix that non-copytruncate case, post-rotate always
sends HUP (USR1 for httpd) signals to all processes holding open files
in the /var/log/containers host path. That also makes all services
reloaded hourly (there is still a random splay applied by cron though)
as a side effect.

With copytruncate ON, each rotation ensures the old log files will also be
deleted, so only affected services will be reloaded.

Additionally, send USR1 instead of HUP to reload httpd in containers
gracefully.

Closes-Bug: #1785659

Change-Id: I15fa0eab1625ac63fd57b6a6d5cd22a6ac85f221
Signed-off-by: Bogdan Dobrelya <bdobreli@redhat.com>
2018-08-06 18:08:47 +02:00

147 lines
4.2 KiB
Puppet

# Copyright 2017 Red Hat, Inc.
# All Rights Reserved.
#
# 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.
#
# == Class: tripleo::profile::base::logging::logrotate
#
# Installs a cron job that rotates containerized services logs.
#
# === Parameters
#
# [*step*]
# (Optional) String. The current step of the deployment
# Defaults to hiera('step')
#
# [*ensure*]
# (optional) Defaults to present.
# Valid values are present, absent.
#
# [*minute*]
# (optional) Defaults to '0'. Configures cron job for logrotate.
#
# [*hour*]
# (optional) Defaults to '*'. Configures cron job for logrotate.
#
# [*monthday*]
# (optional) Defaults to '*'. Configures cron job for logrotate.
#
# [*month*]
# (optional) Defaults to '*'. Configures cron job for logrotate.
#
# [*weekday*]
# (optional) Defaults to '*'. Configures cron job for logrotate.
#
# [*maxdelay*]
# (optional) Seconds. Defaults to 90. Should be a positive integer.
# Induces a random delay before running the cronjob to avoid running all
# cron jobs at the same time on all hosts this job is configured.
#
# [*user*]
# (optional) Defaults to 'root'. Configures cron job for logrotate.
#
# [*copytruncate*]
# (optional) Defaults to True.
# Configures the logrotate copytruncate parameter.
#
# [*delaycompress*]
# (optional) Defaults to True.
# Configures the logrotate delaycompress parameter.
#
# [*compress*]
# (optional) Defaults to True.
# Configures the logrotate compress parameter.
#
# [*maxsize*]
# (optional) Defaults to '10M'.
# Configures the logrotate maxsize parameter.
#
# [*rotation*]
# (optional) Defaults to 'hourly'.
# Configures the logrotate rotation interval.
#
# [*rotate*]
# (optional) Defaults to 336 (corresponds to 14 days).
# Configures the logrotate rotate parameter.
#
# [*purge_after_days*]
# (optional) Defaults to 14.
# Configures forced purge period for rotated logs.
# Overrides the rotation and rotate settings.
#
# DEPRECATED PARAMETERS
#
# [*size*]
# DEPRECATED: (optional) Defaults to '10M'.
# Configures the logrotate size parameter.
#
class tripleo::profile::base::logging::logrotate (
$step = Integer(hiera('step')),
$ensure = present,
$minute = 0,
$hour = '*',
$monthday = '*',
$month = '*',
$weekday = '*',
Integer $maxdelay = 90,
$user = 'root',
$copytruncate = true,
$delaycompress = true,
$compress = true,
$rotation = 'hourly',
$maxsize = '10M',
$rotate = 336,
$purge_after_days = 14,
# DEPRECATED PARAMETERS
$size = undef,
) {
if $step >= 4 {
if ($size != undef) {
warning('The size parameter is DISABLED to enforce GDPR.')
warning('Size configures maxsize instead of size.')
$maxsize = pick($size, $maxsize)
}
if $maxdelay == 0 {
$sleep = ''
} else {
$sleep = "sleep `expr \${RANDOM} \\% ${maxdelay}`; "
}
$svc = 'logrotate-crond'
$config = "/etc/${svc}.conf"
$state = "/var/lib/logrotate/${svc}.status"
$cmd = "${sleep}/usr/sbin/logrotate -s ${state} ${config}"
file { "${config}":
ensure => $ensure,
owner => $user,
group => $user,
mode => '0640',
content => template('tripleo/logrotate/containers_logrotate.conf.erb'),
}
cron { "${svc}":
ensure => $ensure,
command => "${cmd} 2>&1|logger -t ${svc}",
environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh',
user => $user,
minute => $minute,
hour => $hour,
monthday => $monthday,
month => $month,
weekday => $weekday,
}
}
}