Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1760392
  • 博文数量: 150
  • 博客积分: 660
  • 博客等级: 上士
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 11:39
文章分类

全部博文(150)

文章存档

2019年(4)

2018年(36)

2017年(53)

2016年(7)

2015年(3)

2014年(3)

2013年(27)

2012年(2)

2011年(1)

2006年(1)

2005年(13)

分类: 系统运维

2018-11-09 17:06:28

zabbix开展自动化运维探索之---zabbix remote command应用自动删除过期日志的补充

摘要

  • 目的

使上篇文章介绍的自动删除脚本更具备通用性,可以根据zabbix 监控传递过来的文件系统参数自动删除给文件系统下面的后缀为"log"的日志。

  • 方法

    • zabbix 的宏变量中有个{TRIGGER.NAME},可以传递给自动删除脚本,自动删除脚本获取该变量中包含的文件系统名称,执行删除动作;
    • 自定义删除脚本,从超过30天开始按照3天进行递减删除,直至可用空间超过20%,且保留7天内的日志不被删除;如果超过5G的日志,只保证最近的3天的;
    • 如果脚本遇到执行删除,现存日志等于7天且可用空间小于20%时发邮件报警。
  • 结论

经测试可以根绝参数正确执行删除

自定义脚本

#!/bin/sh
# 该脚本接受一个参数,即ZABBIX的宏变量{TRIGGER NAME},其中包含超过80%的文件系统名字 
# {TRIGGER NAME}示例:Free disk space is less than 20% on volume /goluk
# bash下求最后一个参数,
filesystem="${@: -1}"
# 定义大日志
large_file_size="5000M"
# 定义超期日志天数
number=30

function delete_older_logs() {
  if [ "$number" -ge "7" ] ; then
    n2=`expr "$number" - 4`
    find $filesystem -type f  -name "*.log*" -mtime +$number |xargs rm -f
    find $filesystem -type f  -name "*.out*" -mtime +$number |xargs rm -f
    find $filesystem -type f  -name "*.log"  -mtime +$n2 -size +$large_file_size |xargs rm -f
    find $filesystem -type f  -name "*.log"  -mtime +$n2 -size +$large_file_size |xargs rm -f
  else
      echo "Log files within 7 days will not be deleted."
  fi
}

if [ "$filesystem" == "" ] ; then
  echo "Nothing to delete,exit."
  exit
fi
fs_is_full=`df  --output=pcent $filesystem |tail -1 |awk -F % '{print $1}'`
while [[ "$fs_is_full" -ge "80" ]]
do
  delete_older_logs
  number=`expr "$number" - "3"`
  fs_is_full=`df  --output=pcent $filesystem |tail -1 |awk -F % '{print $1}'`
  if [ "$number" -le "7" ] && [ "$fs_is_full" -ge "80" ] ; then
    echo " Need manual clean your log files." |mail -s "$filesystem on `hostname` more than 80%" lihui@goluk.com
    exit
  fi
done
阅读(3126) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~