1、需求
在前面部署的ELKB日志系统,在实际应用过程中,每天都会产生大量的日志信息,尤其是在开发环境,由于日志级别比较低,每天都会产生大量的日志。为了避免ELK系统过度消耗磁盘和内存,需要考虑定期删除Elasticsearch中的相关日志索引。这里通过Linux系统的crontab命令,并结合Elasticsearch的api实现定期删除日志的目的。
2、编写删除日志索引的脚本
1>、编辑deleteEsData.sh文件
#!/bin/bash
#filename:deleteEsData.sh
today=`date +%Y.%m.%d`;
echo "今天是${today}"
# 获得要删除的日期
# 不指定参数时,默认删除3天前以tomcat-开头的数据(因为是凌晨删除,所以不含当天)
daynum=3
esday=`date -d '-'"${daynum}"' day' +%Y.%m.%d`;
echo "${daynum}天前是${esday}"
curl -XDELETE http://192.168.0.182:9200/tomcat-${esday}
echo "${today}执行完成,tomcat-${esday}文件已经被删除或不存在."
其中,“curl -XDELETE http://192.168.0.182:9200/tomcat-${esday}”是通过调用Elasticsearch的API实现删除指定日期的目的。需要注意的是,Elasticsearch的IP和端口号,同时需要注意索引的格式,我这里使用”tomcat-yyyy.mm.dd”的格式,如下所示:
2>、设置脚本权限
chmod 777 deleteEsData.sh
3>、通过执行脚本,验证是否正确。
[root@hostnode soft]# ./deleteEsData.sh
今天是2020.07.09
3天前是2020.07.06
{"acknowledged":true}2020.07.09执行完成
如果执行脚本出现“permission denied”错误,一般都是因为第二步设置权限没有执行或者执行不正确造成的。
3、执行crontab命令,设置定期任务
1>、查看crontab服务状态
service crond status
2>、设置定时计划
首先,如下命令,进入编辑状态(每天晚上两点执行删除日志命令)
crontab –e
然后,输入定时的脚本,如下所示,并保存。
0 2 * * * sh /usr/local/soft/deleteEsData.sh >> /usr/local/soft/deleteEsDataRun.log>&1
crontab -l
4、设置过程中的异常
1>、运行deleteEsData.sh报错-bash: ./deleteEsData.sh: Permission denied。
权限不够,需要执行下面命令即可。
chmod 777 deleteEsData.sh
#或
chmod +x deleteEsData.sh
2>、设置定时计划时,出现/tmp/crontab bad minute。
"/tmp/crontab.sdXvj4":5: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit?
出现上述错误时,一般都是crontab格式错误,即没有按照规则写。修改完显示“crontab: installing new crontab”表示成功。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68818.html