elasticsearch 在一个文档中使用Logstash动态索引KV文件的内容
我有许多具有以下结构的属性文件key=Value,示例数据为:elasticsearch 在一个文档中使用Logstash动态索引KV文件的内容,elasticsearch,logstash,elasticsearch,Logstash,我有许多具有以下结构的属性文件key=Value,示例数据为: rejets.cache.temporaire.time=60 data.cache.referentiel.time=10 data.cache.temporaire.time=60 data.cache.getinfos.time=200 输入文件配置: file { path => [ "C:/logstash-7.3.1/data/input/data_conf_recette/keyvalue/*"
rejets.cache.temporaire.time=60
data.cache.referentiel.time=10
data.cache.temporaire.time=60
data.cache.getinfos.time=200
输入文件配置:
file {
path => [ "C:/logstash-7.3.1/data/input/data_conf_recette/keyvalue/*" ]
start_position => beginning
type => "config_file_kv_recette"
codec => multiline {
pattern => "\n"
what => "previous"
negate => true
}
}
我想将此文件索引为文档elasticsearch DynamicCali(字段名称),如下所示:
{
rejets.cache.temporaire.time:60
data.cache.referentiel.time:10
data.cache.temporaire.time:60
data.cache.getinfos.time:200
}
我使用了以下配置,但在我的索引中发现每个字段在一个文档中被索引,因此在我的例子中,我有4个文档被索引:
mutate {
gsub => [ "message", "[\\\\]r", "esp" ]
gsub => [ "message", "[\\\\]n", "ace" ]
}
ruby {
code => "begin; event['message'] = event['message'].split(/espace/); rescue Exception; end"
}
kv {
source => "message"
value_split => "="
field_split => "\n"
}
grok {
match => { "message" => "(?<param>[^=]*)=%{GREEDYDATA:value}" }
}
if "_grokparsefailure" in [tags] {
drop {}
}
mutate {
remove_field => ["message"]
}
变异{
gsub=>[“消息”、“[\\]r”、“esp”]
gsub=>[“消息”、“[\\]n”、“ace”]
}
红宝石{
代码=>“开始;事件['message']=事件['message'].拆分(/espace/);救援异常;结束”
}
千伏{
source=>“消息”
值_分割=>“=”
字段\u split=>“\n”
}
格罗克{
match=>{“message”=>“(?[^=]*)=%{GREEDYDATA:value}”
}
如果[tags]中有“\u grokparsefailure”{
删除{}
}
变异{
删除_字段=>[“消息”]
}
请问我怎么做这个?感谢您的帮助您的输入块是什么?您的inpu文件每行有一个键值对吗?Logstash将每一行作为单个事件处理,您需要使用编解码器来聚合它们(例如,多行),但是您需要共享您的输入块和输入文件的示例数据。我添加了输入文件块在您的情况下,您的多行插件conf应该使用如下模式:
^rejets
,以便任何不以rejets开头的行都与前一行连接。谢谢我使用该编解码器=>多行{pattern=>“^loremipsum”否定=>true what=>previous auto\u flush\u interval=>1个多行标记=>“”