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

时间:2016-12-16 18:39:39

标签: python-2.7 amazon-web-services pyspark amazon-emr

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

我有一个S3位置,其中存储了所有进程日志。

我想知道有没有办法可以过滤掉ERROR日志并将它们邮寄到我的收件箱。我不想在我的系统上保存任何日志文件。

是否有任何python库可以帮助我监控实时日志。我见过boto3和EMR库,但是从那里找不到问题的答案。

1 个答案:

答案 0 :(得分:1)

在写入S3之前,EMR日志可能会被缓冲到几分钟或一定大小的块中(但完全披露,这是基于其他AWSS3日志记录系统,而不是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日志,用于存储函数的执行窗口和标准输出。
  • 通过cloudwatch警报轻松集成到警报中(这些警报通常与Pager Duty等完美集成)

  • 死亡简单的可攻性,例如
    • SNS可以向手机发送短信
    • 在lambda中添加更多解析选项并重新部署
    • 公开cloudwatch指标并添加阈值警报
    • 将摘要写入S3,以预先签名的电子邮件或短信链接,或现在或以后的进一步处理

您可以通过SES自己发送电子邮件,或者只使用python手动发送电子邮件,但我宁愿使用SNS,以便主题的订阅可以独立于python代码而变化。

Lambda起初有点令人生畏,但默认情况下它们会包含boto3 sdk(这应该可以避免需要一个带有pip依赖关系的zipfile),这将简化创建。

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

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