calendar前推n天_Shell获取ES3天的索引列表进行迁移操作
3天前所有的历史索引操作方法
生产环境ES集群已切换为冷热架构,日志保留最近3天的索引在ssd节点就可以了,超过3天的索引可以迁移到warm节点了,如何通过shell脚本去实现呢?
当前我只有一个日志索引需要这样操作,索引的时间戳是2020.11.17这样的时间格式为结尾,先通过命令获取索引的时间戳,并按照时间由近到远排序
curl -s http://es:9200/_cat/indices|awk '{print $3}'|grep ssys-log|sort -r
接下来的思路是我要截取3天之后的时间戳,通过哪个命令可以实现呢?查阅了一些资料,发现tail比较适合,具体如下:
tail -n -3 data.txt #获取文件最后3行数据tail -n +3 data.txt #获取文件3到最后一行数据
显然tail -n +3 data.txt 获取文件3到最后一行数据,符合我当前的需求,修改下命令,添加获取3天的日期列表:
curl -s http://es:9200/_cat/indices|awk '{print $3}'|grep ssys-log|sort -r|tail -n +5
PS:tail -n +3 data.txt 是获取第三行开始到最后的,我们需要保留3天的索引,所以这里应该写+4,从第4行开始,这样就是保留了前3行的数据了,考虑容错多保留1天,所以这里我改为+5了。
有了列表,就可以写个简单的for循环了
#!/bin/bashindex=`curl -s http://es:9200/_cat/indices|awk '{print $3}'|grep ssys-log|sort -r|tail -n +5`for i in $index;do echo $i; curl -XPUT http://es:9200/$i/_settings -d '{ "settings": { "index.routing.allocation.require.box_type": "warm" } }' ; sleep 10;done
有些变量还是写死的,获取到的列表会重复操作put操作,此脚本还很粗糙,对于3天前的索引可以批量操作。
只针对特定4天前当天的索引操作方法
后期针对每天的定时任务,把4天前的索引迁移过去就可以了,也避免了上个脚本列表里的重复执行。
通过date +%Y.%m.%d -d "-4 days"命令我们可以获取4天前的日期格式,如下(今天是17号)
# curl http://es:9200/ssys-log-`date +%Y.%m.%d -d "-4 days"`?pretty{ "ssys-log-2020.11.13" : { "aliases" : { }, "mappings" : { }, "settings" : { "index" : { "routing" : { "allocation" : { "require" : { "box_type" : "warm" } } }, "number_of_shards" : "3", "provided_name" : "ssys-log-2020.11.13", "creation_date" : "1605527177922", "number_of_replicas" : "1", "uuid" : "LMeHqQy-SWK2D4zsvAwTrg", "version" : { "created" : "5050299" } } } }}
现在我做个测试,关闭4天前的索引
curl -XPOST http://es:9200/ssys-log-`date +%Y.%m.%d -d "-4 days"`/_close?pretty# 查询下索引的状态curl -XGET http://es:9200/_cat/indices/ssys-log-`date +%Y.%m.%d -d "-4 days"`?h=statusclose
测试结果是符合设想的,这样设置一个定时任务,每天执行一次,就可以每次把4天前的索引关闭了。
calendar前推n天_Shell获取ES3天的索引列表进行迁移操作相关推荐
- Calendar类的小案例:获取任意年份的2月份有多少天
Calendar类的小案例:获取任意年份的2月份有多少天 public class Demo3 {public static void main(String[] args) {//1.随机输入一个年 ...
- iOS获取已安装的app列表(私有库)+ 通过包名打开应用
1.获取已安装的app列表 - (void)touss {Class lsawsc = objc_getClass("LSApplicationWorkspace");NSObje ...
- python获取当前进程id_Python进程,多进程,获取进程id,给子进程传递参数操作示例...
本文实例讲述了Python进程,多进程,获取进程id,给子进程传递参数操作.分享给大家供大家参考,具体如下: 线程与线程之间共享全局变量,进程之间不能共享全局变量. 进程与进程相互独立 (可以通过s ...
- Python计算两个numpy数组的交集(Intersection)实战:两个输入数组的交集并排序、获取交集元素及其索引、如果输入数组不是一维的,它们将被展平(flatten),然后计算交集
Python计算两个numpy数组的交集(Intersection)实战:两个输入数组的交集并排序.获取交集元素及其索引.如果输入数组不是一维的,它们将被展平(flatten),然后计算交集 目录
- Pandas获取数据列名称的列表(list):(column list)
Pandas获取数据列名称的列表(list):(column list) 目录 Pandas获取数据列名称的列表(list):(column list) #仿真数据
- ASP.NET中gridview获取当前行的索引值
在用GridView控件时,我们经常会碰到获取当前行的索引,通过索引进行许多操作.例如,可以获得当前行某一个控件元素:设置某一元素的值等等.下面结合实例介绍几种获得GridView当前行索引值的方法. ...
- Windows Store App JavaScript 开发:获取文件和文件夹列表
在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...
- php 获取日期标签的值,在php中获取标签的选定索引值
我试图从< select>中获取所选值在 PHP中标记,但我收到错误. 这就是我所做的, HTML Select Male Female PHP脚本 $Gender = $_POST[&q ...
- 获取计算机软件列表,获取计算机已安装软件列表解决方法
获取计算机已安装软件列表 Dear all, 最近小弟在做一个应用程序,就是仿造360软件管家,获取计算机里已安装软件列表, 现思路如下,根据注册表路径: 针对x86系统,HKEY_LOCAL_MAC ...
最新文章
- WINDOWS下安装MYSQL—图文详解
- 机器学习/深度学习 问题总结及解答
- Python 如何调用 Java
- vue中两种路由跳转拼接参数
- python中字符串输出乱码怎么解决_Python字符串的encode与decode研究心得乱码问题解决方法(转)...
- [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
- 巴菲特:我们会在中国找到机会
- 【Kettle】如何输出固定格式报表
- 产品经理与数据的恩怨情仇
- DAP -Link 仿真下载 STM32 教程
- android dex文件是什么,关于android:apk文件中classes.dex文件的作用
- PSP 2000 USB连接后无法显示记忆棒内容 解决办法
- HTML5期末大作业:山河旅行社网站设计——山河旅行社网站(5页) HTML+CSS+JavaScript 学生DW网页 出行 旅途 游玩
- Qt在mac上的字体
- 好趣艺术设计部落网页制作案例
- 第一个java程序(输出个人信息)
- 怎么裁剪视频?手把手教你裁剪
- git 命令 简单介绍
- Even if you get no applause, you should accept a curtain call gracefully and app
- 解析java实现模拟USB接口的功能
热门文章
- sqlserver查看用户名密码_php 连接sql server数据库
- php mvc和mvvm,mvvm模式和mvc模式的区别是什么
- Android开发之常见面试题Activity跳转生命周期变化
- Android开发之高斯模糊效果三行代码搞定附带CSDN源码请导入module
- HTML与CSS基础之子和后代元素选择器(八)
- java线程不执行_java线程池,阿里为什么不允许使用Executors?
- iOS 使用 MailCore2
- React Fiber源码逐个击破系列-scheduler
- React全栈之Instagram开源视频教程
- Spotify模式并非“敏捷涅磐”