我正在尝试从两周以上的logstash服务器中清除日志的最佳方法。
对于那些不知道的人,Logstash将它的日志存储在Elasticsearch中。我工作的地方有一个非常稳定的ELK堆栈(Elasticsearch / Logstash / Kibana)。
删除logstash索引的典型方法是使用像这样的curl命令:
let win:UIWindow = UIApplication.sharedApplication().delegate!.window!!
win.backgroundColor = UIColor.whiteColor()
现在我正在寻找的是一种以编程方式更改logstash索引中的日期以自动清除任何超过两周的索引。
我正在考虑使用bash来完成这项工作。
我很欣赏任何有关如何做到这一点的建议或建议你的建议!
由于
谢谢!但是你认为你可以帮助我使用auth来实现这一目标吗?
这是我到目前为止所尝试的:
#curl --user admin -XDELETE http://localhost:9200/logstash-2015.06.06
Enter host password for user 'admin':
{"acknowledged":true}
答案 0 :(得分:11)
使用Curator。要删除超过14天的索引,您可以运行此命令:
curator delete indices --older-than 14 --time-unit days --timestring %Y.%m.%d --regex '^logstash-'
答案 1 :(得分:2)
如果策展人因某种原因无法为您工作,可以运行以下bash脚本:
#!/bin/bash
: ${2?"Usage: $0 [number of days] [base url of elastic]"}
days=${1}
baseURL=${2}
curl "${baseURL}/_cat/indices?v&h=i" | grep logstash | sort --key=1 | awk -v n=${days} '{if(NR>n) print a[NR%n]; a[NR%n]=$0}' | awk -v baseURL="$baseURL" '{printf "curl -XDELETE '\''%s/%s'\''\n", baseURL, $1}' | while read x ; do eval $x ; done
答案 2 :(得分:1)
online documentation for Curator解释了许多这些细节。 URL在-help输出顶部提供:
$ curator --help
Usage: curator [OPTIONS] COMMAND [ARGS]...
Curator for Elasticsearch indices.
See http://elastic.co/guide/en/elasticsearch/client/curator/current
There's an entire sub-section on flags。在documentation for the --http_auth标志中,它说:
此标志必须在任何命令之前。
答案 3 :(得分:0)
ElasticSearch X-Pack可让您设置策略以根据年龄自动删除索引。这是一个相当复杂的解决方案,并且需要付费:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-lifecycle-management.html
Curator似乎维护得很好,支持ElasticSearch的最新版本并满足您的要求。
或者,这是一个BASH脚本。但是,由于我使用的是非POSIX date -ud
,因此无法在BSD或Mac上使用。
我每天使用systemd来运行它。
#!/usr/bin/env bash
elasticsearchURL="http://localhost:9200"
date_format="%Y.%m.%d"
today_seconds=$(date +"%s")
let seconds_per_day=24*60*60
let delay_seconds=$seconds_per_day*7
let cutoff_seconds=$today_seconds-$delay_seconds
cutoff_date=$(date -ud "@$cutoff_seconds" +"$date_format")
indices=$(curl -XGET "${elasticsearchURL}/_cat/indices" | cut -d ' ' -f 3 | grep -P "\d{4}\.\d{2}\.\d{2}")
echo "Deleting indexes created before the cutoff date $cutoff_date."
for index in $indices; do
index_date=$(echo "$index" | grep -P --only-matching "\d{4}\.\d{2}\.\d{2}")
if [[ $index_date < $cutoff_date ]]; then
echo "Deleting old index $index"
curl -XDELETE "${elasticsearchURL}/$index"
echo ""
fi
done
答案 4 :(得分:0)
为此,有一个特殊的实用程序"Curator" from Elastic。它必须安装为specified in the documentation。
然后,您需要在the configuration File中的“ hosts”参数中将地址写入ElasticSerach服务器。在Windows上,此文件应位于用户文件夹中,例如:c:\ Users \ yourUserName \ .curator \ curator.yml
然后您需要documentation创建一个带有动作“ curatorRotateLogs.yml”的文件,例如:
---
# Remember, leave a key empty if there is no value. None will be a string,
# not a Python "NoneType"
actions:
1:
action: delete_indices
description: >-
Delete indices older than 45 days (based on index name), for logstash-
prefixed indices. Ignore the error if the filter does not result in an
actionable list of indices (ignore_empty_list) and exit cleanly.
options:
ignore_empty_list: True
disable_action: False
filters:
- filtertype: pattern
kind: prefix
value: logstash-
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 14
然后通过调度程序运行:“ C:\ Program Files \ elasticsearch-curator \ curator.exe” c:\MyСoolFolder\ curatorRotateLogs.yml