katanaFlower 2020-06-21
之前我已经完成了使用ElasticSearch、kibana、filebeat、三个工具完成分布式集群收集 分布在各个ip地址上的微服务日志,这样就可以统一的在一个服务器上查看了所有的微服务产生的日志了,避免了一个个通过工具远程linux服务器去查看日志,极大提高了日志查看分析的效率了。当时目前我只是完成收集和查看所有日志,那么时间一长我们就会遇到问题,日志一直发到elastic服务器上,日志越来越多,我就需要一个定时删除过期的日志数据的办法。
功能需求:
需要定时删除elasticSearch指定过期数据,比如只保留N天数据,超过N天前的数据,直接删除。
通过王能的百度搜索,找到了解决方案,这里我们就比如,定时删除30天前收集的日志文件。
学习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天前,我们只要修改 指定天数即可
下面是执行结果
步骤如图:
代码:
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下制作成 dos 批处理文件:新建txt,修改文件后缀名为.bat 后将上面代码拷入后保存
注意 windows 下执行 curl命令 需要安装 环境:https://curl.haxx.se/windows/
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" } } }}‘
到此就完成了定时批量删除过期的 elastic 日志文件的功能。
总结 : 其实 elasticserch 可以比如类似 mysql 数据库,kibana 类似 可视化 操作数据库的第三方软件 如 Navicat、PL/SQL工具。
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。