从文件名创建动态索引时出现问题 (filebeat)

Problem creating dynamic index from filename (filebeat)

我正在尝试创建与源文件名相同的索引名称,但它似乎不起作用,这是我的 logstash 配置文件:

input {
  beats{
 port=> 5044
 }
}

 filter {
 grok {
      match => ["source",".*\%{GREEDYDATA:app_name}"]
   }
}
  output {
    stdout {
     codec => rubydebug
      }
     elasticsearch {
      hosts => ["localhost:9200"]
     index => "%{app_name}"
   }
 }

日志示例:

07:52:29.040 [ORB.thread.pool : 0][信息] ServiceArriereGuichet - @PostConstruct ServiceArriereGuichet 2020-02-17 08:05:33 INFO 认证 - Traitement Flux XML 2020-02-18 08:27:08,603 INFO 信息:Fin de construction du flux de sortie。

模式测试:

我认为最有可能的问题可能是

  1. 使用您的源数据
  2. 您正在使用的模式

可能会使用这个 herokuapp tool 来测试你的 grok 模式,无论你是否得到了基于源数据的预期结果。

通过提供固定索引名称并测试 Elasticsearch 索引数据中 app_name 的值来排除 Grok 模式不存在的问题。

不考虑 Grok 模式问题,我建议不要按原样使用提取的值,除非您对源数据有完全控制权。相反,使用 Logstash conditional statements.

提供默认索引名称以防 grok 模式失败

我找到了解决方案,我使用 [log][file][path] 而不是 source 并且我使用 mutate 将其转换为小写,现在它正在根据源文件名创建索引。

谢谢大家!