定在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的更多相关文章

  1. 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 ...

  2. elasticsearch 基础 —— Delete By Query API

    Delete By Query API _delete_by_query 的简单用法,就是在查询匹配到的每个文档上执行删除.例如: POST twitter/_delete_by_query { &q ...

  3. Elasticsearch教程(八) elasticsearch delete 删除数据(Java)

    Elasticsearch的删除也是很灵活的,下次我再介绍,DeleteByQuery的方式.今天就先介绍一个根据ID删除.上代码. package com.sojson.core.elasticse ...

  4. 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 ...

  5. Elasticsearch系列(五)----JAVA客户端之TransportClient操作详解

    Elasticsearch JAVA操作有三种客户端: 1.TransportClient 2.JestClient 3.RestClient 还有种是2.3中有的NodeClient,在5.5.1中 ...

  6. 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 ...

  7. 自动删除 Elasticsearch 索引

    #!/bin/bash # author: Wang XiaoQiang# crontab -e# 0 0 * * * /root/script/del_esindex.sh # auto delet ...

  8. Elasticsearch java api操作(二)(Java High Level Rest Client)

    一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...

  9. 2 - 基于ELK的ElasticSearch 7.8.x技术整理 - java操作篇 - 更新完毕

    3.java操作ES篇 3.1.摸索java链接ES的流程 自行创建一个maven项目 3.1.1.依赖管理 点击查看代码 <properties> <ES-version>7 ...

随机推荐

  1. iOS开发Swift篇—(三)字符串和数据类型

    iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容  let website = "http://www ...

  2. ubuntu 下创建桌面快捷方式

    1)新建文件eclipse.desktop,命令如下: sudo vim /usr/share/applications/eclipse.desktop 2)在新建文件中添加如下内容并保存: [Des ...

  3. JSP相关

    1.javax.servlet.jsp这个包两个接口,六个类 2.先说两个接口,分别是HttpJspPage,JspPage(JspPage是HttpJspPage的父类,JspPage 它自己继承至 ...

  4. C++指针比较的问题

    在C++里面,指针的比较是要保障type-safe的,也就是说,这两个指针必须是convertible的:从一个指针能够直接转换到另一个指针(有中间路径不算,不然都往void*转没完没了),顺序不限 ...

  5. windows核心编程---第一章 谈谈windows中的错误处理机制

        我们写的函数会用返回值表示程序执行的正确与否,使用void,就意味着程序一定不会出错.Bool类型标识true时为真,false时为假.其他类型根据需要可以定义成不同意义.       Win ...

  6. Linux的awk命令

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  7. C语言之共用体

    最近在复习C语言,特再次记录: 有时需要将几种不同类型的变量存放到同一段内存单元中.如一个int.float.char放在同一个地址开始的内存单元中.,也就是使用覆盖技术,几个变量相互覆盖,称之为共用 ...

  8. HDU 1312 Red and Black (dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...

  9. pull方法解析xml

    private void getData() {        new Thread() { public void run() {                try {              ...

  10. 程序跳转到访问一个确定的地址0x100000

    用函数指针 把这个确定的地址转化成一个函数指针 这就明白了程序中调用函数的意义 测试代码如下: #include <stdio.h> void getMemory() { printf(& ...