如何记录堆栈跟踪 aws elastic beanstalk 以快速解决客户错误

Posted

技术标签:

【中文标题】如何记录堆栈跟踪 aws elastic beanstalk 以快速解决客户错误【英文标题】:how to log stack trace aws elastic beanstalk to quickly troubleshoot customer error 【发布时间】:2016-09-02 03:16:43 【问题描述】:

也许我以错误的方式解决这个问题,或者没有以正确的方式询问 Google。因此,如果这是重复的,我深表歉意。我希望能够快速/有效地解决我的 java webapp 中的客户端/用户错误。

也就是说,我们可以通过执行 e.printstacktrace 轻松查看错误在本地计算机上的位置。我想知道在 EC2/Elastic Beanstalk 实例上执行此操作的最佳方法。如果客户收到错误,我希望他们能够通过电子邮件询问“票号”或“此时此日期的错误”发生了什么。我的想法是,当发生异常时,将堆栈跟踪与用户名一起记录在我的数据库中,并将 db.uniqueKey 返回给用户,以便他们可以通过电子邮件向我询问该 uniqueKey/ID 号。

我不知道将堆栈跟踪的子字符串记录到数据库是否是个好主意(让所有这些数据库连接打开/关闭以记录堆栈跟踪)。

当我查看这个主题时,我对 AWS CloudWatch 有很多了解,但这看起来更像是一个记录我的环境和服务器中发生的所有事情的工具。这似乎是永远滚动日志文件的秘诀。

使用用户名将 stacktrace.substring 记录到数据库是个好主意吗?有没有更好的方法可以及时向我的用户反馈可能发生的情况?

【问题讨论】:

【参考方案1】:

您可以对 CloudWatch Logs 进行 API 调用以发送一条日志消息,而不是将整个 Tomcat 日志文件发送到 CloudWatch。您还可以在 JSON format 中发送日志,以便您可以包含您的用户 ID、唯一密钥等元数据。请参阅 SDK 中的 AWSLogsClient 类。

请注意,还有像 Loggly 和 LogEntries 这样的第三方服务非常擅长这类事情,在我看来,它们比 CloudWatch Logs 目前的用户友好得多。如果您不想将整个日志文件流式传输到它们,这些服务还提供 API 以从 Java 发送单个日志消息。

我建议使用像我列出的那样为日志记录而设计的服务,而不是数据库。这些服务可以很好地扩展,而无需担心诸如打开的数据库连接数之类的事情。这些服务还将根据日志消息的内容处理发送警报,并提供一个很好的 Web 界面来查看日志消息。

如果您确实决定采用数据库方法,我建议您查看DynamoDB,而不是像 mysql 或 PostgreSQL 这样的关系数据库。 DynamoDB 将轻松扩展,将文档轻松存储为 JSON 数据,并且可以触发 Lambda 函数,这些函数可用于发送警报等操作。

【讨论】:

以上是关于如何记录堆栈跟踪 aws elastic beanstalk 以快速解决客户错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Cloudfront 设置 AWS Elastic Beanstalk 以在 PHP 堆栈上托管图像和视频

更新 AWS Elastic Beanstalk 解决方案堆栈名称

AWS Elastic beanstalk - 更改解决方案堆栈名称

将 MongoDB 与 AWS Elastic Bean 应用程序一起使用

如何在 AWS Elastic Beanstalk Docker 容器中记录 PHP 错误

尝试通过 Elastic Bean 在 AWS 上部署我的应用程序时出错