escleaner/escleaner/escleaner.py

64 lines
1.9 KiB
Python
Raw Normal View History

2016-07-09 22:35:55 -07:00
#!/usr/bin/env python3
import requests
import re
2017-04-16 23:36:38 -07:00
from datetime import datetime, timedelta
2017-05-15 08:48:05 -07:00
from urllib.parse import urlparse, urlunparse
2017-04-16 23:36:38 -07:00
2016-07-09 22:35:55 -07:00
def get_indices():
req = requests.get("{}/_cat/indices".format(es_url))
data = req.text.strip().split("\n")
2017-04-16 23:36:38 -07:00
data = [re.split(r'\s+', row)[2] for row in data]
2016-07-09 22:35:55 -07:00
data = [item for item in filter(lambda x: logstash_pattern.match(x), data)]
return sorted(data)
2017-04-16 23:36:38 -07:00
def delete_index(index, dry_run):
2016-07-09 22:35:55 -07:00
if index:
print("deleting {}".format(index))
2017-05-15 08:48:05 -07:00
del_url = "{}/{}".format(es_url, index)
2017-04-16 23:36:38 -07:00
if not dry_run:
print(requests.delete(del_url).text)
2016-07-09 22:35:55 -07:00
2017-04-16 23:36:38 -07:00
def main(url, index, days, dry_run=False):
2016-07-09 22:35:55 -07:00
global es_url
global logstash_pattern
2017-05-15 08:48:05 -07:00
es_url = urlunparse(urlparse(url)).rstrip("/")
2017-04-16 23:36:38 -07:00
logstash_pattern = re.compile(r'%s\-(([0-9]{4})\.([0-9]{2})\.([0-9]{2}))' % index)
2016-07-09 22:35:55 -07:00
deleteBefore = datetime.now() - timedelta(days=days)
2017-04-16 23:36:38 -07:00
2016-07-09 22:35:55 -07:00
indexes = get_indices()
2017-04-16 23:36:38 -07:00
2016-07-09 22:35:55 -07:00
for index in indexes:
datematch = logstash_pattern.match(index)
year = int(datematch.group(2))
month = int(datematch.group(3))
day = int(datematch.group(4))
2017-04-16 23:36:38 -07:00
2016-07-09 22:35:55 -07:00
indexDate = datetime(year=year, month=month, day=day)
2017-04-16 23:36:38 -07:00
2016-07-09 22:35:55 -07:00
if indexDate < deleteBefore:
2017-04-16 23:36:38 -07:00
delete_index(index, dry_run)
2016-07-09 22:35:55 -07:00
def shell():
import argparse
2017-04-16 23:36:38 -07:00
2016-07-09 22:35:55 -07:00
parser = argparse.ArgumentParser(description='Delete logstash indexes by age')
parser.add_argument('-u', '--url', action='store', required=True, help='Elasticsearch url')
parser.add_argument('-d', '--days', action='store', default=31, help='Maximum index age that will be kept', type=int)
parser.add_argument('-i', '--index', action='store', default="logstash", help='Index name to inspect. (Used as so: "%%s-YYYY.MM.DD")')
2017-04-16 23:36:38 -07:00
parser.add_argument('-n', '--dry-run', action='store_true', help='Dry-run mode')
2016-07-09 22:35:55 -07:00
args = parser.parse_args()
2017-04-16 23:36:38 -07:00
main(args.url, args.index, args.days, args.dry_run)
2016-07-09 22:35:55 -07:00
if __name__ == '__main__':
shell()