使用 quarkus logging-gelf 扩展和 ELK 堆栈时的索引错误

Indexing Errors when using quarkus logging-gelf extension and ELK stack

我使用 7.7 版的 ELK Stack 设置了日志记录,如 https://quarkus.io/guides/centralized-log-management 中所述。

我的 logstash 管道看起来像建议的示例:

input {
    gelf {
        port => 12201
    }
}
output {
    stdout {}
    elasticsearch {
        hosts => ["http://elasticsearch:9200"]
    }
}

大多数消息都使用 logstash.* 作为索引模式显示在我的 Kibana 中。但是有些消息被丢弃了。

2020-05-28 15:30:36,565 INFO [io.quarkus] (Quarkus Main Thread) Quarkus 1.4.2.Final started in 38.335s. Listening on: http://0.0.0.0:8085 问题似乎是,字段 MessageParam0、MessageParam1、MessageParam2 等映射到日志中首次出现的类型,但实际上包含多种数据类型。 Elasticsearch 日志显示类似 ["org.elasticsearch.index.mapper.MapperParsingException: failed to parse field [MessageParam1].

的错误

Quarkus logging-gelf 扩展中是否有任何方法可以正确映射值?

ELK 可以通过查看第一个索引文档来自动创建 Elasticsearch 索引映射。这是一个非常方便的功能,但也有一些缺点。

例如,如果您有一个可以包含数字或字符串的字段,如果第一个文档包含此字段的数字,则将使用数字字段创建映射,因此您将无法为文档编制索引在此字段中包含一个字符串 ...

唯一的解决方法是预先创建映射(您只能定义导致问题的字段,其他字段将自动创建)。

这是ELK的问题,Quarkus这边也无能为力。