在运行logstash实例时将重复条目复制到弹性搜索中

在运行logstash实例时将重复条目复制到弹性搜索中,logstash,Logstash,我一直在尝试将日志从logstash发送到elasticsearch。假设我正在运行一个logstash实例,当它运行时,我更改了logstash实例正在监视的文件,然后再次保存以前保存在elasticsearch中的所有日志,从而形成重复的日志 此外,当logstash实例关闭并再次重新启动时,日志会在elasticsearch中重复 我如何应对这个问题? 如何仅将文件中最新添加的条目从logstash发送到elasticsearch? 我的logstash实例命令如下所示: bin/logs

我一直在尝试将日志从logstash发送到elasticsearch。假设我正在运行一个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 }
}

正如你在问题中提到的

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

因此,您可能已经删除了.since_db。请看一看。 尝试指定
自\u db
开始位置
。例如:

input
{
    file
    {
        path => "/home/amith/Desktop/logstash-1.4.2/accesslog1"
        start_position => "end"
        sincedb_path => /home/amith/Desktop/sincedb
    }
}
我找到了解决办法。 我打开文件,添加一条记录并保存它,因此logstash在每次保存时都将同一文件视为不同的文件,因为它为同一文件注册了不同的inode编号

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

回显“要添加到文件中的字符串”>>filename[ELK stack] 我想要一些自定义配置

/etc/logstash/conf.d/vagrant.conf
因此,第一步是进行备份:
/etc/logstash/conf.d/vagrant.conf.bk
这导致logstash在elasticseach中为
.log中的每个条目添加2个条目

同样,如果我在ES中的
/etc/logstash/conf.d/*.conf.
中有3个文件,那么我在
*.log

中的每一行都有8个条目。如果我创建的文件是一个新文件,其中开始位置必须指向文件的开头,该文件会怎样?在进行上述更改后,它仍然会被复制。您使用什么操作系统?若在窗口上运行,日志存储上会出现错误。