開發以前把接口日誌寫入ES時,感受設計並不合理。固然,我也不知道怎麼設計纔是合理的。總之,就是沒法像處理openresty日誌那樣,按天生成1個ES索引,這樣就能夠簡單匹配月份,直接刪除整個月的索引數據了。html
可是,如今全部接口日誌寫入進1個索引裏。我想刪除幾百天,好比200天前的數據,研究了很久。shell
下面的腳本,我找了2天,按照網上的文檔,也修改了2天。正好最近第3次開始學習shell,發現結合shell知識,解決問題仍是頗有效果。json
下面的腳本,就能夠刪除200天前的ES數據。bash
[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地址app
第三列的「yqdlog」:索引名稱curl
第七列的「bank_interfacelog_createTime」:指定刪除的時間字段ide
第八列的「now-200d」:刪除數據的時間範圍,「-200d」,就是刪除200天前的數據oop
第十列:默認,也能夠自定義學習
執行腳本:url
[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按期刪除數據