当 logstash 实例为 运行 时,Elastic Search 中的重复条目

Duplicate entries into Elastic Search while logstash instance is running

我一直在尝试将日志从 logstash 发送到 elasticsearch.Suppose 我是 运行 一个 logstash 实例,当它是 运行 时,我对 logstash 所在的文件进行了更改实例正在监控,之前保存在elasticsearch中的所有日志都重新保存,因此形成重复。

此外,当 logstash 实例关闭并再次重新启动时,日志会在 elasticsearch 中重复。

我该如何解决这个问题? 如何仅将文件中最新添加的条目从 logstash 发送到 elasticsearch? 我的 logstash 实例命令如下: bin/logstash -f logstash-complex.conf

配置文件是这样的:

input
 {
  file
 {

     path => "/home/amith/Desktop/logstash-1.4.2/accesslog1"

  }
}

filter
 {
  if [path] =~ "access"
 {
    mutate 
{
 replace =>
 { "type" => "apache_access" } }
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  elasticsearch {
    host => localhost 
    index => feb9
  }
  stdout { codec => rubydebug }
}

正如你在问题中提到的。

when the logstash instance is closed and is restarted again,the logs gets duplicated in the elasticsearch.

那么,您可能删除了.since_db。请看一下here。 尝试指定 since_dbstart_position。例如:

input
{
    file
    {
        path => "/home/amith/Desktop/logstash-1.4.2/accesslog1"
        start_position => "end"
        sincedb_path => /home/amith/Desktop/sincedb
    }
}

我得到了解决方案。 我正在打开文件,添加一条记录并保存它,因此每次我保存它时 logstash 都将同一个文件视为不同的文件,因为它为同一个文件注册了不同的 inode 编号。

解决方案是在不打开文件的情况下向文件追加一行,而是通过运行以下命令。

echo "the string you want to add to the file" >> 文件名

[麋鹿栈] 我想要

中的一些自定义配置
/etc/logstash/conf.d/vagrant.conf

所以第一步是进行备份:/etc/logstash/conf.d/vagrant.conf.bk 这导致 logstash 为 <file>.log; 中的每个条目在 elasticseach 中添加 2 个条目 如果我在 ES 中的 /etc/logstash/conf.d/*.conf.* 中有 3 个文件,那么我在 *.log

中的每一行都有 8 个条目