开发之前把接口日志写入ES时,感觉设计并不合理。当然,我也不知道怎么设计才是合理的。总之,就是无法像处理openresty日志那样,按天生成1个ES索引,这样就可以简单匹配月份,直接删除整个月的索引数据了。
但是,现在所有接口日志写入进1个索引里。我想删除几百天,比如200天前的数据,研究了好久。
下面的脚本,我找了2天,按照网上的文档,也修改了2天。正好最近第3次开始学习shell,发现结合shell知识,解决问题还是很有效果。
下面的脚本,就可以删除200天前的ES数据。[root@iZ23ejm6lkdZ ~]# cat /yqd/sh/Clean_Elasticsearch_Yqdlog.sh
#!/bin/bash
curl -X POST "10.253.40.87:9200/yqdlog/_delete_by_query?pretty" -H 'Content-Type:application/json' -d '
{
"query": {
"range": {
"bank_interfacelog_createTime": {
"gte": "now-200d",
"lte": "now",
"format": "epoch_millis"
}
}
}
}'
# echo "已清除$index 索引内200天前数据~"
第三列的“10.253.40.87:9200”:ES地址
第三列的“yqdlog”:索引名称
第七列的“bank_interfacelog_createTime”:指定删除的时间字段
第八列的“now-200d”:删除数据的时间范围,“-200d”,就是删除200天前的数据
第十列:默认,也可以自定义
执行脚本:[root@iZ23ejm6lkdZ ~]# sh /yqd/sh/Clean_Elasticsearch_Yqdlog.sh
{
"took" : 2382512,
"timed_out" : false,
"total" : 8817667,
"deleted" : 8817667,
"batches" : 8818,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0,
"failures" : [ ]
}
执行脚本过程中,ES的head插件显示“yqdlog”索引数据有明显下降趋势,但是,zabbix监控的磁盘空间反而有更大的占用。
网上的文档说,ES的删除,不会立即生效,后期会自动删除。这个问题,有待研究。
次日再看zabbix,磁盘空间好像是有下降了。
参考文档:
https://www.cnblogs.com/abkn/p/10302883.html——es定期删除数据