在运行logstash实例时将重复条目复制到弹性搜索中
我一直在尝试将日志从logstash发送到elasticsearch。假设我正在运行一个logstash实例,当它运行时,我更改了logstash实例正在监视的文件,然后再次保存以前保存在elasticsearch中的所有日志,从而形成重复的日志 此外,当logstash实例关闭并再次重新启动时,日志会在elasticsearch中重复 我如何应对这个问题? 如何仅将文件中最新添加的条目从logstash发送到elasticsearch? 我的logstash实例命令如下所示: bin/logstash-f logstash complex.conf 配置文件如下所示:在运行logstash实例时将重复条目复制到弹性搜索中,logstash,Logstash,我一直在尝试将日志从logstash发送到elasticsearch。假设我正在运行一个logstash实例,当它运行时,我更改了logstash实例正在监视的文件,然后再次保存以前保存在elasticsearch中的所有日志,从而形成重复的日志 此外,当logstash实例关闭并再次重新启动时,日志会在elasticsearch中重复 我如何应对这个问题? 如何仅将文件中最新添加的条目从logstash发送到elasticsearch? 我的logstash实例命令如下所示: bin/logs
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个条目。如果我创建的文件是一个新文件,其中开始位置必须指向文件的开头,该文件会怎样?在进行上述更改后,它仍然会被复制。您使用什么操作系统?若在窗口上运行,日志存储上会出现错误。