天天看点

CronJob删除ElasticSearch日志

当前方案

目前在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
           

尤其注意细节,有些地方需要修改,如果还是有问题,多找几篇看看,就能发现规律了