用于在ElasticSearch中存储时间序列度量的Django应用程序。
django-elasticsearch-metrics的Python项目详细描述
django elasticsearch指标
用于在Elasticsearch中存储时间序列度量的Django应用程序
先决条件
- Python 2.7或>;=3.6
- django 1.11或2.0
- 弹性搜索6
安装
pip install django-elasticsearch-metrics
快速启动
将"elasticseach_metrics"
添加到INSTALLED_APPS
。
INSTALLED_APPS+=["elasticsearch_metrics"]
定义ELASTICSEARCH_DSL
设置
ELASTICSEARCH_DSL={"default":{"hosts":"localhost:9200"}}
此设置传递给^{
在您的一个应用程序中,在metrics.py
中定义一个新的度量。
Metric
是^{
# myapp/metrics.pyfromelasticsearch_metricsimportmetricsclassPageView(metrics.Metric):user_id=metrics.Integer(index=True,doc_values=True)
使用sync_metrics
管理命令确保index template
因为你的度量是在elasticsearch中创建的。
# This will create an index template called myapp_pageview
python manage.py sync_metrics
现在添加一些数据:
frommyapp.metricsimportPageViewuser=User.objects.latest()# By default we create an index for each day.# Therefore, this will persist the document# to an index called, e.g. "myapp_pageview_2020.02.04"PageView.record(user_id=user.id)
出去找找!
# perform a search across all page viewsPageView.search()
每月或每年指数
默认情况下,为保存度量值的每一天创建索引。
您可以更改此项以创建每月或每年的索引,方法是更改
ELASTICSEARCH_METRICS_DATE_FORMAT
设置。
# settings.py# Monthly:ELASTICSEARCH_METRICS_DATE_FORMAT="%Y.%m"# Yearly:ELASTICSEARCH_METRICS_DATE_FORMAT="%Y"
索引设置
可以通过设置来配置索引模板设置
Metric.Index.settings
。
classPageView(metrics.Metric):user_id=metrics.Integer()classIndex:settings={"number_of_shards":2,"refresh_interval":"5s"}
索引模板
每个Metric
都有自己的index template。
索引模板名称和glob模式是从app标签计算出来的
包含应用程序和类的名称例如,aPageView
在myapp/metrics.py
中定义的类将具有具有
命名为myapp_pageview
,模板全局模式为myapp_pageview_*
。
如果在应用程序外部声明Metric
,则需要设置
app_label
。
classPageView(metrics.Metric):classMeta:app_label="myapp"
或者,可以显式设置template_name
和/或template
。
classPageView(metrics.Metric):user_id=metrics.Integer()classMeta:template_name="myapp_pviews"template="myapp_pviews_*"
抽象度量
fromelasticsearch_metricsimportmetricsclassMyBaseMetric(metrics.Metric):user_id=metrics.Integer()classMeta:abstract=TrueclassPageView(MyBaseMetric):classMeta:app_label="myapp"
可选的工厂集成
importfactoryfromelasticsearch_metrics.factoryimportMetricFactoryfrom..myapp.metricsimportMyMetricclassMyMetricFactory(MetricFactory):my_int=factory.Faker("pyint")classMeta:model=MyMetricdeftest_something():metric=MyMetricFactory()# index metric in ESassertisinstance(metric.my_int,int)
配置
ELASTICSEARCH_DSL
:必需。连接设置传递到 ^{} 。ELASTICSEARCH_METRICS_DATE_FORMAT
:创建时使用的日期格式 索引。默认值:%Y.%m.%d
(ElasticSearch使用的相同日期格式 date math)
管理命令
sync_metrics
:确保已为创建了索引模板 你的标准。show_metrics
:pretty打印所有注册度量的列表。check_metrics
:检查索引模板是否同步出口 如果任何指标不同步,则返回错误代码。
信号
信号位于elasticsearch_metrics.signals
模块中。
pre_index_template_create(Metric, index_template, using)
:在生成新索引之前发送 模板进入ElasticSearch。post_index_template_create(Metric, index_template, using)
:在创建新索引后发送 模板进入ElasticSearch。pre_save(Metric, instance, using, index)
:在 Metric的save()
方法post_save(Metric, instance, using, index)
:在 metric的save()
方法。
注意事项
_source
在度量索引上默认禁用,以便保存 磁盘空间对于大多数度量用例,用户不需要检索源 json文档。一定要明白 这个:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#_disabling_source。 要启用_source
,可以在class Meta
中重写它。
classMyMetric(metrics.Metric):classMeta:source=metrics.MetaField(enabled=True)
资源
- Elasticsearch as a Time Series Data Store
- Pythonic Analytics with Elasticsearch
- In Search of Agile Time Series Database
许可证
麻省理工学院许可。