elasticsearch auto delete old indices
定在crontab 每天执行
crontab -e
* 2 * * * ~/autodelete.py
Python 代码如下
#!/usr/bin/env python
# encoding:utf-8
'''
'''
__author__ = 'moryaden at qq.com'
import sys
import argparse
import re
import os
import traceback
import logging.config
import datetime
# install with `pip install elasticsearch`
# for es 0.9x, install elasticsearch-py 0.4.x
import elasticsearch
def cfgLogging():
logpath = os.path.join("log")
if 'win' not in sys.platform:
os.system("mkdir -p " + logpath)
else:
if not os.path.exists(logpath):
os.makedirs(logpath)
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'default': {'format': '[%(asctime)-25s] [%(relativeCreated)-15s] %(levelname)-10s pid:%(process)d %(message)s'},
# default': {
# 'format' : '%(asctime)s %(message)s',
# 'datefmt' : '%Y-%m-%d %H:%M:%S'
# }
},
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter': 'default'
},
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'default',
'filename' : os.path.join(logpath, 'runlog.log'),
'maxBytes': 50 * 1024 * 1024, # 10M
'backupCount': 20,
'encoding' : 'utf8',
}
},
'loggers' : {
'' : {
'level' : 'DEBUG',
'handlers' : ['console', 'file'],
'propagate' : True
}
}
}
logging.config.dictConfig(LOGGING)
def parseCmdOptions():
parser = argparse.ArgumentParser()
parser.add_argument('-n', "--nday", help = "delete indices beyond which day, could specify -1, -2 and -n",
type = int, default = -7, choices = xrange(-10, 1))
cmdoptions = parser.parse_args()
return cmdoptions
def getDeadLineDate(day = -2):
dt_today = datetime.datetime.today()
time_delta = datetime.timedelta(day)
dead_line_day = dt_today + time_delta
return dead_line_day
def run():
logger = logging.getLogger('main')
cmdoptions = parseCmdOptions()
es_hosts = ['10.0.0.1', ]
es = elasticsearch.Elasticsearch(es_hosts)
dead_line_day = getDeadLineDate(cmdoptions.nday)
date_format = '%Y.%m.%d'
d = es.indices.get_alias('logstash*')
logger.info("I see all names {}".format(d.keys()))
for name in d:
m = re.search(r"^logstash.(.*)$", name)
if m:
s_date = m.group(1)
logdate = datetime.datetime.strptime(s_date, date_format)
if dead_line_day > logdate:
ack = es.indices.delete(name)
logger.info("deleting %s, ack={}".format(ack), name)
else:
logger.info("keeping %s", name)
def main():
try:
cfgLogging()
logger = logging.getLogger("main")
run()
except SystemExit:
pass
except:
logger.info('----->>>>>>>>>> {}'.format(traceback.format_exc()))
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
pass
elasticsearch auto delete old indices的更多相关文章
- vim highlight whitespace at end of line and auto delete them
install Vundle.vim mkdir ~/.vim/bundle git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bun ...
- elasticsearch 基础 —— Delete By Query API
Delete By Query API _delete_by_query 的简单用法,就是在查询匹配到的每个文档上执行删除.例如: POST twitter/_delete_by_query { &q ...
- Elasticsearch教程(八) elasticsearch delete 删除数据(Java)
Elasticsearch的删除也是很灵活的,下次我再介绍,DeleteByQuery的方式.今天就先介绍一个根据ID删除.上代码. package com.sojson.core.elasticse ...
- elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...
- Elasticsearch系列(五)----JAVA客户端之TransportClient操作详解
Elasticsearch JAVA操作有三种客户端: 1.TransportClient 2.JestClient 3.RestClient 还有种是2.3中有的NodeClient,在5.5.1中 ...
- Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...
- 自动删除 Elasticsearch 索引
#!/bin/bash # author: Wang XiaoQiang# crontab -e# 0 0 * * * /root/script/del_esindex.sh # auto delet ...
- Elasticsearch java api操作(二)(Java High Level Rest Client)
一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...
- 2 - 基于ELK的ElasticSearch 7.8.x技术整理 - java操作篇 - 更新完毕
3.java操作ES篇 3.1.摸索java链接ES的流程 自行创建一个maven项目 3.1.1.依赖管理 点击查看代码 <properties> <ES-version>7 ...
随机推荐
- visual studio 远程服务器返回了意外响应:(417)expectation failed
解决方法: 修改devenv.exe.config文件,添加 <servicePointManager expect100Continue="false" /> C:\ ...
- iOS开发UI篇—IOS开发中Xcode的一些使用技巧
iOS开发UI篇—IOS开发中Xcode的一些使用技巧 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n 新建项目 cmd + n 新建文 ...
- hdu 1057 (simulation, use sentinel to avoid boudary testing, use swap trick to avoid extra copy.) 分类: hdoj 2015-06-19 11:58 25人阅读 评论(0) 收藏
use sentinel to avoid boudary testing, use swap trick to avoid extra copy. original version #include ...
- 《Java中的包机制》
/* 包的机制:(1) */ package lee; public class PackageTest { public void Test(int num) { System.out.printl ...
- android中图片的三级缓存cache策略(内存/文件/网络)
实现图片缓存也不难,需要有相应的cache策略.这里我采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且 ...
- UIkit框架之UIwebview
1.继承链:UIview:UIResponder:NSObject 2.使用loadHTMLString:baseURL:方法来加载本地的HTML文件,或者使用 loadRequest:方法来加载网络 ...
- yum命令详解
yum(全 称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载 ...
- Smart210学习记录------linux串口驱动
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有 ...
- 用javascript判断一个html元素是否存在的五种方法:
1. 判断表单元素是否存在(一) if("periodPerMonth" in document.theForm){ return true; }else{ return fals ...
- TextView 跑马灯
首先,写一个类,让其继承自TextView: 重写focus方法,让TextView始终是focus. public class MarqueeText extends TextView { publ ...