【问题标题】:Logstash: How to read logs which created by date / timeLogstash:如何读取按日期/时间创建的日志
【发布时间】:2015-08-21 19:55:22
【问题描述】:

我们的服务器根据日期将日志文件存储在目录下,以时间作为文件名。例如:

/2015.08.21/01.23
/2015.08.21/01.24
/2015.08.21/01.25

文件名遵循 [hours].[minutes] 约定。

如何配置Logstash从最新文件读取(一般做法是什么)?

  • 第一次尝试:

我将路径设置为:

path => ["/2015.08.21/*"]

Logstash 打开了很多文件,直到 logsource (linux) 不允许它打开新文件。

  • 第二次尝试:

使用 rsync 复制所有文件,并将它们合并为单个文件。

但是,我在处理部分日志文件时遇到了问题,例如,如果当前日志文件是 11.12,并且仍在写入,我将只有部分数据。

  • 第三次尝试:

定期创建指向最新文件的符号链接。我还没有尝试过,但我认为它应该可以工作,我需要弄清楚如何在 linux 中创建简单的调度程序。

  • 更新

我已经尝试了第三次尝试,但我发现这种方法有一些缺点。

  1. 如果 Logstash 处理文件的时间超过 1 分钟,它将无法处理整个文件,因为符号链接指向下一个文件。
  2. 最后 1 或 2 个事件可能无法得到处理。

【问题讨论】:

  • 可能是 SO 格式问题,但您的意思是“/*/*”还是“**”?您是第一次尝试运行它吗(它有旧文件要处理)?
  • 感谢 Alain 发现格式错误。

标签: logstash logstash-file


【解决方案1】:

第一次尝试运行此配置时,logstash 想要打开很多文件似乎是合理的。在这种情况下,请考虑增加进程可用的打开文件的数量。

一旦它处理了文件,它就会检测到它没有被写入并且不会保持文件打开。它将定期检查文件以确保没有写入任何新内容。所以,一旦你被赶上,它应该更友好。

为了帮助赶上初始运行,请尝试将模式设置为更小的值,例如:

path => ["/2015.08.21/01.*"]

应该只匹配 60 个文件。

您还可以重新考虑每分钟拥有一个文件的设计;没有更多信息,这似乎是多余的。

【讨论】:

  • 感谢您的建议。但是,如果我在早上 8 点开始 logstash,那么我必须尝试使用​​ 01.*、02.*、03.*?这将是一些工作。我无法控制日志策略:(我不是开发者。
  • Logstash 旨在保持运行。你也可以制作像“0[1-5]*”这样的模式。
  • Logstash 在读取第 100 个文件时给了我“文件打开权限错误”,我猜我的帐户只允许同时读取 100 个文件。你是对的,Logstash 应该继续运行。我正在做概念验证工作,Logstash 在我自己的笔记本电脑上运行,所以它不是一直在运行。
  • 尝试调整你的ulimit,假设你在linux上。
  • 我检查了日志服务器上的ulimit,它是65535。我实际上使用sshfs将目录安装到我的机器上。所以我猜测 sshfs 或我的 ssh 帐户有这个文件数限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多