elasticsearch 每天在Logstash配置中为Elasticsearch创建一个新索引,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" /> elasticsearch 每天在Logstash配置中为Elasticsearch创建一个新索引,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" />

elasticsearch 每天在Logstash配置中为Elasticsearch创建一个新索引

elasticsearch 每天在Logstash配置中为Elasticsearch创建一个新索引,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration,我打算建立一个ELK堆栈,每天的JSON输入存储在创建的日志文件中,每个日期一个。我的日志库应通过这些日志监听输入,并将其存储在与日志文件条目日期对应的索引处的Elasticsearch中 我的logstash output.conf类似于: output { elasticsearch { host => localhost cluster => "elasticsearch_prod" index => "test" } } 因此,就目前

我打算建立一个ELK堆栈,每天的JSON输入存储在创建的日志文件中,每个日期一个。我的日志库应通过这些日志监听输入,并将其存储在与日志文件条目日期对应的索引处的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


我应该如何编辑日志存储配置文件以启用此功能?

回答,因为注释无法格式化,而且看起来很糟糕

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

file {
            path => "/logs/**/*my_log_file*.log"
            }
            type => "myType"
    }
这个变量在您的整个配置中都是可访问的,所以您可以使用正则表达式过滤器来解析路径之外的日期,例如使用grok,您可以这样做(注意:伪代码)

现在,您可以在“myTimeStampVar”中使用变量,并可以在输出中使用它:

elasticsearch {
            host => "127.0.0.1"
            cluster => "logstash"
            index => "events-%{myTimeStampVar}"
        }
说了这么多,我不太清楚你为什么需要这个?我认为最好让专家为你做这项工作。它将知道您日志的时间戳,并相应地为其编制索引,以便您轻松访问它。但是,上面的设置应该对您有用,我使用了一种非常类似的方法来解析客户机名称并在每个客户机基础上创建子索引,例如:myIndex-%{client}-%{+YYYY.MM.dd}

希望这有帮助

阿图尔

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


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

您需要附加通配符,例如:index=>“test-%{+YYYY.MM.dd}”@pandaadb感谢您的快速响应。除了使用系统时间戳,还有什么方法可以从日志文件名中获取时间戳吗?您可以有效地使用正则表达式,因此我们可以在这个url@AnilkumarBathula中进行所有这些测试,这是一个方便的链接。。。谢谢:)ES会自动创建日期索引吗?如果您按照我的第一条评论在索引中指定日期,它会自动创建。如果变量包含的字符串(日期)还不是索引,它也会自动创建它们。如果它们已经存在,你的日志将被添加到其中。是的,我得到了那部分。我的意思是ES是否也按日期索引数据,即使我们不手动指定按日期索引?我假设否,因为logstash输出将为ES中的每个插入指定相同的索引。不过,您可以通过简单地使用ES API并查询所有索引来测试这一点。返回的json将向您显示创建和存在的索引。
elasticsearch {
            host => "127.0.0.1"
            cluster => "logstash"
            index => "events-%{myTimeStampVar}"
        }