elasticsearch 日志存储在elasticsearch中更新文档,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" /> elasticsearch 日志存储在elasticsearch中更新文档,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" />

elasticsearch 日志存储在elasticsearch中更新文档

elasticsearch 日志存储在elasticsearch中更新文档,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration,试图通过logstash更新elasticsearch中的特定字段。是否可以通过logstash仅更新一组字段 请在下面查找代码 input { file { path => "/**/**/logstash/bin/*.log" start_position => "beginning" sincedb_path => "/dev/null" type => "multi" } } fil

试图通过logstash更新elasticsearch中的特定字段。是否可以通过logstash仅更新一组字段

请在下面查找代码

    input {
  file {
        path => "/**/**/logstash/bin/*.log"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        type => "multi"
  }
}

filter {
        csv {
                separator => "|"
                columns => ["GEOREFID","COUNTRYNAME", "G_COUNTRY", "G_UPDATE", "G_DELETE",  "D_COUNTRY", "D_UPDATE", "D_DELETE"]

}
elasticsearch {
         hosts => ["localhost:9200"]
         index => "logstash-data-monitor"
         query => "GEOREFID:%{GEOREFID}"
         fields => [["JSON_COUNTRY","G_COUNTRY"],
                    ["XML_COUNTRY","D_COUNTRY"]]
           }

if [G_COUNTRY] {
mutate {
    update => { "D_COUNTRY" => "%{D_COUNTRY}"
 }
  }
}
}
output {
elasticsearch {
        hosts => ["localhost:9200"]
        index => "logstash-data-monitor"
        document_id => "%{GEOREFID}"
  }
}
我们使用上述配置时,会删除空值字段,而不是跳过空值更新

数据来自两个不同的来源。一个来自XML文件,另一个来自JSON文件

XML日志格式:GEO-1 | CD | 23 | John | 892 | Canada | 31-01-2017 | QC|-|-|-|-|- JSON日志格式:GEO-1 | AS | 33 |-|-|-|-|-|-|-| Mike | 123 | US | 31-01-2017 | QC

添加一个日志时,将在索引中创建新文档。读取第二个日志文件时,应更新现有文档。如果日志文件是XML,则更新只应发生在前5个字段中,如果日志文件是JSON,则更新应发生在后5个字段中。请建议我们如何在logstash中执行此操作


尝试使用上述代码。请检查,是否有人可以帮助解决此问题?

了解Elasticsearch输出执行除
索引之外的任何操作

这可能应该包装在一个条件中,以确保您只更新需要更新的记录。不过,还有另一种选择

这告诉插件如果是新的,就插入,如果不是,就更新


但是,您试图使用两个输入来定义文档。这使事情变得复杂。另外,你没有提供两种输入,所以我会即兴创作。要提供不同的输出行为,需要定义两个输出

input {
  file {
    path => "/var/log/xmlhome.log"
    [other details]
  }

  file {
    path => "/var/log/jsonhome.log"
    [other details]
  }
}

filter { [some stuff ] }

output {
  if [path] == '/var/log/xmlhome.log' {
    elasticsearch {
      [XML file case]
    }
  } else if [path] == '/var/log/jsonhome.log' {
    elasticsearch {
      [JSON file case]
      action => "update"
    }
  }
}

这样设置将允许您根据事件发生的位置更改ElasticSearch行为。

有人能帮忙吗?您只提供一个过滤器定义,更新/插入/插入操作通过ElasticSearch的输出完成。你可以在这里阅读:@pandaadb编辑了这个问题。你能看一下这个问题并提供帮助吗?我已经厌倦了上面的选项文档没有更新空值字段被删除而不是跳过空值更新。elasticsearch{hosts=>[“localhost:9200”]index=>“logstash数据监视器”action=>“更新”doc\u as\u upsert=>true document\u id=>“%{GEOREFID}”对上述评论有何建议@sysadmin1138@banu如果您要查找的逻辑是,如果不是空值,则更新,然后,我建议您将
update
输出包装在一个if条件中,以测试该空值。您能给我提供这个示例条件吗?@banu我已经用一个条件更新的示例进行了更新。
elasticsearch {
        hosts => ["localhost:9200"]
        index => "logstash-data-monitor"
        action => "update"
        doc_as_upsert => true
        document_id => "%{GEOREFID}"
}
input {
  file {
    path => "/var/log/xmlhome.log"
    [other details]
  }

  file {
    path => "/var/log/jsonhome.log"
    [other details]
  }
}

filter { [some stuff ] }

output {
  if [path] == '/var/log/xmlhome.log' {
    elasticsearch {
      [XML file case]
    }
  } else if [path] == '/var/log/jsonhome.log' {
    elasticsearch {
      [JSON file case]
      action => "update"
    }
  }
}