本文共 15889 字,大约阅读时间需要 52 分钟。
库蒂尼奥
是一个开放源代码创建于2014年,当时OpenStack寻求不依赖于专门数据库(例如Hadoop,Cassandra等)的高度可扩展,容错时间序列数据库。
,但后来移出了该项目,因为它是与平台无关的。 即便如此,Gnocchi仍被该云平台用作主要的时间序列后端。 例如, 利用Gnocchi的大可扩展性和高可用性属性来确保其遥测始终保持快速。Gnocchi解决的问题是时间序列数据和资源的大规模存储和索引。 现代云平台不仅庞大,而且还是动态的,并且可能是多租户。 面no将所有这些考虑在内。
Gnocchi采用独特的时间序列存储方法:与其存储原始数据点,不如存储原始数据点,然后在存储它们之前对其进行汇总。 此内置功能与大多数其他时间序列数据库不同,后者通常支持此机制作为选项并在查询时计算聚合(平均值,最小值等)。
由于Gnocchi会在摄取时计算所有聚合,因此取回数据的速度非常快,因为它只需要读回预先计算的结果即可。
可以使用存档策略在每个度量标准上配置这些数据点的聚合方式。 存档策略定义要计算的聚合以及保留多少聚合。 尼奥基支持大量的聚合方法,例如最小,最大,平均值,第N个百分位数,标准差等。这些聚合是在一段时间(称为粒度)中计算的,并在定义的时间范围内保留。 聚合以压缩格式存储,以确保数据点占用的空间尽可能少。
例如,假设您定义了一个存档策略,以五分钟的间隔将一个时间序列的平均值,最小值和最大值保持30天。 在这种情况下,Gnocchi将计算五分钟范围内值的平均值,最小值和最大值,最多可保留8,640点(您可以在30天内拥有的五分钟聚合数)。
在安装Gnocchi之前,您需要确定要使用的措施并汇总存储驱动程序。 Gnocchi可以利用高度可扩展的存储系统,例如Ceph,OpenStack Swift,Redis甚至Amazon S3。 如果这些选项都不可用,那么您仍然可以使用标准文件系统。
您还需要一个数据库来索引Gnocchi将要处理的资源和指标— PostgreSQL和MySQL均受支持。
介绍了如何设置Gnocchi并编写其配置文件。 写入此配置文件后, gnocchi-upgrade程序将设置存储引擎和数据库索引,以便可以使用它们。
Gnocchi由两个中央服务组成:一个HTTP服务器(提供REST API)和一个度量处理守护程序。 前者称为gnocchi-api ; 后者称为gnocchi-metricd 。 您需要同时运行这两项服务才能使用Gnocchi。 客户端将使用REST API查询Gnocchi并将数据写入其中。 度量服务将提取API接收的度量,计算聚合并将其存储在长期聚合存储中。
这些服务都是无状态的,因此可以水平扩展。 与许多时间序列数据库相反,您可以使用Gnocchi运行的度量标准守护程序或API终结点的数量没有限制。 如果您的负载开始增加,则只需要生成更多守护程序即可处理新请求的流程。 如果要处理高可用性方案,也是如此:只需在独立服务器上启动更多的Gnocchi守护程序即可。
部署完Gnocchi之后,您可以使用pip(Python软件包安装程序)安装Gnocchi客户端命令行工具。 只需键入pip install gnocchiclient即可 。 它将请求发送到HTTP REST API并格式化并打印回答复。
为了组织度量标准,Gnocchi提供了资源的概念。 资源可以附加任何数量的指标:
$ gnocchi resource create server42 +-----------------------+--------------------------------------+ | Field | Value | +-----------------------+--------------------------------------+ | created_by_project_id | | | created_by_user_id | admin | | creator | admin | | ended_at | None | | id | 43164383 -6dc3- 5034 -a675-9a39493ca7df | | metrics | | | original_resource_id | server42 | | project_id | None | | revision_end | None | | revision_start | 2017 - 10 -20T13: 19 : 46.902754 +00:00 | | started_at | 2017 - 10 -20T13: 19 : 46.902642 +00:00 | | type | generic | | user_id | None | +-----------------------+--------------------------------------+
汤团对资源进行修改; 如果更改了任何属性,则Gnocchi将记录该更改并在资源的历史记录中创建一个新条目。
创建此资源后,我们可以为此资源创建一个新的指标:
$ gnocchi metric create -r server42 cpu +------------------------------------+------------------------------------------------------------------+ | Field | Value | +------------------------------------+------------------------------------------------------------------+ | archive_policy / aggregation_methods | std, count, min, max, sum , mean | | archive_policy / back_window | 0 | | archive_policy / definition | - points: 8640 , granularity: 0 :05:00, timespan: 30 days, 0 :00:00 | | archive_policy / name | low | | created_by_project_id | | | created_by_user_id | admin | | creator | admin | | id | ab0b5dab-31e9- 4760 -a58f-0dc324047f9f | | name | cpu | | resource / created_by_project_id | | | resource / created_by_user_id | admin | | resource / creator | admin | | resource / ended_at | None | | resource / id | 43164383 -6dc3- 5034 -a675-9a39493ca7df | | resource / original_resource_id | server42 | | resource / project_id | None | | resource / revision_end | None | | resource / revision_start | 2017 - 10 -20T13: 19 : 46.902754 +00:00 | | resource / started_at | 2017 - 10 -20T13: 19 : 46.902642 +00:00 | | resource / type | generic | | resource / user_id | None | | unit | None | +------------------------------------+------------------------------------------------------------------+
这将创建一个名为cpu的度量,并将其附加到资源服务器42 。 默认情况下,用于新指标的存档策略很低,这是安装Gnocchi时默认提供的。 低归档策略以五分钟的粒度存储30天的各种聚合方法。
此新指标没有度量标准,因此现在该发送一些:
$ gnocchi measures add -m "2017-10-20 12:00@42" -m "2017-10-20 12:03@18" -m "2017-10-20 12:06@56" -r server42 cpu $ gnocchi measures show -r server42 cpu +---------------------------+-------------+-------+ | timestamp | granularity | value | +---------------------------+-------------+-------+ | 2017 - 10 -20T12:00:00+02:00 | 300.0 | 30.0 | | 2017 - 10 -20T12:05:00+02:00 | 300.0 | 56.0 | +---------------------------+-------------+-------+
发送的三个度量汇总为12:00和12:05的两个数据点。 默认情况下,显示的聚合方法是mean ,但是您可以请求其他任何聚合方法:
$ gnocchi measures show --aggregation count -r server42 cpu +---------------------------+-------------+-------+ | timestamp | granularity | value | +---------------------------+-------------+-------+ | 2017 - 10 -20T12:00:00+02:00 | 300.0 | 2.0 | | 2017 - 10 -20T12:05:00+02:00 | 300.0 | 1.0 | +---------------------------+-------------+-------+
计数聚合方法计算在每个时间间隔内接收到的数据点数。
默认资源类型是通用资源,但是您可以创建具有任何数量额外属性的自己的资源类型。 这些属性可以是可选的,并且可以具有特定的类型,以确保您的数据结构正确且易于使用:
$ gnocchi resource-type create -a ipaddress:string:true network-switch +----------------------+----------------------------------------------------------+ | Field | Value | +----------------------+----------------------------------------------------------+ | attributes / ipaddress | max_length = 255 , min_length = 0 , required =True, type =string | | name | network-switch | | state | active | +----------------------+----------------------------------------------------------+ $ gnocchi resource create --type network-switch --attribute ipaddress:192.168.2.3 sw18-prs.example.com +-----------------------+--------------------------------------+ | Field | Value | +-----------------------+--------------------------------------+ | created_by_project_id | | | created_by_user_id | admin | | creator | admin | | ended_at | None | | id | 4fbdf14d- 5650 -58f5-b232-dc3cf91c28d0 | | ipaddress | 192.168.2.3 | | metrics | | | original_resource_id | sw18-prs.example.com | | project_id | None | | revision_end | None | | revision_start | 2017 - 10 -20T15:08: 30.935529 +00:00 | | started_at | 2017 - 10 -20T15:08: 30.935513 +00:00 | | type | network-switch | | user_id | None | +-----------------------+--------------------------------------+
如果属性值发生更改,则可以检索其历史记录:
$ gnocchi resource update --type network-switch --attribute ipaddress:192.168.2.48 sw18-prs.example.com +-----------------------+--------------------------------------+ | Field | Value | +-----------------------+--------------------------------------+ | created_by_project_id | | | created_by_user_id | admin | | creator | admin | | ended_at | None | | id | 4fbdf14d- 5650 -58f5-b232-dc3cf91c28d0 | | ipaddress | 192.168.2.48 | | metrics | | | original_resource_id | sw18-prs.example.com | | project_id | None | | revision_end | None | | revision_start | 2017 - 10 -20T15: 10 : 11.903018 +00:00 | | started_at | 2017 - 10 -20T15:08: 30.935513 +00:00 | | type | network-switch | | user_id | None | +-----------------------+--------------------------------------+ $ gnocchi resource history --format yaml --type network-switch sw18-prs.example.com - creator: admin ended_at: null id: 4fbdf14d- 5650 -58f5-b232-dc3cf91c28d0 ipaddress: 192.168.2.3 metrics: { } original_resource_id: sw18-prs.example.com project_id: null revision_end: '2017-10-20T15:10:11.903018+00:00' revision_start: '2017-10-20T15:08:30.935529+00:00' started_at: '2017-10-20T15:08:30.935513+00:00' type: network-switch user_id: null - creator: admin ended_at: null id: 4fbdf14d- 5650 -58f5-b232-dc3cf91c28d0 ipaddress: 192.168.2.48 metrics: { } original_resource_id: sw18-prs.example.com project_id: null revision_end: null revision_start: '2017-10-20T15:10:11.903018+00:00' started_at: '2017-10-20T15:08:30.935513+00:00' type: network-switch user_id: null
修订字段指示什么时候进行更改。 ipaddress的旧属性值和新属性值都可以访问,从而可以轻松跟踪资源的修改方式。
Gnocchi还提供其他功能,例如搜索资源和度量,度量的高级交叉聚合,访问控制列表(ACL)管理等。
Gnocchi可以与许多其他工具集成。 例如,可以使用其收集指标与collectd并将它们发送到面疙瘩。
还支持 ,这是用于通过显示时间序列数据库中图表的标准工具。
尼奥基(Gnocchi)是 ,并且新功能不断到来。 下一版本(4.1)应该为跨度量聚合提供更多的计算可能性。 另外,正在构建的摄取点,因此Gnocchi可用作Prometheus时间序列警报和监视系统的长期且可扩展的存储选项。
翻译自:
库蒂尼奥
转载地址:http://vrbzd.baihongyu.com/