【问题标题】:Print to file Beanstalk Worker Tier (Python)打印到文件 Beanstalk Worker Tier (Python)
【发布时间】:2014-08-16 09:47:08
【问题描述】:

我问了类似这个问题的问题,但没有得到任何有帮助的回复。因此,我决定使用以下方法尽可能简化事情:

我开发了一个 python 烧瓶应用程序并部署到 beanstalk worker 层 python 环境。问题是我不知道如何在任何地方打印、记录或写任何东西。我需要调试这个应用程序,而我知道如何做到这一点的唯一方法是打印到控制台或日志文件以查看到底发生了什么。当我在本地运行应用程序时,我可以打印到控制台、写入文件并以零问题记录,只是当我将它部署到 beanstalk 环境时,什么都没有发生。我已经通过 SSH 连接到我部署了应用程序的 ec2 实例,并且几乎搜索了每个文件,我发现我的 python 脚本在任何地方都没有写入任何内容。

这个问题可能看起来绝对愚蠢,但有人可以提供一个 python 烧瓶应用程序的示例,该应用程序将在 beanstalk 工作环境中运行,该环境仅将“Hello World”打印到我可以在 ec2 实例上找到的某个文件中?请在 .ebextensions 文件夹中包含应该写入的 requirements.txt 文件和任何 *.config 文件。

谢谢

【问题讨论】:

    标签: python logging amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    这是另一个您可以尝试的简单 python 应用程序。博客中的那个也可以,但这显示了一个应用程序的最小示例,该应用程序将从 SQS 接收到的消息打印到 EC2 实例上的文件中。

    您的应用源文件夹应包含以下文件:

    应用程序.py

    import os
    import time
    import flask
    import json
    
    application = flask.Flask(__name__)
    start_time = time.time()
    
    counter_file = '/tmp/worker_role.tmp'
    
    
    @application.route('/', methods=['GET', 'POST'])
    def hello_world():
       if flask.request.method == 'POST':
            with open(counter_file, 'a') as f:
                f.write(flask.request.data + "\n")
            return flask.Response(status=200)
    
    if __name__ == '__main__':
        application.run(host='0.0.0.0', debug=True)
    

    requirements.txt

    Flask==0.9
    Werkzeug==0.8.3
    

    .ebextensions/01-login.config

    option_settings:
        - namespace: aws:autoscaling:launchconfiguration
          option_name: EC2KeyName
          value: your-key-name
    

    使用 Python 2.7 解决方案堆栈启动工作层 1.1 环境。我使用(运行 Python 2.7 的 64 位 Amazon Linux 2014.03 v1.0.4)进行了测试。

    等待环境变绿。在它变为绿色后,单击控制台中可见的队列 URL。这将带您进入 SQS 控制台页面。右键单击队列,然后单击“发送消息”。然后输入以下消息:{"hello" : "world"}

    SSH 到 EC2 实例并打开文件 /tmp/worker_role.tmp。您应该能够在此文件中看到您的消息。

    确保您已正确配置 IAM 策略以使用 Worker Role 环境。 有关 IAM 政策的更多信息,请参阅此答案:https://stackoverflow.com/a/23942498/161628

    【讨论】:

    • 运行良好。谢谢。
    【解决方案2】:

    AWS Application Management 博客上有一个关于 beanstalk 示例的 python+flask:

    http://blogs.aws.amazon.com/application-management/post/Tx1Y8QSQRL1KQZC/Elastic-Beanstalk-Video-Tutorial-Worker-Tier

    http://blogs.aws.amazon.com/application-management/post/Tx36JL4GPZR4G98/A-Sample-App-For-Startups

    对于日志记录问题,我建议:

    • 检查您的 /var/log/eb-cfn-init.log(以及此目录中的其他日志文件),如果 .config 命令失败,您将看到其中的原因和原因。

    • 在您的 .config 命令中,将消息输出到不同的日志文件,以便您在自己的文件中准确查看引导失败的位置。

    • 将您的应用程序日志文件添加到 EB 日志快照 (/opt/elasticbeanstalk/tasks/taillogs.d/) 和 EB S3 日志轮换 (/opt/elasticbeanstalk/tasks/publishlogs.d/)。有关示例,请参见这些目录中的其他文件。

    【讨论】:

    • 我已经看过那个例子了。我已经对我在该过程中所做的很多事情进行了建模,但我正在做一些完全不同的事情,我需要对其进行调试。因此,由于他们没有记录或打印到文件的地方,这对我没有帮助。至于您的其余建议,任何日志中都没有错误消息,最后我没有问题 ssh 到 ec2 实例,因此将日志添加到 EB Log Snapshots 对我没有用。跨度>
    • 建议 2 可能会有所帮助。附加到您自己的日志文件(cmd >> /my/log),然后您可以在实例或 EB 快照或 S3 上查看文件。
    猜你喜欢
    • 2017-09-04
    • 2014-11-27
    • 2016-09-14
    • 2017-06-25
    • 2014-09-12
    • 2016-08-21
    • 2012-03-08
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多