Django中间件,用于使用Prometheus.io监控您的应用程序。
项目描述
django-prometheus
导出Django监控指标以供Prometheus.io使用
特性
此库为Django相关操作提供Prometheus指标
- 请求与响应
- 通过Django ORM执行数据库访问
- 通过Django缓存框架执行缓存访问
用法
需求
- 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_connection
和django_migrations_unapplied_by_connection
。您可能希望对未应用的迁移发出警报。
如果您想禁用Django迁移指标,请将PROMETHEUS_EXPORT_MIGRATIONS
设置设置为False。
监控和汇总指标
Prometheus设置起来相当简单。在examples/prometheus
中可以找到抓取127.0.0.1:8001
的示例prometheus.conf。
这是一个显示django-prometheus收集的一些指标的PromDash示例
添加您自己的指标
您可以通过直接使用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方法以附加自定义指标。
请参阅测试应用程序中的实现示例
项目详情
django-prometheus-2.3.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f9c8b6c780c9419ea01043c63a437d79db2c33353451347894408184ad9c3e1e |
|
MD5 | c27fb578a8d1092a1b47018dad12243b |
|
BLAKE2b-256 | e151485b4122e00f2b8efec8a6d718ef4ce6b150231e49398e554ce1151f65c3 |
django-prometheus-2.3.1-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf9b26f7ba2e4568f08f8f91480a2882023f5908579681bcf06a4d2465f12168 |
|
MD5 | f8c69c768afbf587fc75c20cbbf98c0f |
|
BLAKE2b-256 | 3a75fb3d4f056f9ed4f8848817d5afd7a1d949632ab117452ccd179e3839cfc4 |