当前方案
目前在k8s平台内,通过pod挂载hostpath将程序形成的日志文件传输存储到宿主机指定目录上,然后fluentd根据指定目录去搜集日志文件(JSON格式),然后通过调用elasticsearch(以下简称ES)的API将日志存储到ES中,那么问题来了,日志文件大了怎么清理?
主要清理任务
1. 每个工作节点上的日志文件
2. ES内索引和日志文件
解决方案
1. 针对宿主机上的日志文件,可以简单设置crontab任务定时清理,手动设置稍微复杂一点,但是简单快速。
cat >log_clean.sh << EOF
#!/bin/bash
echo "log_clean====`date`" >> /root/script/log_clean.log
find /var/log/logfile/ -mtime +3 -name "*.log" -exec rm -rf {} \;
EOF
设置crontab
crontab -e
#每天一点清理
0 1 * * * /bin/bash /root/script/log_clean.sh
#重启crontab使其生效
service crond restart
2. 针对ES内的日志文件通过调用API删除接口即可
#下面几处ip:port均为ES的VIP和端口
#查看ES内索引文件
http://ip:port/_cat/indices/?v
#调用api删除index
curl -XDELETE 'http://ip:port/xxx(此处是索引)'
#上面是手动删除,接下来是启动一个CronJob来删除
cat >cronjob-log-clean.yaml<< EOF
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-log-clean
namespace: efk-log
spec:
schedule: "* * */1 * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: log-clean
image: centos
args:
- /bin/sh
- -c
- curl -X DELETE "http://ip:port/logstash-`date '+%Y.%m.%d' -d '-5 days'`"#此处是清理往前第五天的日志
restartPolicy: OnFailure
EOF
尤其注意细节,有些地方需要修改,如果还是有问题,多找几篇看看,就能发现规律了