Как исправить дубликаты документов в Elasticsearch при индексации с помощью Logstash? - PullRequest
2 голосов
/ 07 мая 2019

Я использую Elastic Stack для обработки файлов журналов, но генерирую дубликаты документов в Elasticsearch.

Я провел опрос и уже пытался добавить «document_id», но это не помогло.

Это конфигурация моего Logstash:

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",
    ...
}

Вот и все. Я не знаю, почему дублирует еще. У кого-нибудь есть идеи?

Заранее спасибо ...

Ответы [ 3 ]

1 голос
/ 07 мая 2019

Ваш код выглядит нормально и не должен допускать дублирования, возможно, дублированный был добавлен до того, как вы добавили document_id => "%{[fingerprint]}" в свой logstash, так чтоasticsearch сгенерировал для него уникальный Id, который не будет переопределен другими идентификаторами, удалите дубликаты ( тот, у которого _id отличается от отпечатка пальца) вручную и попробуйте снова, он должен работать.

1 голос
/ 07 мая 2019

У меня была эта проблема один раз, и после многих попыток ее решить, я понял, что я сделал резервную копию моего файла conf в папку 'pipe', и logstash использовал этот файл резервной копии для обработки своих правил ввода. Будьте осторожны, поскольку Logstash будет использовать другие файлы в папке конвейера, даже если расширение файла отличается от '.conf'.

Итак, проверьте, есть ли у вас другие файлы в папке 'pipe'.

Пожалуйста, дайте мне знать, было ли это полезно для вас.

0 голосов
/ 07 мая 2019

Сгенерируйте UUID-ключ для каждого документа, и ваша проблема будет решена.

...