跳转到主要内容

Django中间件,用于使用Prometheus.io监控您的应用程序。

项目描述

django-prometheus

导出Django监控指标以供Prometheus.io使用

Join the chat at https://gitter.im/django-prometheus/community

PyPI version Build Status Coverage Status PyPi page link -- Python versions Code style: black

特性

此库为Django相关操作提供Prometheus指标

用法

需求

  • Django >= 3.2
  • Python 3.7及以上。

安装

使用以下命令安装

pip install django-prometheus

或者,如果您使用的是从该存储库克隆的开发版本

python path-to-where-you-cloned-django-prometheus/setup.py install

这将安装prometheus_client作为依赖项。

快速入门

在您的settings.py中

INSTALLED_APPS = [
   ...
   'django_prometheus',
   ...
]

MIDDLEWARE = [
    'django_prometheus.middleware.PrometheusBeforeMiddleware',
    # All your other middlewares go here, including the default
    # middlewares like SessionMiddleware, CommonMiddleware,
    # CsrfViewmiddleware, SecurityMiddleware, etc.
    'django_prometheus.middleware.PrometheusAfterMiddleware',
]

在您的urls.py中

urlpatterns = [
    ...
    path('', include('django_prometheus.urls')),
]

配置

Prometheus使用基于直方图的分组来监控延迟。默认的桶如下:

PROMETHEUS_LATENCY_BUCKETS = (0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0, 25.0, 50.0, 75.0, float("inf"),)

您可以定义自定义的延迟桶,增加更多的桶会降低性能但提高准确性: https://prometheus.ac.cn/docs/practices/histograms/

PROMETHEUS_LATENCY_BUCKETS = (.1, .2, .5, .6, .8, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.5, 9.0, 12.0, 15.0, 20.0, 30.0, float("inf"))

监控您的数据库

可以监控SQLite、MySQL和PostgreSQL数据库。只需替换数据库的ENGINE属性,将django.db.backends替换为django_prometheus.db.backends

DATABASES = {
    'default': {
        'ENGINE': 'django_prometheus.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
}

监控您的缓存

文件基础、memcached、redis缓存可以监控。只需替换缓存后端,使用django_prometheus提供的缓存后端django.core.cache.backends替换为django_prometheus.cache.backends

CACHES = {
    'default': {
        'BACKEND': 'django_prometheus.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',
    }
}

监控您的模型

您可能想监控您模型的创建/删除/更新速率。这可以通过向其中添加混入来实现。这可以在现有模型上安全地做(不需要迁移)。

如果您的模型是:

class Dog(models.Model):
    name = models.CharField(max_length=100, unique=True)
    breed = models.CharField(max_length=100, blank=True, null=True)
    age = models.PositiveIntegerField(blank=True, null=True)

只需如此添加ExportModelOperationsMixin

from django_prometheus.models import ExportModelOperationsMixin

class Dog(ExportModelOperationsMixin('dog'), models.Model):
    name = models.CharField(max_length=100, unique=True)
    breed = models.CharField(max_length=100, blank=True, null=True)
    age = models.PositiveIntegerField(blank=True, null=True)

这将导出3个指标,django_model_inserts_total{model="dog"}django_model_updates_total{model="dog"}django_model_deletes_total{model="dog"}

注意,导出的指标是当前进程中创建、修改和删除的计数器,它们不是模型中对象数量的仪表。

从Django 1.7开始,迁移也被监控。导出两个仪表,django_migrations_applied_by_connectiondjango_migrations_unapplied_by_connection。您可能希望对未应用的迁移发出警报。

如果您想禁用Django迁移指标,请将PROMETHEUS_EXPORT_MIGRATIONS设置设置为False。

监控和汇总指标

Prometheus设置起来相当简单。在examples/prometheus中可以找到抓取127.0.0.1:8001的示例prometheus.conf。

这是一个显示django-prometheus收集的一些指标的PromDash示例

Example dashboard

添加您自己的指标

您可以通过直接使用prometheus_client在代码中添加应用程序级别的指标。导出器是全局的,并将捕获您的指标。

要添加指标到Django内部,最简单的方法是扩展django-prometheus的类。请考虑贡献您的指标,欢迎pull请求。确保阅读Prometheus在仪表化命名方面的最佳实践。

仅使用本地设置导入Django Prometheus

如果您想使用Django Prometheus但无法更改代码库,可以通过修改设置来获得所有默认指标。

第一步是注入Prometheus中间件,并将django_prometheus添加到INSTALLED_APPS中

MIDDLEWARE = \
    ['django_prometheus.middleware.PrometheusBeforeMiddleware'] + \
    MIDDLEWARE + \
    ['django_prometheus.middleware.PrometheusAfterMiddleware']

INSTALLED_APPS += ['django_prometheus']

第二步是创建/metrics端点,为此我们需要另一个文件(在这个示例中称为urls_prometheus_wrapper.py),它将包装应用程序的URL并在其顶部添加一个

from django.urls import include, path


urlpatterns = []

urlpatterns.append(path('prometheus/', include('django_prometheus.urls')))
urlpatterns.append(path('', include('myapp.urls')))

此文件将在Django的URL中添加一个"/prometheus/metrics"端点,以导出指标(将myapp替换为您的项目名称)。

然后我们在设置中注入包装器

ROOT_URLCONF = "graphite.urls_prometheus_wrapper"

向中间件(请求/响应)指标添加自定义标签

您可以为django-prometheus中间件报告的指标添加特定于应用程序的标签。这涉及到扩展middleware.py中定义的类。

  • 扩展Metrics类并重写register_metric方法以添加特定于应用程序的标签。
  • 扩展中间件类,将metrics_cls类属性设置为扩展的指标类,并重写label_metric方法以附加自定义指标。

请参阅测试应用程序中的实现示例

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

django-prometheus-2.3.1.tar.gz (24.7 kB 查看哈希值)

上传时间

构建分发

django_prometheus-2.3.1-py2.py3-none-any.whl (29.1 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面