【问题标题】:How to find Logstash is at EOF?如何在 EOF 找到 Logstash?
【发布时间】:2014-10-17 06:25:33
【问题描述】:

我正在使用带有 ElasticSearch 的 Logstash 从我的 apache 日志中分析和存储数据。在我的设置中,logstash 正在从文件 stdin.log 中获取输入。

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

【问题讨论】:

  • 但是为什么stdin.log?您可以让logstash 进程从 Apache error.og/access.log 文件中读取。
  • @anubhava 我必须从多个位置读取多个 apache 日志文件。我的脚本会将它们下载到本地系统。
  • 这多个位置在同一个主机上?
  • 没有。我忘了从多个远程位置添加多个 apache 日志文件。
  • 每个远程主机上的托运人怎么样? logstash-forwarder、海狸等...

标签: bash eof logstash


【解决方案1】:

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

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

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

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

以字节为单位产生总大小。所以比较一下

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

【讨论】:

    【解决方案2】:

    您可以查看 sincedb 文件以获取 inode 和当前偏移量。

    【讨论】:

    • 我不认为sincedb是一个sqlite数据库。它是纯文本文件,包含 inode、设备 ID、源 ID 和偏移量,格式为纯文本格式,由空格分隔。
    • 啊,对不起。看起来它是用 sqlite 维护的海狸文件。我已经编辑了答案。谢谢。
    【解决方案3】:

    另一个选项是 lsof -oo10 -p $LOGSTASHPID 并检查相关文件的 OFFSET 列

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多