Logstash如何配置按日志文件日期创建对应Elasticsearch索引?
问题根因
你当前配置中的%{+YYYY-MM-dd}取的是Logstash处理日志事件的服务器当前时间,和日志文件本身的生成日期无关,所以所有日志都会写入处理当日对应的索引,自然出现所有内容进同一个索引的问题。
配置调整方案
需要分两段修改Logstash配置:
1. 新增filter段提取文件名中的日期
Logstash的file输入插件会默认把日志文件的全路径存在path字段中,我们通过grok规则从该字段提取文件名里的日期,存储到自定义字段log_date中:
filter { grok { # 如果你的path是带前缀的全路径,把匹配规则改成 ".*adminPortal-%{DATA:log_date}\.\d\.log" 即可 match => { "path" => "adminPortal-%{DATA:log_date}\.\d\.log" } } # 以下是可选配置,用于校验提取到的日期格式是否合法 date { match => [ "log_date", "yyyy-MM-dd" ] tag_on_failure => [ "invalid_log_date" ] } }
2. 修改output段的索引命名规则
把索引名中的时间引用替换为我们上一步提取到的log_date字段:
output { elasticsearch { hosts => ["localhost:9200"] index => "admin-%{log_date}" } }
修改完成后重启Logstash即可生效,不同日期的日志文件会自动写入对应日期的索引。
内容的提问来源于stack exchange,提问作者Ali farahzadi
相关产品推荐
相关产品推荐

