如何将托管监控添加到 Flask Web 应用程序

您如何知道您的应用程序在构建和部署后是否正常运行且错误最少?监控运行中的 Flask Web 应用程序的最快和最简单的方法是集成许多可用的出色托管监控工具之一。

在这篇文章中,我们将快速添加 Rollbar 监控以捕获错误并可视化我们的应用程序是否正常运行。还有许多其他很棒的托管监控工具,您可以在监控页面上查看。

我们的工具

我们可以使用 Python 2 或 3 来构建本教程,但强烈建议所有新应用程序使用 Python 3。我使用 Python 3.6.2 来执行我的代码。我们还将在整个帖子中使用以下应用程序依赖项:

  • Flask web 框架,版本 0.12.2
  • pyrollbar 监控工具库,版本 0.13.12
  • 用于在 Flask 应用程序中发出信号支持的闪烁器,以便 pyrollbar 可以报告所有错误
  • 一个免费的 Rollbar 帐户,我们将在其中发送错误数据并在捕获时查看它
  • pip 和 virtualenv 虚拟环境库,它们与 Python 3 一起打包,用于安装和隔离 Flask 和 Rollbar 库来自您正在从事的其他 Python 项目

如果您在运行此代码之前需要配置开发环境方面的帮助,请查看此指南以在 Ubuntu 16.04 LTS 上设置 Python 3 和 Flask。

这篇博文中的所有代码都可以在 GitHub 上的 blog-code-examples 存储库的 monitor-flask-apps 目录下的 MIT 许可下获得开源。根据您自己的应用程序的需要使用和滥用源代码。

安装依赖

切换到您保存 Python virtualenvs 的目录。使用以下命令为此项目创建一个新的虚拟环境。

python3 -m venv monitorflask

激活虚拟环境。

source monitorflask/bin/activate

激活 virtualenv 后命令提示符将发生变化:

在命令行上激活我们的 Python 虚拟环境。

请记住,您需要在每个要使用 virtualenv 运行项目的新终端窗口中激活 virtualenv。

Flask、Rollbar 和 Blinker 现在可以安装到现在激活的虚拟环境中。

pip install flask==0.12.2 rollbar==0.13.12 blinker==1.4

我们所需的依赖项应该在短安装期后安装在我们的虚拟环境中。查找如下所示的输出以确认一切正常。

Installing collected packages: blinker, itsdangerous, click, MarkupSafe, Jinja2, Werkzeug, Flask, idna, urllib3, chardet, certifi, requests, six, rollbar
  Running setup.py install for blinker ... done
  Running setup.py install for itsdangerous ... done
  Running setup.py install for MarkupSafe ... done
  Running setup.py install for rollbar ... done
Successfully installed Flask-0.12.2 Jinja2-2.9.6 MarkupSafe-1.0 Werkzeug-0.12.2 blinker-1.4 certifi-2017.4.17 chardet-3.0.4 click-6.7 idna-2.5 itsdangerous-0.24 requests-2.18.1 rollbar-0.13.12 six-1.10.0 urllib3-1.21.1

现在我们已经将 Python 依赖项安装到我们的虚拟环境中,我们可以创建应用程序的初始版本。

构建我们的 Flask 应用

为您的项目创建一个名为 monitor-flask-apps 的文件夹。切换到该文件夹​​,然后使用以下代码创建名为 app.py 的文件。

import re
from flask import Flask, render_template, Response
from werkzeug.exceptions import NotFound


app = Flask(__name__)
MIN_PAGE_NAME_LENGTH = 2


@app.route("/<string:page>/")
def show_page(page):
    try:
        valid_length = len(page) >= MIN_PAGE_NAME_LENGTH
        valid_name = re.match('^[a-z]+$', page.lower()) is not None
        if valid_length and valid_name:
            return render_template("{}.html".format(page))
        else:
            msg = "Sorry, couldn't find page with name {}".format(page)
            raise NotFound(msg)
    except:
        return Response("404 Not Found")


if __name__ == "__main__":
    app.run(debug=True)

上面的应用程序代码有一些标准的 Flask 导入,因此我们可以创建一个 Flask 网络应用程序并呈现模板文件。我们有一个名为 show_page 的函数来为单个 Flask 路由提供服务。 show_page检查 URL 路径是否仅包含潜在页面名称的小写字母字符。如果可以在templates文件夹中找到页面名称,则呈现页面,否则抛出找不到页面的异常。如果我们的函数要返回非错误响应,我们至少需要创建一个模板文件。

保存app.py 并在您的项目目录下创建一个名为templates 的新子目录。创建一个名为 battlegrounds.html 的新文件,并将以下 Jinja2 模板标记放入其中。

<!DOCTYPE html>
<html>
  <head>
    <title>You found the Battlegrounds GIF!</title>
  </head>
  <body>
    <h1>PUBG so good.</h1>
    <img src="https://media.giphy.com/media/3ohzdLMlhId2rJuLUQ/giphy.gif">
  </body>
</html>

上面的 Jinja2 模板是没有任何嵌入式模板标签的基本 HTML。该模板创建了一个非常普通的页面,其中包含标题描述“PUBG so good”和来自这款出色电脑游戏的 GIF。

是时候运行和测试我们的代码了。切换到 app.py 文件所在的项目的基本目录。使用 app.py 命令执行 python 如下(确保您的 virtualenv 在您运行此命令的终端中仍处于激活状态):

python app.py

Flask 开发服务器应该启动并显示几行输出。

在本地运行 Flask 开发服务器。

当我们访问运行在本地主机端口 5000 上的应用程序时会发生什么?

在基本 URL 上测试我们的 Flask 应用程序收到 HTTP 404 错误。

未找到 HTTP 状态 404 页面,这是我们所期望的,因为我们只定义了一个路由并且它不在基本路径中。

我们创建了一个名为 battlegrounds.html 的模板,当我们转到 localhost:5000/battlegrounds/ 时应该可以访问它。

在 /battlegrounds/ 测试我们的 Flask 应用程序会得到带有 GIF 的正确模板。

应用程序成功找到了 battlegrounds.html 模板,但这是唯一可用的模板。如果我们尝试 localhost:5000/fullstackpython/ 会怎么样?

如果没有找到模板,我们会收到 500 错误。

HTTP 500 错误。那可不行。

404 和 500 错误现在对我们来说很明显,因为我们正在本地测试应用程序。但是,当部署应用程序并且用户在自己的 Web 浏览器中收到错误时会发生什么?他们通常会因为沮丧而退出,除非您添加一些错误跟踪和应用程序监控,否则您永远不会知道发生了什么。

我们现在将修改我们的代码以添加 Rollbar 以捕获并报告为我们的用户发生的错误。

处理错误

前往 Rollbar 的主页,这样我们就可以将他们托管的监控工具添加到我们经常出错的 Flask 应用程序中。

网络浏览器中的滚动条主页。

点击右上角的“注册”按钮。在注册页面上输入您想要的电子邮件地址、用户名和密码。

在注册页面上输入您的基本帐户信息。

在注册页面之后,您将看到入职流程,您可以在其中输入项目名称并选择编程语言。对于项目名称,输入“Battlegrounds”并选择您正在监控 Python 应用程序。

创建一个名为'Battlegrounds' 的新项目并选择 Python 作为编程语言。

按底部的“继续”按钮继续前进。下一个屏幕向我们展示了一些向我们的 Flask 应用程序添加监控的快速说明。

使用您的服务器端访问令牌设置您的项目。

让我们修改我们的 Flask 应用程序来测试我们是否可以正确连接到 Rollbar 的服务。更改 app.py 以包含以下突出显示的行。

import os

导入报告

导入滚动条

from flask import Flask, render_template, Responsefrom werkzeug.exceptions import NotFoundapp = Flask(__name__)MIN_PAGE_NAME_LENGTH = 2

@app.before_first_requestdef add_monitoring(): rollbar.init(os.environ.get(‘ROLLBAR_​​SECRET’)) rollbar.report_message(‘Rollbar 配置正确’)

@app.route(“https://www.fullstackpython.com//”)def show_page(page): 尝试:valid_length = len(page) >= MIN_PAGE_NAME_LENGTH valid_name = re.match(

‘^[a-z]+$’

, page.lower()) 不是

如果 valid_length 和 valid_name:返回 render_template(“{}.html”.format(page)) else: msg = “Sorry, couldn’t find page with name {}”.format(page) raise NotFound(msg)除了: return Response(“404 Not Found”)if __name__ == “__main__”: app.run(debug=

正确

)

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏