我有一个使用AWS EMR运行pispark集群的流程。
我有一个S3位置,其中存储了所有进程日志。
我想知道有没有办法可以过滤掉ERROR日志并将它们邮寄到我的收件箱。我不想在我的系统上保存任何日志文件。
是否有任何python库可以帮助我监控实时日志。我见过boto3和EMR库,但是从那里找不到问题的答案。
答案 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存储已经花费了你。整个事情的努力实际上非常小。
此外,您不需要:
你会免费获得:
以
的形式进行监控通过cloudwatch警报轻松集成到警报中(这些警报通常与Pager Duty等完美集成)
您可以通过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