【发布时间】:2018-03-27 14:37:41
【问题描述】:
我正在尝试找到一种方法,通过 SFTP 从服务器读取巨大和动态日志文件的末尾(例如从末尾开始的 20-30 行),并将该点保存到我读取的位置,如果我需要更多行,从这里开始阅读更多内容。
我尝试的所有操作都需要很长时间,我尝试在机器上复制此文件,然后使用ReversedLinesFileReader 从末尾读取,因为此方法需要File 对象,当通过 SFTP 时,您将获得只有InputStream,下载文件需要很多时间。
还尝试计算行数并从 n 行读取,但也花费了太长时间并引发异常,因为此时文件被修改。我尝试通过 SSH 连接并使用 tail -100 并获得所需结果的另一种方式,但只是一次,因为下次我也会获得新日志,但我需要更上一层楼。有没有一种快速的方法来获取文件的结尾并保存该点并稍后阅读更多内容?有什么想法吗?
【问题讨论】:
-
我建议您创建一个摘要过程,将整体日志文件拆分为每个文件可能 5000 行的小文件,并根据您要访问它们的顺序对它们进行排序/排序。这应该会让你的工作变得轻松一些。
-
不是真正的直接响应,而是更像是头脑风暴,并且高度依赖于您的要求和基础设施,但您可能会考虑引入elastic search a/o logstash(或类似的能力)像这样的工作的工具)?然后,您可以使用可用的 API 根据您的条件检索数据,例如 date-range。