从 AWS Spark 通过电子邮件发送错误日志

Emailing error logs from AWS Spark

我有一个使用 AWS EMR 到 运行 pispark 集群的进程。

我有一个存储所有进程日志的 S3 位置。

我想知道有什么方法可以过滤掉错误日志并将它们邮寄到我的 inbox.I 我不想在我的系统上保存任何日志文件。

有没有python库可以帮助我监控实时日志。我看过 boto3 和 EMR 库,但我无法从那里找到问题的答案。

在写入 S3 之前,EMR 日志可能会被缓冲成几分钟或一定大小的块(但完全公开,这是基于其他 AWS S3 日志系统的经验,而不是 EMR 本身)。

如果我试图解决这个问题,我会使用 AWS Lambda 函数来执行 python,它将逐行读取 S3 日志并过滤匹配 ERROR 的行,然后使用 SNS 将日志发送到您的电子邮件地址。当对象写入 EMR 的 S3 日志记录位置时,您可以使用 S3 事件自动触发 Lambda,因此这将尽可能接近实时。

我建议的架构看起来像这样

EMR -> S3 -> Lambda -> SNS -> email inbox

将每个 EMR 日志写入使用 boto3 的 s3 triggers a lambda 过滤日志中的错误消息,将警报发送到 SNS 主题以分发给用户。

它可能看起来像很多活动部件,但不需要太多维护,而且每月只需比 S3 存储已经花费的成本多几美分。整个事情的努力实际上很小。

此外,您不需要:

  • 执行代码、管理服务器等的地方
  • 您项目的重要部署模型
  • 以上未显示的任何部分,就此而言

您将免费获得:

  • 监控形式

    • lambda 的 cloudwatch 指标,
    • s3 日志(你应该启用它们)
    • 存储函数执行的 cloudwatch 日志 windows 和标准输出。
  • 通过 cloudwatch 警报轻松集成到警报中(这些通常与 Pager Duty 等很好地集成)

  • 极其简单的可扩展性,例如
    • SNS 可以发送短信到您的 phone
    • 在 lambda 中添加更多解析选项并重新部署
    • 公开 cloudwatch 指标并添加阈值警报
    • 将摘要写入 S3 以获得预签名的电子邮件或短信链接,或者现在或以后进一步处理

您可以通过 SES 自己发送电子邮件,也可以使用 python 手动发送电子邮件,但我宁愿使用 SNS,这样主题的订阅可以独立于 python 代码。

Lambda 开始时有点吓人,但默认情况下它们会包含 boto3 sdk(这应该避免对具有 pip 依赖项的 zip 文件的需要),这将简化创建。

就此而言,如果您喜欢通过拖动鼠标指针来做事,或者只打算做几次,或者您可以在 cloudformation 中表达所有这些,您可以在 AWS 控制台中设置所有这些东西如果您需要可重复的东西。

http://docs.aws.amazon.com/lambda/latest/dg/with-s3.html http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html http://docs.aws.amazon.com/sns/latest/dg/welcome.html