使用 Rollbar 监控 Django 项目

在 Django 网络应用程序项目中扫描异常和错误的一种快速方法是添加几行代码以包含托管监控工具。

在本教程中,我们将学习将 Rollbar 监控服务添加到 Web 应用程序以可视化我们的 Web 应用程序产生的任何问题。本教程将使用 Django 作为 Web 框架来构建 Web 应用程序,但也有 Flask 和 Bottle 框架的教程.您还可以在监控页面上查看其他托管和开源工具的列表。

我们的工具

本教程强烈推荐使用 Python 3,因为从 2020 年 1 月 1 日起将不再支持 Python 2。本教程使用 Python 3.6.4 构建。我们还将使用以下应用程序依赖项来构建我们的应用程序:

  • Django 网络框架,版本 2.0.4
  • rollbar 监控工具库,版本 0.13.18,用于报告异常和错误
  • pip 和虚拟环境,它们随 Python 3 一起安装, 安装这些 Django 和 Rollbar 库并将其与您的其他应用程序隔离
  • 一个免费的 Rollbar 帐户,我们将在其中发送错误数据并在捕获时查看它

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

这篇博文中的所有代码都可以在 GitHub 上以 MIT 许可在 blog-code-examples 存储库的 monitor-python-django-apps 目录中以开源方式获得。根据您的喜好为自己的应用程序使用和修改代码。

安装依赖

通过使用以下命令创建一个新的虚拟环境来启动项目。我建议保留一个单独的目录,例如 ~/venvs/,以便您始终知道所有 virtualenvs 的位置。

python3 -m venv monitordjango

使用 activate shell 脚本激活 virtualenv:

source monitordjango/bin/activate

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

在命令行上激活 virtualenv。

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

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

pip install django==2.0.4 rollbar==0.13.18

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

Collecting certifi>=2017.4.17 (from requests>=0.12.1->rollbar==0.13.18)
  Downloading certifi-2018.1.18-py2.py3-none-any.whl (151kB)
    100% |████████████████████████████████| 153kB 767kB/s 
Collecting urllib3<1.23,>=1.21.1 (from requests>=0.12.1->rollbar==0.13.18)
  Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests>=0.12.1->rollbar==0.13.18)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests>=0.12.1->rollbar==0.13.18)
  Using cached idna-2.6-py2.py3-none-any.whl
Installing collected packages: pytz, django, certifi, urllib3, chardet, idna, requests, six, rollbar
  Running setup.py install for rollbar ... done
Successfully installed certifi-2018.1.18 chardet-3.0.4 django-2.0.4 idna-2.6 pytz-2018.3 requests-2.18.4 rollbar-0.13.18 six-1.11.0 urllib3-1.22

我们已经准备好依赖项,现在我们可以为我们的 Django 项目编写代码了。

我们的 Django 网络应用

Django 使用 django-admin.py 命令可以轻松地为新项目和应用程序生成样板代码。转到您通常存储编码项目的目录。例如,在我的 Mac 上,我使用 /Users/matt/devel/py/。然后运行以下命令启动一个名为djmonitor的Django项目:

django-admin.py startproject djmonitor

该命令将创建一个名为 djmonitor 的目录,其中包含几个您之前使用过 Django 时应该熟悉的子目录。

将目录更改为新项目。

cd djmonitor

为我们的示例代码启动一个新的 Django 应用。

python manage.py startapp billions

Django 将为我们的项目创建一个名为 billions 的新文件夹。在我们为应用程序编写代码之前,让我们确保我们的 Django URLS 正常工作。

现在打开 djmonitor/djmonitor/urls.py 并添加突出显示的行,以便路径为 /billions/ 的 URL 将被路由到我们正在处理的应用程序。

""" (comments section)
"""
from django.conf.urls import include
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('billions/', include('billions.urls')),
    path('admin/', admin.site.urls),
]

保存djmonitor/djmonitor/urls.py并打开djmonitor/djmonitor/settings.py。将billions应用添加到settings.py 通过插入突出显示的行,插入后将成为第 40 行:

# Application definition

INSTALLED_APPS = [ 
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'billions',
]

保存并关闭settings.py

提醒:确保更改DEBUG中的默认SECRET_KEYsettings.py值> 在将任何代码部署到生产环境之前。使用 Django 生产部署清单中的信息正确保护您的应用程序,这样您就不会将您的项目添加到网络上的被黑应用程序列表中。

接下来进入djmonitor/billions 目录。创建一个名为urls.py 的新文件,该文件将特定于billions 项目中的djmonitor 应用的路由。 p>

将以下行添加到当前空白的 djmonitor/billions/urls.py 文件中。

from django.conf.urls import url                                                                                                                              
from . import views

urlpatterns = [ 
    url(r'(?P<slug>[\wa-z-]+)', views.they, name="they"),
]

保存###。在我们可以测试我们的简单 Django 应用程序是否工作之前,还有一个文件。打开djmonitor/billions/urls.py

from django.core.exceptions import PermissionDenied
from django.shortcuts import render


def they(request, slug):
    if slug and slug == "are":
        return render(request, 'billions.html', {})
    else:
        raise PermissionDenied("Hmm, can't find what you're looking for.")

templates 应用程序目录下为名为 djmonitor/billions 的模板文件创建一个目录。

mkdir templates

templates 中创建一个名为 billions.html 的新文件,其中包含以下 Django 模板标记。

<!DOCTYPE html>
<html>
  <head>
    <title>They... are BILLIONS!</title>
  </head>
  <body>
    <h1><a href="http://store.steampowered.com/app/644930/They_Are_Billions/">They Are Billions</a></h1>
    <img src="https://media.giphy.com/media/2jUHXTGhGo156/giphy.gif">
  </body>
</html>

好的,我们所有的文件都已准备就绪,因此我们可以测试应用程序。在项目的基本目录中运行 Django 开发服务器:

python manage.py runserver

Django 开发服务器将启动,除了未应用的迁移警告之外没有任何问题。

(monitordjango) $ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

April 08, 2018 - 19:06:44
Django version 2.0.4, using settings 'djmonitor.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

只有 /billions/ 路由才能成功访问我们的 billions 应用。尝试访问“http://localhost:8000/billions/are/”。我们应该看到带有 gif 的模板渲染器:

正在 /billions/are/ 测试本地开发服务器。

太棒了,我们的应用程序成功地呈现了一个超级简单的 HTML 页面,其中包含我最喜欢的电脑游戏之一的 GIF。如果我们在 /billions/ 下尝试另一个路径,例如“http://localhost:8000/billions/arenot/”,会怎样?

403 /billions/ 下除 /billions/are/ 之外的任何路径的禁止错误。

我们的 403 Forbidden 出现了,这是我们基于我们的代码所期望的。这是一个有点人为的代码块,但让我们看看我们如何在不更改我们的 ###代码。在修改现有应用程序时,与必须重构代码以报告这些类型的错误相比,这种方法对我们来说要容易得多,如果我们甚至知道它们存在的位置的话。

使用 Rollbar 监控

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

Chrome 中的 rollbar.com。

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

注册 Rollbar。

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

创建名为“Full Stack Python”的项目并选择 Python 作为编程语言。

按底部的“继续”按钮继续前进。下一个屏幕向我们展示了一些关于如何添加监控的说明。

使用服务器端访问令牌配置项目。

让我们更改我们的 Django 项目代码,让 Rollbar 收集和聚合应用程序中弹出的错误。

重新打开djmonitor/djmonitor/settings.py并查找MIDDLEWARE列表。添加rollbar.contrib.django.middleware.RollbarNotifierMiddleware作为最后一项:

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'rollbar.contrib.django.middleware.RollbarNotifierMiddleware',
]

暂时不要关闭settings.py。接下来将以下行添加到文件底部。将 access_token 值更改为您的 Rollbar 服务器端访问令牌,并将 root 更改为您正在开发项目的目录。

ROLLBAR = {
    'access_token': 'access token from dashboard',
    'environment': 'development' if DEBUG else 'production',
    'branch': 'master',
    'root': '/Users/matt/devel/py/blog-code-examples/monitor-django-apps/djmonitor',
    'patch_debugview': False,
}

如果您不确定您的秘密令牌是什么,可以在 Rollbar 登录屏幕或在 rollbar.com 中的“设置”->“访问令牌”中找到它。

请注意,我通常将所有环境变量存储在 .env

我们可以在运行应用程序时测试 Rollbar 是否正常工作。立即使用开发服务器运行它。

python manage.py runserver

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

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

等待仪表板上的事件数据。

确保您的 Django 开发服务器仍在运行并尝试转到“http://localhost:8000/billions/arenot/”。仪表板上会立即报告 403 错误:

403 Rollbar 仪表板屏幕上的禁止异常。

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

通过电子邮件报告您的 Django 应用程序中的错误。

好的,我们现在已经为我们的 Django 应用程序配置了监控和错误报告!

现在怎么办?

我们学会了使用 Rollbar 捕捉 Django 项目中的问题,并在 Rollbar 的界面中查看错误。接下来尝试 Rollbar 的更高级监控功能,例如:

  • 按用户排序错误
  • 配置组错误规则
  • 调试部署问题

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

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

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

赞(0) 打赏

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

支付宝扫一扫打赏

微信扫一扫打赏