Django 是一个流行的开源 python web 框架,它可以实现快速开发,同时消除日常 web 开发的大部分麻烦。它还可以帮助开发人员避免常见的安全错误。因此,许多应用程序都是使用 Django 构建的。

Django 在 Web 开发人员中非常受欢迎,并且拥有庞大的社区。它为 Web 开发人员提供了现成的组件,用于您需要为 Web 应用程序完成的常见事情。一些示例是用户身份验证、网站的管理面板、表单等。

Django 应用程序由不同的组件构建,例如 Web 服务器、数据库、Web 服务器网关接口等。要监控 Django 应用程序的性能,您需要监控所有这些组件。这就是 OpenTelemetry 发挥作用的地方。

什么是 OpenTelemetry Django?

OpenTelemetry Django 检测支持从您的 Django 应用程序生成遥测数据。然后使用这些数据来监控 Django 应用程序的性能。

OpenTelemetry 提供具有一致收集机制和数据格式的开源标准。作为应用程序所有者,您将始终可以自由选择不同的供应商来可视化收集的遥测数据。

OpenTelemetry 是一组工具、API 和 SDK,用于检测应用程序以创建和管理遥测数据(日志、指标和跟踪)。它旨在使遥测数据(日志、指标和跟踪)成为云原生软件应用程序的内置功能。

使用 OpenTelemetry 的最大优势之一是它与供应商无关。它可以以多种格式导出数据,您可以将其发送到您选择的后端。

在本文中,我们将使用SigNoz作为后端。 SigNoz 是为 OpenTelemetry 原生构建的开源 APM 工具,可用于度量和分布式跟踪。我们将使用 SigNoz 可视化 OpenTelemetry 捕获的数据。

在本文中,我们将使用一个示例 Django 应用程序。

示例 Django 应用程序

我们将使用一个示例民意调查应用程序,该应用程序由两部分组成:

  • 允许人们查看民意调查并在其中投票的公共网站

  • 一个管理站点,可让您添加、更改和删除投票。

详细教程可以在官方 django 网站找到。

[用于使用 OpenTelemetry 监控 Django 应用程序的示例 Django 应用程序的管理员访问 UI](https://res.cloudinary.com/practicaldev/image/fetch/s--HTbhjK1k--/c_limit%2Cf_auto%2Cfl_progressive %2Cq_auto%2Cw_880/https://signoz.io/img/blog/2022/01/django_app_admin_panel.webp)

示例 Django 应用程序的管理站点

使用 OpenTelemetry 运行 Django 应用程序

首先,您需要安装 SigNoz。 OpenTelemetry 收集的数据将被发送到 SigNoz 进行存储和可视化。

您只需在终端上使用三个命令即可开始使用 SigNoz。

git clone https://github.com/SigNoz/signoz.git
cd signoz/deploy/
./install.sh

进入全屏模式 退出全屏模式

以上指令适用于 MacOS 和 linux 发行版。有关详细说明,您可以访问我们的文档。

部署文档

如果您在本地主机上安装了 SigNoz,则可以通过以下方式访问 UI:http://localhost:3000

仪表板中显示的应用程序列表来自一个名为 HOT R.O.D 的示例应用程序,该应用程序与 SigNoz 安装包捆绑在一起。

[SigNoz 仪表板显示应用程序列表](https://res.cloudinary.com/practicaldev/image/fetch/s--7Ot9_rfQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://signoz .io/img/blog/2021/08/signoz_dashboard_hc.webp)

SigNoz 仪表板

使用 OpenTelemetry 检测示例 Django 应用程序

先决条件

Python 3.8 或更新版本

下载Python的最新版本。

运行示例 Django 应用程序

我们将在这个Github repo中使用 Django 应用程序。所有必需的 OpenTelemetry 和 Python 包都包含在requirements.txt文件中。

git clone https://github.com/SigNoz/sample-django.git
cd sample-django

进入全屏模式 退出全屏模式

安装必要的 OpenTelemetry 和 Python 包

requirements.txt文件包含检测所需的所有必要 OpenTelemetry 和 Python 包。要安装这些软件包,请运行以下命令:

pip3 install -r requirements.txt

进入全屏模式 退出全屏模式

这是 requirements.txt 文件中用于使用 OpenTelemetry 运行 Django 应用程序的包的快照。

[Django 应用程序所需的 python 包](https://res.cloudinary.com/practicaldev/image/fetch/s--p2TyBpiE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// /signoz.io/img/blog/2022/01/django_packages.webp)

示例 Django 应用程序所需的包

安装特定应用程序包

此步骤是安装特定于应用程序的软件包所必需的。此命令确定用户可能想要安装的检测包并为他们安装它:

opentelemetry-bootstrap --action=install

进入全屏模式 退出全屏模式

准备你的 Django 应用程序

现在您需要运行以下三个命令来准备示例 Django 应用程序。

一个。此命令用于执行初始数据库迁移。您只需要在第一次部署应用程序时运行它。

   python3 manage.py migrate

进入全屏模式 退出全屏模式

湾。此命令用于将来自多个应用程序的静态文件收集到单个路径中。

   python3 manage.py collectstatic

进入全屏模式 退出全屏模式

C。以下命令创建一个可以登录到管理站点的用户。系统将要求您创建用户名和密码。稍后您将需要用户名和密码才能登录到管理门户。

   python3 manage.py createsuperuser

进入全屏模式 退出全屏模式

示例应用程序创建一个管理员登录,如下图所示。

[Django 应用登录 UI](https://res.cloudinary.com/practicaldev/image/fetch/s--vMWNZ57e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://signoz. io/img/blog/2022/01/django_app_login.webp)

您将需要用户名和密码才能登录管理面板

配置环境变量以运行应用程序并将数据发送到 SigNoz

最后,您可以使用 OpenTelemetry 运行您的 Django 应用程序并将数据发送到 SigNoz 进行监控。您可以通过三种方式做到这一点,您可以选择更适合您的方式。

一个。 要使用 gunicorn 运行,您需要添加 post_fork 钩子

为了使用 Gunicorn 运行示例应用程序,我们添加了一个名为gunicorn.config.py的文件。在此步骤中,您只需为您的 OTLP 导出器配置一些环境变量。需要配置的环境变量:

-service.name应用服务名称(可以随意命名)

-OTEL_EXPORTER_OTLP_ENDPOINT- 在这种情况下,安装 SigNoz 的机器的 IP

-DJANGO_SETTINGS_MODULE

不要在重新加载/热重新加载模式下运行应用程序,因为它会破坏检测。

DJANGO_SETTINGS_MODULE=<DJANGO_APP>.settings  OTEL_RESOURCE_ATTRIBUTES=service.name=<serviceName> OTEL_EXPORTER_OTLP_ENDPOINT="http://<IP OF SigNoz>:4317" opentelemetry-instrument gunicorn <DJANGO_APP>.wsgi -c gunicorn.config.py --workers 2 --threads 2 --reload

进入全屏模式 退出全屏模式

由于我们在本地主机上运行 SigNoz,在这种情况下,IP of SigNoz可以替换为localhost。并且,对于service_name ,让我们使用DjangoApp。此示例中的 DJANGO_SETTINGS_MODULE 是 mysite.settings。因此,最终命令变为:

DJANGO_SETTINGS_MODULE=mysite.settings  OTEL_RESOURCE_ATTRIBUTES=service.name=DjangoApp OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" opentelemetry-instrument gunicorn mysite.wsgi -c gunicorn.config.py --workers 2 --threads 2 --reload

进入全屏模式 退出全屏模式

而且,恭喜!您已启用 OpenTelemetry 以从 Django 应用程序中捕获遥测数据。而且,您正在将捕获的数据发送到 SigNoz。

您可以通过在http://localhost:8000/admin打开管理面板来检查您的应用程序。

如果您在本地主机上安装了 SigNoz,则可以通过http://localhost:3000访问 SigNoz 仪表板,以监控 Django 应用的性能指标。

您需要在您的应用程序上生成一些负载,以便 OpenTelemetry 可以捕获数据。尝试在民意调查应用程序中添加一些问题并进行尝试。

[SigNoz 仪表板显示应用程序列表,其中 Django 应用程序被监控](https://res.cloudinary.com/practicaldev/image/fetch/s--731YW9O2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/ https://signoz.io/img/blog/2022/01/django_app_signoz.webp)

您将在 SigNoz 仪表板上监控的应用程序列表中找到 Django 应用程序。其他应用程序来自随 SigNoz 一起加载的示例应用程序。

还有其他两种方法可以使用 Docker 和 Docker compose 来运行带有 OpenTelemetry 的 Django 应用程序。

湾。 如果想直接运行django app的docker镜像

docker run --env OTEL_METRICS_EXPORTER=none \
    --env OTEL_SERVICE_NAME=djangoApp \
    --env OTEL_EXPORTER_OTLP_ENDPOINT=http://<IP of SigNoz>:4317 \
    --env DJANGO_SETTINGS_MODULE=mysite.settings \
    -p 8000:8000 \
    -t signoz/sample-django:latest1 opentelemetry-instrument gunicorn mysite.wsgi -c gunicorn.config.py --workers 2 --threads 2 --reload --bind 0.0.0.0:8000

进入全屏模式 退出全屏模式

C。 如果想在 docker-compose 中使用 django 应用程序的 docker 镜像

django-app:
    image: "signoz/sample-django:latest"
    container_name: sample-django
    command: opentelemetry-instrument gunicorn mysite.wsgi -c gunicorn.config.py --workers 2 --threads 2 --reload --bind 0.0.0.0:8000
    ports:
      - "8000:8000"
    environment:
    - OTEL_METRICS_EXPORTER=none
    - OTEL_SERVICE_NAME=djangoApp
    - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
    - DJANGO_SETTINGS_MODULE=mysite.settings

进入全屏模式 退出全屏模式

使用 SigNoz 浏览应用程序并检查数据

一个。访问http://localhost:8000/admin并创建一个投票问题

湾。然后访问http://localhost:8000/polls/的投票列表并浏览投票

C。数据现在应该在 SigNoz 中的http://<IP of SigNoz>:3000可见

用于可视化遥测数据的开源工具

SigNoz 可以轻松可视化通过 OpenTelemetry 仪器捕获的指标和跟踪。

SigNoz 带有开箱即用的 RED 指标图表和可视化。 RED 指标代表:

  • 请求率

  • 请求错误率

  • 请求的持续时间

[SigNoz 图表和指标](https://res.cloudinary.com/practicaldev/image/fetch/s---EjS1eNR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/signoz. io/img/blog/common/signoz_charts_application_metrics.webp)

使用 SigNoz 测量应用程序延迟、每秒请求数、错误百分比等内容并查看您的顶级端点。

然后,您可以选择延迟较高的特定时间戳,以深入了解围绕该时间戳的跟踪。

[SigNoz 仪表板上的跟踪列表](https://res.cloudinary.com/practicaldev/image/fetch/s--zipHHg5s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/signoz .io/img/blog/common/signoz_list_of_traces_hc.webp)

特定时间戳的跟踪视图

您可以使用火焰图来准确识别导致延迟的问题。

[用于在 SigNoz UI 中可视化分布式跟踪范围的火焰图](https://res.cloudinary.com/practicaldev/image/fetch/s--fmGoLDx8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880 /https://signoz.io/img/blog/common/signoz_flamegraphs.webp)

特定时间戳的跟踪视图

您还可以为您的基础架构构建自定义指标仪表板。

[自定义指标仪表板](https://res.cloudinary.com/practicaldev/image/fetch/s--z7C5zsAp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/signoz.io/ img/blog/common/signoz_custom_dashboard-min.webp)

您还可以为您的基础架构构建自定义指标仪表板

结论

OpenTelemetry 使检测 Django 应用程序变得非常方便。然后,您可以使用像 SigNoz 这样的开源 APM 工具来分析您的应用程序的性能。由于 SigNoz 提供了全栈可观察性工具,因此您不必使用多种工具来满足您的监控需求。

您可以通过访问其 GitHub 存储库来试用 SigNoz 👇

SigNoz GitHub repo

如果您有任何问题或在设置方面需要任何帮助,请加入我们的 slack 社区并在#help频道联系我们。

SigNoz Slack 社区


如果您想了解更多关于 SigNoz 的信息👇

使用 OpenTelemetry 和 SigNoz 进行 Golang 应用程序监控

OpenTelemetry 收集器 - 完整指南

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐