【问题标题】:Create a new index per day for Elasticsearch in Logstash configuration在 Logstash 配置中每天为 Elasticsearch 创建一个新索引
【发布时间】:2016-02-21 08:47:34
【问题描述】:

我打算设置一个 ELK 堆栈设置,其中每日 JSON 输入存储在创建的日志文件中,每个日期一个。我的 logstash 将通过这些日志侦听输入,并将其存储到 Elasticsearch 中与日志文件条目日期相对应的索引处。

我的logstash-output.conf 类似于:

output {
  elasticsearch { 
    host => localhost
    cluster => "elasticsearch_prod"
    index => "test"
  }
}

因此,就目前而言,logstash 的所有输入都存储在 elasticsearch 的索引 test 中。我想要的是在 2015.11.19 上发生的 logstash 条目,它存储在名为 logstash-2015.11.19.log 的日志文件中,必须相应地存储在索引 test-2015.11.19 中。

我应该如何编辑我的 logstash 配置文件来启用它?

【问题讨论】:

  • 需要附加通配符,例如:index => "test-%{+YYYY.MM.dd}"
  • @pandaadb 感谢您的快速回复。有没有办法从日志文件名中获取时间戳,而不是使用系统时间戳?
  • 你可以有效地使用正则表达式,所以我们可以在这个url grokconstructor.appspot.com/do/match进行所有这些测试
  • @AnilkumarBathula 这是一个方便的链接...谢谢 :)

标签: elasticsearch logstash logstash-configuration


【解决方案1】:

回答是因为评论无法格式化,而且看起来很糟糕。

您的文件名(我假设您使用文件输入)存储在您的路径变量中,如下所示:

file {
            path => "/logs/**/*my_log_file*.log"
            }
            type => "myType"
    }

这个变量在你的整个配置中都可以访问,所以你可以做的是使用正则表达式过滤器将你的日期解析出路径,例如使用 grok,你可以做类似的事情(注意:伪代码)

if [type] == "myType" {
   grok {
      match => {
          "path" => "%{MY_DATE_PATTERN:myTimeStampVar}"
      }
   }
}

有了这个,你现在在“myTimeStampVar”中有你的变量,你可以在你的输出中使用它:

elasticsearch {
            host => "127.0.0.1"
            cluster => "logstash"
            index => "events-%{myTimeStampVar}"
        }

说了这么多,我不太清楚你为什么需要这个?我认为最好让 ES 为您完成这项工作。它将知道您的日志的时间戳并相应地对其进行索引,以便您可以轻松访问它。但是,上面的设置应该适合您,我使用了一种非常相似的方法来解析客户端名称并基于每个客户端创建子索引,例如:myIndex-%{client}-%{+YYYY.MM .dd}

希望这会有所帮助,

阿图尔

编辑:我做了一些挖掘,因为我怀疑你担心你的日志被放入错误的索引,因为它们在错误的时间被解析?如果这是正确的,解决方案不是从日志文件中解析出索引,而是从每个日志中解析出时间戳。

我假设您的每个日志行都有一个时间戳。 Logstash 将创建一个 @timestamp 字段,它是当前日期。所以这将不等于索引。但是,解决这个问题的正确方法是改变 @timestamp 字段,而不是使用日志行中的时间戳(解析的)。这样,logstash 将拥有正确的索引并将其放在那里。

【讨论】:

  • ES 会自动创建日期索引吗?
  • 如果您按照我的第一条评论在索引中指定日期,它将。如果您的变量包含一个还不是索引的字符串(日期),它也会自动创建它们。如果它们已经存在,您的日志将被添加到其中。
  • 是的,我得到了那个部分。我的意思是即使我们没有手动指定日期索引,ES 也会按日期索引数据?
  • 我认为不会,因为logstash 输出将为每个插入到您的ES 中指定相同的索引。但是,您可以通过简单地使用 ES API 并查询所有索引来进行测试。返回的 json 将显示创建和存在的索引。
猜你喜欢
  • 2021-12-16
  • 2016-06-07
  • 1970-01-01
  • 2021-01-16
  • 2016-01-19
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多