2014-10-17 66 views
2

我使用Logstash和ElasticSearch来分析和存储我的apache日志中的数据。在我的设置中,logstash正在从文件stdin.log获取输入。如何查找Logstash在EOF?

我想创建一个脚本,当logstash在stdin.log末尾达到时,会自动将最新日志插入到stdin.log中。所以我的问题是,有没有办法找到logstash是否已达到eof?我可以使用sincedb文件来达到这个目的吗?

+0

文件,但为什么'stdin.log'的OFFSET列?你可以只从''error.og/access.log'文件中读取'logstash'进程。 – anubhava 2014-10-17 06:38:11

+0

@anubhava我必须从多个位置读取多个apache日志文件。我的脚本将它们下载到本地系统。 – Tariq 2014-10-17 06:40:04

+0

这些位置在同一个主机上? – anubhava 2014-10-17 06:40:50

回答

2

我已经通过比较文件的大小和sincedb文件中提供的偏移来实现我的目标。

currentPosition = tail -1 .sincedb | awk '{printf $4}' 

产生文件logstash文件指针在日志文件中的当前偏移量。虽然

fileSize = stat -c '%s' stdin.log 

以字节为单位产生总大小。所以,比较它

if[[ $currentPosition = $fileSize ]]; then #Proceed 
0

你可以在sincedb文件里面查看inode和当前的偏移量。

+0

我不认为sincedb是一个sqlite数据库。它是纯文本文件,其中包含inode,设备ID,源ID和以空格分隔的纯文本格式的偏移量。 – Tariq 2014-10-20 05:27:53

+0

啊,对不起。看起来像是用sqlite维护的海狸文件。我编辑了答案。谢谢。 – 2014-10-20 16:08:34

0

另一种选择是lsof -oo10 -p $LOGSTASHPID和审查问题