logstash的日志轮换脚本清除超过两周的日志

时间:2015-07-15 03:45:29

标签: logstash

我正在尝试从两周以上的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}

5 个答案:

答案 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