目前方案
目前在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
尤其注意細節,有些地方需要修改,如果還是有問題,多找幾篇看看,就能發現規律了