前面的文章有salt的安裝過程及salt模塊,不清楚的可以去看一下,這篇主要是實現nginx+php 用logrotate來對日誌進行切割,然後再簡單的使用下salt這個工具;
架構如下:
以下.pp文件均在/etc/puppet/modules/logrotate/manifests下面,內容如下
init.pp
- class logrotate (
- $backup_nginx = "/data/backup/log/nginx",
- $nginx_log = "/data/log/nginx",
- $nginx_pid = "/usr/local/nginx/nginx.pid",
- $base_cron = "/home/cron/logrotate",
- # $backup_nginx_dir = ["/data","/data/backup","/data/backup/log","/data/backup/log/nginx"],
- # $base_cron_dir = ["/home/cron","/home/cron/logrotate"],
- $backup_php = "/data/backup/log/php",
- $php_log = "/usr/local/php/var/log",
- $php_pid = "/usr/local/php/var/run/php-fpm.pid"
- ){
- case $operatingsystem {
- centos:{
- include logrotate::base
- include logrotate::addcrons
- }
- }
- }
base.pp
- class logrotate::base {
- package {"logrotate":
- ensure => present
- }
- # file {["/data","/data/backup","/data/backup/log","/data/backup/log/nginx"]:
- file {"$backup_nginx":
- ensure => present,
- }
- # file {["/home/cron","/home/cron/logrotate"]:
- file {"$base_cron":
- ensure => present,
- }
- file {"$backup_php":
- ensure => present
- }
- }
addcrons.pp
- class logrotate::addcrons {
- file {"logrotate_nginx_conf":
- owner => root,
- group => root,
- mode => 644,
- path => "/home/cron/logrotate/logrotate_nginx.conf",
- content => template('logrotate/logrotate_nginx_conf.erb'),
- require => Class["logrotate::base"]
- }
- file {"logrotate_nginx_sh":
- owner => root,
- group => root,
- mode => 644,
- path => "/home/cron/logrotate/logrotate_nginx.sh",
- content => template('logrotate/logrotate_nginx_sh.erb'),
- require => Class["logrotate::base"]
- }
- cron {"logrotate nginx":
- command => "bash /home/cron/logrotate/logrotate_nginx.sh",
- user => root,
- minute => 59,
- hour => 23,
- require => File['logrotate_nginx_conf','logrotate_nginx_sh']
- }
- file {"logrotate_php_conf":
- owner => root,
- group => root,
- mode => 644,
- path => "/home/cron/logrotate/logrotate_php.conf",
- content => template('logrotate/logrotate_php_conf.erb'),
- require => Class["logrotate::base"]
- }
- file {"logrotate_php_sh":
- owner => root,
- group => root,
- mode => 644,
- path => "/home/cron/logrotate/logrotate_php.sh",
- content => template('logrotate/logrotate_php_sh.erb'),
- require => Class["logrotate::base"]
- }
- cron {"logrotate php":
- command => "bash /home/cron/logrotate/logrotate_php.sh",
- user => root,
- minute => 59,
- hour => 23,
- require => File['logrotate_php_conf','logrotate_php_sh']
- }
- }
=================================
以下是四個.erb文件的內容
logrotate_nginx_conf.erb
- <%= nginx_log %>/*.log {
- daily
- rotate 7
- missingok
- dateext
- notifempty
- compress
- sharedscripts
- postrotate
- [ ! -f <%= nginx_pid %> ] || /bin/kill -USR1 `/bin/cat <%= nginx_pid %>`
- endscript
- }
logrotate_nginx_sh.erb
- #!/bin/bash
- BACKUP_DIR=<%= backup_nginx %> # nginx 備份日誌目錄
- NGINX_LOG_PATH=<%= nginx_log %> # nginx 原始日誌目錄
- LOGROTATE_CONF_DIR=`dirname $0` # logrotate 配置文件目錄,默認跟本腳本同目錄
- # 切割日誌
- /usr/sbin/logrotate -f $LOGROTATE_CONF_DIR/logrotate_nginx.conf
- if [ ! -d $BACKUP_DIR ]; then
- mkdir -p $BACKUP_DIR
- fi
- # 對切割完的日誌直接重定向壓縮到 BACKUP_DIR
- for log in `ls $NGINX_LOG_PATH/*-20[1-9][0-9][0,1][0-9][0-3][0-9].gz`; do
- mv $log $BACKUP_DIR/
- done
- # 刪除7天前的 nginx 備份日誌
- find $BACKUP_DIR/* -name "*.gz" -mtime 7 -type f -exec rm -f {} \;
logrotate_php_conf.erb
- <%= php_log %>/*.log {
- daily
- rotate 7
- missingok
- dateext
- notifempty
- compress
- sharedscripts
- postrotate
- [ ! -f <%= php_pid %> ] || /bin/kill -USR1 `/bin/cat <%= php_pid %>`
- endscript
- }
logrotate_php_sh.erb
- #!/bin/bash
- BACKUP_DIR=<%= backup_php %> # php 日誌備份目錄
- PHP_LOG_PATH=<%= php_log %> # php 日誌原始目錄
- LOGROTATE_CONF_DIR=`dirname $0` # logrotate 配置文件目錄,默認跟本腳本同目錄
- # 切割日誌
- /usr/sbin/logrotate -f $LOGROTATE_CONF_DIR/logrotate_php.conf
- if [ ! -d $BACKUP_DIR ]; then
- mkdir -p $BACKUP_DIR
- fi
- # 對切割完日誌進行重定向壓縮到 BACKUP_DIR
- for log in `ls $PHP_LOG_PATH/*-20[1-9][0-9][0,1][0-9][0-3][0-9].gz`; do
- mv $log $BACKUP_DIR/
- done
- # 刪除7天前的備份日誌
- find $BACKUP_DIR/* -name "*.gz" -mtime 7 -type f -exec rm -f {} \;
由base.pp可知我們是需要backup_nginx,backup_php,base_cron這些參數的目錄,這個我們可以直接用salt命令來實現
salt 'slave.domain.com' cmd.run 'mkdir -p /data/backup/log/nginx&& /data/backup/log/php&& mkdir -p /home/cron/logrotate'
salt 'slave.domain.com' cmd.run 'puppet agent --test --server func.domain.com'
下篇待續