Zipkin 环境下 ElasticSearch 内容清理

线上环境使用 Zipkin 进行微服务链路追踪,数据存储在 ElasticSearch 中,时间一久,就有一大堆日志,目前一天 1G 就已经吃不消了。 同时,线上环境 Zipkin 为强制依赖,如果不部署 Zipkin 那么在微服务互相调用的时候就会因为需要请求 Zipkin 而导致接口范围超时。 所以才折腾了个脚本,去定期清理 ES 中的索引,也算是打了个补丁吧。

ES 数据清理

一、现象

如果不删除 ES 数据,Zipkin 存入的日志会越来越多,直至磁盘写满,磁盘满了之后 Zipkin 就无法写入新的数据。

二、创建清理脚本

vim es-index-clear.sh

# /bin/bash
#只保留 7 天内的日志索引
LAST_DATA=`date -d "-7 days" "+%Y.%m.%d"`
# 删除 7 天前的索引
curl -XDELETE 'http://ip:port/*-'${LAST_DATA}

三、添加定时任务

# 编辑 crontab 文件,添加相应的任务
crontab -e
​
# 设置每天的凌晨一点清除索引
# 0 1 * * * root sh /opt/devops/es-index-clear.sh

线上上线脚本

有些地方磁盘空间小,又是离线环境,只能保留 1 天了

#!/bin/bash
DATE=`date -d "-1 days" "+%Y-%m-%d"`
echo ${DATE}
curl -XDELETE http://10.254.149.127:9200/zipkin-span-${DATE}