ELK入门——解决:删除索引,重运行logstach后messages数据量变少

logstash在第一次导入数据时将自动创建一个文件监控记录(sincedb),则logstach会认为该文件已经读取过,即使删除索引,也不会重头读取。导致重新运行logstash会发现记录量非常少,可能只有几十条或者几百条。有多种解决办法

其实这个也不是只适用于messages文件,只是我在初学时导入messages碰到了这个问题,后续可能也会继续更新一些其他beat导入后数据量变少的解决方案

一、禁止sincedb(不连接beat)

在logstash配置文件中加入代码行sincedb_path => "/dev/null",即

input {
  file {
    path => "/var/log/messages"
    type => "systemlog"
    start_position => "beginning"
    stat_interval => "2"
    sincedb_path => "/dev/null"
  }
}


output {
  elasticsearch {
    hosts => ["172.31.187.59:9200"]
    index => "logstash-systemlog-test"
  }
}

利用这行代码,会禁止sincedb,此时运行时无法读取到监听记录,于是会认为未读取过文件,从头读取。

二、清空sincedb(不连接beat)

清空logstash-input-file插件的文件监控记录(sincedb)。利用命令找到sincedb文件并删除,重新启动

注意删除sindb之前要将logstash停止运行,否则可能会报错。

依次运行以下指令:

# 停止logstach
systemctl stop logstash

# 找到文件
find / -name .sincedb_*

# 转到目录
cd /var/lib/logstash/plugins/inputs/file/

# 删除文件
rm .sincedb_*

# 重新运行
systemctl restart logstash

运行后到head查看,这时应该已经有了相关的记录,有可能有延时可以多刷新几次。

三、Filebeat+Logstash

如果是使用Filebeat通过端口传输到Logstash,那么要处理的内容就是Filebeat这边的读取记录,在filebeat的执行路径下有一个registry文件,终止Filebeat后,再删除此文件,可以直接用查找命令查到文件。但要注意我们要删的是在filebeat下的记录。

# 查找filebeat进程
ps -ef |grep filebeat

# 终止
kill -9 XXXX

# 找到记录文件
# find / -name registry

# 删除
rm -rf /var/lib/filebeat/registry

# 启动
systemctl restart filebeat

再看数据就会发现恢复到万的量级了

但是这些方法有一个缺陷,如果未删除索引,多次运行,会导致数据量重复和倍增。当索引数量过多时,没掌握快速删除索引的方法(比如我),就会变得很麻烦,效率很低。所以建议在前期不要创建通用的命名方式形成过多索引,可以用一个test测试方便删除,或是命名格式以月份而不是天数为主,就会大大降低索引数量

 

参考博客

logstash导入数据到Elasticsearch踩过的坑详解

[Logstash] 如何找到并清空logstash-input-file插件的文件监控记录(sincedb)?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值