天天看點

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
           

尤其注意細節,有些地方需要修改,如果還是有問題,多找幾篇看看,就能發現規律了