描述:
之前我已經完成了使用ElasticSearch、kibana、filebeat、三個工具完成分布式集群收集 分布在各個ip地址上的微服務日志,這樣就可以統一的在一個服務器上查看了所有的微服務產生的日志了,避免了一個個通過工具遠程linux服務器去查看日志,極大提高了日志查看分析的效率了。當時目前我只是完成收集和查看所有日志,那么時間一長我們就會遇到問題,日志一直發到elastic服務器上,日志越來越多,我就需要一個定時刪除過期的日志數據的辦法。
功能需求:
需要定時刪除elasticSearch指定過期數據,比如只保留N天數據,超過N天前的數據,直接刪除。
解決方案:
通過萬能的百度搜索,找到了解決方案,這里我們就比如,定時刪除30天前收集的日志文件。
步驟1、在kibana控制台完成刪除N天數據的命令。
學習kibana 命令 查增刪該
官方學習地址:https://www.elastic.co/guide/cn/kibana/current/console-kibana.html
控制台可以解析像 cURL 命令這樣的語句。例如以下控制台命令
GET /_search { "query": { "match_all": {} } }
是 Elasticsearch _search API
的簡單 GET 請求。下面是同樣效果的 cURL 命令。
curl -XGET "http://localhost:9200/_search" -d' { "query": { "match_all": {} } }'
實際上,您可以復制粘貼上面的命令到控制台,它會自動轉換成控制台語句。
當敲入一行命令,控制台會給出上下文相關的提示。這些提示可以幫助您探索每條 API 參數,或者用於提高輸入速度。控制台會提示 APIs 、索引和字段名。
一旦您在左邊的面板中敲入命令,您可以點擊 URL 行邊上的綠色小三角提交這條請求到 Elasticsearch。注意,當您移動光標的時候,會跟隨着您。我們把這個叫做動作菜單。您也可以選擇寫多條請求並一起提交它們。
當請求響應后,您可以在側面的面板中看到它:
控制台用戶界面
在這個章節中會有更多關於控制台界面的詳細描述。控制台章節只介紹了基礎的用戶界面部分。
我們當然主要學習刪除命令
下面是demo代碼
POST /filebeat-*/_delete_by_query { "query": { "range": { "@timestamp": { "lt": "now-300d", "format": "epoch_millis" } } } }
其中 "lt": "now-300d", 參數表示 刪除 300天前的數據,如需指定N天前,我們只要修改 指定天數即可
下面是執行結果
步驟2、將改命令轉換成腳本
步驟如圖:
代碼:
curl -XPOST "http://127.0.0.1:9200/filebeat-*/_delete_by_query" -H 'Content-Type: application/json' -d'{
"query": {
"range": {
"@timestamp": {
"lt": "now-300d",
"format": "epoch_millis"
}
}
}
}'
將上面的代碼復制后:
windows下腳本
windows下制作成 dos 批處理文件:新建txt,修改文件后綴名為.bat 后將上面代碼拷入后保存
注意 windows 下執行 curl命令 需要安裝 環境:https://curl.haxx.se/windows/
linux下 編寫腳本
linux下新建 .sh 腳本文件
#!/bin/bash
curl -XPOST "http://127.0.0.1:9200/filebeat-*/_delete_by_query" -H 'Content-Type: application/json' -d'{
"query": {
"range": {
"@timestamp": {
"lt": "now-300d",
"format": "epoch_millis"
}
}
}
}'
步驟3、將腳本做成定時任務
到此就完成了定時批量刪除過期的 elastic 日志文件的功能。
總結 : 其實 elasticserch 可以比如類似 mysql 數據庫,kibana 類似 可視化 操作數據庫的第三方軟件 如 Navicat、PL/SQL工具。