elasticsearch 如何修复Elasticsearch中使用Logstash索引时的重复文档?,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack" /> elasticsearch 如何修复Elasticsearch中使用Logstash索引时的重复文档?,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack" />

elasticsearch 如何修复Elasticsearch中使用Logstash索引时的重复文档?

elasticsearch 如何修复Elasticsearch中使用Logstash索引时的重复文档?,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack,我正在使用Elastic堆栈处理日志文件,但正在Elasticsearch中生成重复的文档 我做了一些调查,已经尝试添加“document_id”,但没有解决问题 这是我的日志存储的配置: input { beats { port => 5044 } } filter { fingerprint { source => "message" target => "[fingerprint]" method => "SHA1"

我正在使用Elastic堆栈处理日志文件,但正在Elasticsearch中生成重复的文档

我做了一些调查,已经尝试添加“document_id”,但没有解决问题

这是我的日志存储的配置:

input {
  beats {
    port => 5044
  }
}

filter {

  fingerprint {
    source => "message"
    target => "[fingerprint]"
    method => "SHA1"
    key => "key"
    base64encode => true
  } 

  if [doctype] == "audit-log" {
    grok {
      match => { "message" => "^\(%{GREEDYDATA:loguser}@%{IPV4:logip}\) \[%{DATESTAMP:logtimestamp}\] %{JAVALOGMESSAGE:logmessage}$" }
    }
    mutate {
      remove_field => ["host"]
    }
    date {
      match => [ "logtimestamp" , "dd/MM/yyyy HH:mm:ss" ]
      target => "@timestamp"
      locale => "EU"
      timezone => "America/Sao_Paulo"
    } 
  }  

}

output {
  elasticsearch {
    hosts => "192.168.0.200:9200"
    document_id => "%{[fingerprint]}"
  }
}

以下是复制的文件:

{
  "_index": "logstash-2019.05.02-000001",
  "_type": "_doc",
  "_id": "EbncP00tf9yMxXoEBU4BgAAX/gc=",
  "_version": 1,
  "_score": null,
  "_source": {
    "@version": "1",
    "fingerprint": "EbncP00tf9yMxXoEBU4BgAAX/gc=",
    "message": "(thiago.alves@192.168.0.200) [06/05/2019 18:50:08] Logout do usuário 'thiago.alves'. (cookie=9d6e545860c24a9b8e3004e5b2dba4a6). IP=192.168.0.200",
    ...
}

######### DUPLICATED #########

{
  "_index": "logstash-2019.05.02-000001",
  "_type": "_doc",
  "_id": "V7ogj2oB8pjEaraQT_cg",
  "_version": 1,
  "_score": null,
  "_source": {
    "@version": "1",
    "fingerprint": "EbncP00tf9yMxXoEBU4BgAAX/gc=",
    "message": "(thiago.alves@192.168.0.200) [06/05/2019 18:50:08] Logout do usuário 'thiago.alves'. (cookie=9d6e545860c24a9b8e3004e5b2dba4a6). IP=192.168.0.200",
    ...
}
就这样。我还不知道为什么要复制。有人知道吗


提前感谢您…

为每个文档生成一个UUID密钥,然后您的问题就会得到解决。

您的代码看起来很好,不允许重复,可能是在您将
文档\u id=>“%{[fingerprint]}”添加到日志存储之前添加了重复的代码,因此elasticsearch为它生成了一个唯一的Id,不会被其他Id覆盖,手动删除重复的Id(Id与指纹不同的Id),然后再试一次,它应该可以工作。

我曾经遇到过这个问题,并且在多次尝试解决它之后,我意识到我将conf文件备份到了“pipeline”文件夹中,日志库使用这个备份文件来处理它们的输入规则。请小心,因为Logstash将使用管道文件夹中的其他文件,即使文件扩展名与“.conf”不同

所以,请检查“管道”文件夹中是否有其他文件


请告诉我这是否对您有用。

我很惊讶地看到指纹周围的方括号。您是否已尝试将文档_id设置为“%{fingerprint}”?我是第二个@JoeZack,您需要使用指纹作为文档id,问题将立即得到解决,谢谢您的帮助。我尝试使用没有方括号的指纹,但不幸的是问题仍然存在。。。谢谢。我们遇到了一个类似于OP的问题,而设置和UUID实际上解决了我们的问题。logstash过滤器uuid工作正常,但基本上任何类型的ID生成方法都可以工作,只要您在Elasticsearch输出中使用document_ID参数,如下所述:首先,感谢您的帮助。我尝试使用UUID,但不幸的是问题仍然存在。。。这里是我跟随的链接:谢谢。首先,谢谢你的帮助。我正在从一个日志文件编制索引,而每个索引的文档都在复制,我不知道如何使用同一个文档重试。谢谢。删除整个索引,然后看看是否有帮助。天哪!!!非常好!我确实在管道目录中有另一个文件,但我不知道Logstash正在考虑它。我已经删除了另一个文件,问题已经解决。非常感谢。祝贺