当 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_db
和 start_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 个条目
我一直在尝试将日志从 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_db
和 start_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