如何监控 Python Web 应用程序

检查可操作的 Python Web 应用程序中的错误和问题的一种快速方法是使用许多很棒的托管监控工具之一。

让我们学习如何快速将 Rollbar 监控添加到 Web 应用程序,以可视化我们的应用程序何时正常运行以及何时出现问题。本教程将使用 Bottle 作为示例 Web 框架,并使用 Rollbar 作为监控服务,但您也可以在监控页面上查看其他工具的列表。

我们的工具

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

  • pip 和 virtualenv 随 Python 3 一起安装,用于安装 Bottle 和 Rollbar 库并将其与其他项目隔离
  • Bottle web 框架,版本 0.12.13
  • pyrollbar Bottle 应用程序中的监控仪器库,版本 0.13.13,因此 pyrollbar 可以报告所有错误
  • 一个免费的 Rollbar 帐户,我们将在其中发送错误数据并在捕获时查看它

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

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

安装依赖

使用以下命令为此项目创建一个新的虚拟环境。我建议在 ~/Envs/ 下为 virtualenvs 保留一个单独的目录,这样您就会知道所有项目 virtualenvs 的位置。

python3 -m venv monitorpython

使用 activate shell 脚本激活 virtualenv:

source monitorpython/bin/activate

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

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

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

我们现在可以将 Bottle 和 Rollbar 安装到激活的虚拟环境中。

pip install bottle==0.12.13 rollbar==0.13.13

查找如下所示的输出以确认正确安装了依赖项。

Installing collected packages: bottle, urllib3, certifi, idna, chardet, requests, six, rollbar
  Running setup.py install for bottle ... done
    Running setup.py install for rollbar ... done
    Successfully installed bottle-0.12.13 certifi-2017.7.27.1 chardet-3.0.4 idna-2.6 requests-2.18.4 rollbar-0.13.13 six-1.11.0 urllib3-1.22

我们已经准备好依赖项,所以现在我们可以构建我们的 Python 网络应用程序。

我们的 Python 网络应用

为您的项目创建一个名为 monitor-python-apps 的文件夹。 cd 到文件夹中,然后使用以下代码创建一个名为 app.py 的文件。

import bottle
import os
import re
from bottle import route, template


TEMPLATE_STRING = """
<html>
 <head>
  <title>Full Stack Python Web App</title>
 </head>
 <body>
  <h1>{{ h1 }}</h1>
 </body>
</html>
"""

MIN_MSG_LENGTH = 2


@route("/<msg>/")
def show_message(msg):
    """Display a message if the msg value is greater than 2 characters
    in the path.
    """
    valid_length = len(msg) >= MIN_MSG_LENGTH
    valid_name = re.match('^[a-z\-]+$', msg.lower()) is not None
    if valid_length and valid_name:
        return template(TEMPLATE_STRING, h1=msg)
    else:
        error_msg = "Sorry, only alpha characters and hyphens allowed."
        raise Exception(error_msg)


if __name__ == "__main__":
    bottle.run(host='localhost', port=8080)

上面的应用程序代码有一些标准的 Bottle 导入,所以我们可以创建一个 Bottle 网络应用程序并处理 URL 路由。

我们有一个函数,show_message,它处理一个 BottleURL 路由。 show_message 检查 URL 路径是否仅包含要显示的消息的字母字符和连字符。如果消息通过条件,则在 h1 元素中呈现带有该消息的页面。如果 msg 没有通过条件测试,则会抛出一个异常,只允许使用字母字符和连字符。

保存app.py,我们就可以运行我们的代码了。使用 app.py 命令执行 python 如下(确保您的 virtualenv 在您运行此命令的终端中仍处于激活状态):

python app.py

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

运行本地 Bottle 开发服务器。

尝试访问路径只包含字母字符和连字符的 URL,例如 localhost:8080/hello-world/。

在 /hello-world/ 进行测试返回 HTTP 200 响应。

应用程序成功地显示了“hello-world”,但是如果我们尝试一个包含数字和字母字符的 URL,例如 localhost:8080/fullstackpython123/ 呢?

将数字添加到 URL 时,我们收到 500 错误。

HTTP 500 错误。这肯定不是好的用户体验。

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

是时候修改我们的代码以添加 Rollbar 来报告发生的错误了。

使用 Rollbar 监控错误

在浏览器中转到 Rollbar 主页,将他们的工具添加到我们的 Bottle 应用中。

Chrome 网络浏览器中的 Rollbar 主页。

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

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

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

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

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

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

让我们更改 Bottle 代码,让 Rollbar 收集和汇总应用程序中弹出的错误。修改 app.py 以包含以下突出显示的行。

import bottle
import os
import re
from bottle import route, template
from rollbar.contrib.bottle import RollbarBottleReporter


TEMPLATE_STRING = """
<html>
 <head>
  <title>Full Stack Python Web App</title>
 </head>
 <body>
  <h1>{{ h1 }}</h1>
 </body>
</html>
"""

MIN_MSG_LENGTH = 2
ROLLBAR_SECRET = os.environ.get("ROLLBAR_SECRET")

rb_monitor = RollbarBottleReporter(access_token=ROLLBAR_SECRET,
                                   environment='production')
bottle.install(rb_monitor)


@route("/<msg>/")
def show_message(msg):
    """Display a message if the msg value is greater than 2 characters
    in the path.
    """
    valid_length = len(msg) >= MIN_MSG_LENGTH
    valid_name = re.match('^[a-z\-]+$', msg.lower()) is not None
    if valid_length and valid_name:
        return template(TEMPLATE_STRING, h1=msg)
    else:
        error_msg = "Sorry, only alpha characters and hyphens allowed."
        raise Exception(error_msg)


if __name__ == "__main__":
    bottle.run(host='localhost', port=8080)

一个新的 import from rollbar.contrib.bottle import RollbarBottleReporter 是我们在应用程序和 Rollbar 服务器之间的管道。 rollbar是我们之前安装的库。

需要在环境变量中设置ROLLBAR_SECRET 标记。保存并退出app.py。在激活了 yourvirtualenv 的终端中运行以下命令:

export ROLLBAR_SECRET='token here'

如果您不确定您的秘密令牌是什么,可以在 Rollbar 登录屏幕上找到它。

请注意,我通常将所有环境变量存储在一个 .env 文件中,并使用 atemplate.envas 作为我应该填充到 .env 中的模板。 .env 可以使用 . .env 命令从终端调用。不过,请确保永远不要将您的秘密令牌提交到源代码控制存储库,尤其是如果存储库是公开的!

ROLLBAR_SECRET 键导出为环境变量后,我们可以在运行应用程序时测试 Rollbar 是否正常工作。现在使用 python 运行它:

python app.py

返回您的网络浏览器,按“完成!转到仪表板”按钮。

如果尚未报告事件,我们将看到类似这样的等待屏幕:

等待 Rollbar 仪表板上的数据。

确保您的 Bottle 开发服务器正在运行并尝试访问 localhost:8080/fullstackpython123/。仪表板上立即报告 500 服务器错误:

查看 Rollbar 仪表板中报告的 500 个错误。

我们甚至会收到一封包含错误的电子邮件(如果您不希望每个错误都收到电子邮件,也可以将其关闭):

通过电子邮件发送 Rollbar 错误报告。

很好,只需几行代码,我们的 Bottle 应用程序就会向使用我们的应用程序的任何用户报告错误。

现在怎么办?

我们刚刚在一个简单的示例 Bottle 应用程序中学习了如何使用 Rollbar 作为托管监控平台来捕获和处理错误。接下来,您将要为更复杂的 Web 应用程序添加监控,包括使用 Django 或 Flask 的应用程序。您还可以尝试使用 Rollbar 的更高级功能来:

  • 设置错误分组规则
  • 调试和跟踪部署问题
  • 按用户排序和查看错误

在 Web 开发和部署领域还有很多东西需要学习,因此请通过阅读 Web 框架来继续学习。您还可以通过他们的 Python 文档了解有关将 Rollbar 与 Python 应用程序集成的更多信息。

有问题吗?在 Twitter@fullstackpython 或@mattmakai 上通过 Full Stack Python 存储库上的 GitHub 问题单让我知道。

您是否在这篇博文中发现了拼写错误、语法问题或其他令人困惑的地方?在 GitHub 上分叉此页面的源代码并提交带有修复的拉取请求或在 GitHub 上提交问题单。

赞(0) 打赏

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

支付宝扫一扫打赏

微信扫一扫打赏