我一直在尝试将日志从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 }
}
答案 0 :(得分:4)
我得到了解决方案。 我正在打开文件,添加一条记录并保存,因为每次保存时,logstash都将同一文件视为不同的文件,因为它为同一文件注册了不同的inode编号。
解决方案是在不打开文件的情况下向文件追加一行,但运行以下命令。
echo"要添加到文件的字符串" >>文件名强>
答案 1 :(得分:1)
[ELK堆叠]
我想要一些自定义配置it("should call setSelectedGender", function () {
spyOn(controller, 'setSelectedGender').and.callThrough();
var value = controller.setSelectedGender("Male");
//how do I validate the if condition and compare it
});
所以第一步是进行备份:/etc/logstash/conf.d/vagrant.conf
这导致logstash在/etc/logstash/conf.d/vagrant.conf.bk
中的每个条目的elasticseach中添加2个条目
同样如果我在ES中的<file>.log;
中有3个文件我在/etc/logstash/conf.d/*.conf.*
答案 2 :(得分:0)
正如你在问题中提到的那样。
当logstash实例关闭并再次重新启动时,日志会在elasticsearch中重复。
所以,你可能已经删除了.since_db。请看here。
尝试具体说明since_db
和start_position
。例如:
input
{
file
{
path => "/home/amith/Desktop/logstash-1.4.2/accesslog1"
start_position => "end"
sincedb_path => /home/amith/Desktop/sincedb
}
}