如何从我的应用程序下载 300k 日志行?

Posted

技术标签:

【中文标题】如何从我的应用程序下载 300k 日志行?【英文标题】:How to download 300k log lines from my application? 【发布时间】:2020-02-15 11:21:27 【问题描述】:

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

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

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

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

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

【问题讨论】:

生成日志文件后你在做什么?这是出于故障排除目的吗?如果是这样,为什么不在您上面提到的平台内这样做? @the-nick-wilson 我需要它来调试目的,但我不是开发人员,而是用户,需要将日志发送给某人 明白了。我不确定 LogDNA,但 Sumo Logic 确实提供了为此目的创建多个用户的能力。但我知道有些人可能有自己的方法来快速 grep 日志,而无需学习新的应用程序。 【参考方案1】:

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

没有真正的原始日志文件。

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

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

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

登录到数据库而不是文件。 Apache Cassandra 之类的东西可能很合适。

Send your logs to a logging server 通过Syslog(我的偏好):

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

将您的日志发送至custom logging process via HTTPS。

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

【讨论】:

【参考方案2】:

仅从 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 中的这些日志。

【讨论】:

比如为什么特别需要 CSV 中的这些日志 Sumo Logic 导出到 csv,包含日期、消息、日志类型等列,我只是想要一个实际的日志文本格式的消息,就像在 Unix 上使用 lessgrep 等一样。现在我只是处理了 Sumo Logic 有道理。没问题。

以上是关于如何从我的应用程序下载 300k 日志行?的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件从我的系统下载文件夹导入到原始目录中

如何从我的 PC 在 iPhone 上测试我的应用程序 [重复]

如何从我的 Python Spark 脚本中登录

如何弄清楚为啥行从我的 SQL 服务器中消失了?

如何只允许 PHP 从我的服务器下载图像?

如何获取其他应用的日志?