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

问题描述:

我有一个使用AWS EMR运行pispark集群的进程。通过电子邮件发送AWS Spark的错误日志

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

我想明白,有没有一种方法可以过滤掉ERROR日志,并将它们邮寄到我的收件箱中。我不想在系统上保存任何日志文件。

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

电子病历日志可能会被缓存成的几分钟或某些大小的块被写入到S3之前(但完全公开,这是基于与其他AWS S3记录系统的经验,不EMR本身)。

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

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

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

每个EMR日志写入到S3 triggers a lambda它使用boto3 过滤日志中的错误信息,发送警报到SNS话题分发给用户。

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

此外,您将不再需要:

  • 的地方执行代码,服务器管理等
  • 平凡的部署模型为您的项目
  • 任何部分未如上图所示,对于无论

,你会得到免费:

  • 监测中的

    • CloudWatch的指标拉姆达形式,
    • S3日志(你应该让他们)
    • 存储你的函数的执行窗口和stdout CloudWatch的日志。
  • 易于集成到通过CloudWatch的警报提醒

  • 死简单exensibility(这通常与寻呼机税等整合好),如
    • SNS可以发送短信到您的手机
    • 在lambda中添加更多解析选项并重新部署
    • 揭露cloudwatch指标并为阈值添加警报
    • 写总结S3预签名的电子邮件或短信链接,或进一步处理现在或以后

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

lambda表达式是有点吓人下手,但他们会包括默认的boto3 SDK(应避免与PIP依赖一起一个压缩文件的需要),这将简化创建。

对于这个问题,如果您喜欢通过拖动鼠标指针进行操作,或者打算只执行几次操作,您可以在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

+0

我想知道,以我应该如何开始兰巴因为每次我的代码将创建一个新名称的新集群。我应该如何最初触发代码来查找AWS上日志的位置? –

+0

您可以与emr一起创建lambda。你的代码是否可以控制s3日志记录方面的任何内容?存储桶名称?你可以拿起那个桶的所有事件。或者,您创建emr的自动化还可以为现有的lambda创建s3事件 –

+0

看起来您可以使用'DescribeCluster'api调用在创建emr集群后公开它的日志uri:http:///docs.aws.amazon.com/ElasticMapReduce/latest/API/API_DescribeCluster.html –