我使用的是logstash 5.0.2版。解析一个文件,该文件将文件名作为由logstash grok过滤器解析的字段之一,但是为了可视化,我需要文件号来标识每个文件。所以我通过mutate过滤器添加了新字段add_field检查[message]中的文件名。
if 'filename_1' in [message] {
mutate { add_field => { "file_no" => "13" } }
mutate {convert => [ "file_no", "float" ] }
}
如果我检查通过stdin / stdout(rubydebug编解码器)解析,filterit显示file_no字段已正确转换。但是如果我将logstash输出发送到elasticsearch kibana,则显示该字段的数据类型中的冲突。 在那里,我能够看到file_no.keyword(作为字符串)和file_no(作为冲突),错误为:
Mapping conflict! A field is defined as several types (string, integer,
etc) across the indices that match this pattern. You may still be able to use
these conflict fields in parts of Kibana, but they will be unavailable for
functions that require Kibana to know their type. Correcting this issue will
require reindexing your data
我已经转换了添加的文件,所以为什么仍然被发送到elasticsearch作为字符串不确定。 任何帮助都会很棒。
尝试转换字段时,Kibana中没有数字选项。被监视的源日志文件没有这个数字可以直接解析为%{PATTERN_FOR_NUMBER:number_variable:int}的整数,否则这可能会更容易