0

我正在我的 Heroku 应用程序上运行一项作业,该作业在 5 分钟内生成大约 300k 行日志。我需要将它们全部提取到一个文件中。我怎样才能做到这一点?

Heroku UI 从打开的那一刻起只实时显示日志,并且只保留 10k 行。

我附加了一个 LogDNA 插件作为排水管,但它们的导出也只允许导出 10k 行。甚至可以选择导出,我需要应用搜索过滤器(我输入2020是因为所有行都以日期开头,但仍然......)。我可以滚动浏览所有日志以查看它们,但是当我向上滚动时,底部会被截断,所以我什至不能自己复制粘贴它们。

然后我将 Sumo Logic 附加为排水管,这样更好,因为导出限制为 100k。但是我仍然需要以 30s 到 60s 的间隔过滤日志并单独下载。它还以相反的顺序导出到 CSV 文件(最新的优先,不是我想要的),所以我必须在下载文件后仍然对其进行处理。

是否没有选项可以完整获取实际的原始日志文件?

4

2 回答 2

1

是否没有选项可以完整获取实际的原始日志文件?

没有实际原始日志文件。

Heroku 的架构要求日志是分布式的。默认情况下,它的 Logplex 服务将所有服务的日志输出聚合到一个流中,并通过heroku logs. 然而,

Logplex 设计用于整理和路由日志消息,而不是用于存储。它会保留最近的 1,500 行合并日志,这些行将在 1 周后过期。

为了更长时间的坚持,你需要别的东西。除了您提到的商业日志服务之外,您还有几个选择:

  • 登录到数据库而不是文件。像Apache Cassandra这样的东西可能很适合。
  • 通过Syslog(我的偏好)将您的日志发送到日志服务器:

    Syslog drain 允许您将 Heroku 日志转发到外部 Syslog 服务器以进行长期归档。

  • 通过 HTTPS将您的日志发送到自定义日志记录进程。

    日志消耗还支持通过 HTTPS 进行消息传递。这使得您可以轻松编写自己的日志处理逻辑并在 Web 服务(例如另一个 Heroku 应用程序)上运行它。

于 2020-02-15T14:12:47.673 回答
1

仅从 Sumo Logic 的角度来看,因为这是我在这里熟悉的唯一一个,您可以使用它的 Search Job API 来做到这一点:https ://help.sumologic.com/APIs/Search-Job-API/ About-the-Search-Job-API

Search Job API 可让您开始搜索,轮询状态,然后在完成后浏览结果(我相信最多 100 万条记录)并对它们做任何您想做的事情,例如将它们转储到 CSV 文件中.

但这仅适用于试用和企业帐户。

我只是查看了 Heroku 的文档,看起来他们没有本地方式来检索超过 1500 个,您必须通过 syslog 将这些日志转发到单独的服务器/服务。

但是,我认为您的最佳解决方案将取决于您的用例,例如为什么特别需要 CSV 中的这些日志。

于 2020-02-15T14:18:14.297 回答