OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念
先看下 http://www.cnblogs.com/bonelee/p/6236962.html 这里对于环形数据库的介绍,便于理解归档这个操作!
转自:http://blog.sina.com.cn/s/blog_6de3aa8a0102wk0y.html
早期的OpenStack监控(遥测)项目ceilometer被一分为四(Ceilometer、Gnocchi、Aodh、Panko),各司其职!其中Ceilometer负责采集计量数据并加工预处理;Gnocchi主要用来提供资源索引和存储时序计量数据;Aodh主要提供预警和计量通知服务;Panko主要提供事件存储服务。促成Ceilometer分裂的主要原因是:早期各类资源的计量数据(即是时间序列数据)(measurement,核心字段是<</span>时间,值>)存储在SQL数据库中的sample表中;随着云环境中需要被监控的资源增多和时间的推移,计量数据的增长变得难以预测;计量数据的使用方面,查询操作首先要从巨大的sample单表中过滤所需条目,然后还会涉及到相关的聚合计算;可想而知,由此带来的性能开销绝对是无法忍受的,并且随着时间的推移这个瓶颈会愈加明显直至奔溃。要解决上述问题方法有很多,比如分表:每个监控指标(Metirc)一张表,那么一个资源可能会有多张表(比如一个instance至少会有cpu,cpu.util,memory,memory.usage,disk.* 等监控指标metrics);这似乎有点夸张,即使这样都可以接受的话,那么查询时对计量数据的聚合操作也还是个问题。
类似的思想,红帽的Julien Danjou(blog:https://julien.danjou.info/blog/)发起了Gnocchi项目来解决这类问题。其总体思路是:把各个计量指标Metric的计量数据measurement直接写入后端存储中;并在measurement写入之前根据预先设定的归档策略进行聚合操作;查询时直接读取对应的文件即可获得聚合后的监控信息点,显然时间复杂度变为O(1)了;并且提供资源索引,这样能更快的找到每个资源的基础信息metadata和其相关的metrics信息。
OpenStack/Gnocchi简介和架构[附文档翻译]
文档翻译(欢迎雅正):http://gnocchi.xyz
第一部分:Gnocchi简介 http://gnocchi.xyz/index.html
Gnocchi – Metric as a Service,Gnocchi计量作为一种服务
Gnocchi是一个多租户时间序列,计量和资源数据库。提供了HTTP REST接口来创建和操作数据。Gnocchi设计用于超大规模计量数据的存储,同时向操作者和用户提供对度量和资源信息的访问。
Gnocchi是OpenStack项目的一部分。因此它支持OpenStack,但也能完全独立的工作。
您可以在 http://gnocchi.xyz上阅读完整的在线文档。
Why Gnocchi?为什么使用Gnocchi?
Gnocchi已被创建满足在云计算环境中可用的时间序列数据库的需要:提供存储大量度量数据并且易于扩展的能力。
Gnocchi项目于2014年开始,作为OpenStack Ceilometer项目的分支,以解决Ceilometer在将标准数据库用作计量数据的存储后端时遇到的性能问题。更多信息,请参见Julien的博客Gnocchi。
Use cases,使用案例
Gnocchi旨在用于存储时间序列及其相关联的资源元数据。因此,它有用的例子如:
(1)计费系统的存储;(2)报警触发或监控系统;(3)数据的统计使用。
Key Features,关键特性
HTTP REST接口 水平可扩展性 度量聚合 测量批处理支持 存档策略 计量值搜索
结构化资源 资源历史 可查询资源索引器 多租户支持 Grafana支持 Statsd协议支持
第二部分:Gnocchi的架构 http://gnocchi.xyz/architecture.html
Project Architecture,项目架构
Gnocchi由几个服务组成:一个HTTP REST API(请参阅REST API Usage),可选的statsd兼容守护程序(请参阅Statsd守护程序使用)和异步处理守护程序。 通过HTTP REST API和statsd守护程序接收数据。异步处理守护程序(称为gnocchi-metricd)在后台对接收到的数据执行统计计算,度量标准清除等操作。
HTTP REST API和异步处理守护程序都是无状态的,并且是可扩展的。可以根据负载添加其它workers。
Back-ends,后端
Gnocchi使用了两个不同的后端存储数据:一个用于存储时间序列(存储驱动程序),另一个用于索引数据(索引驱动程序)。
存储器负责存储所创建的度量的计量值measurement。它接收时间戳和值,并根据定义的归档策略预先计算聚合。
索引器负责存储所有资源的索引,以及它们的类型和属性。Gnocchi不仅了解来自OpenStack项目的资源类型,也提供了一个通用类型,因此您可以创建基本资源并自己处理资源属性。 索引器还负责将资源与度量指标metric相关联。
How to choose back-ends,如何选择后端
Gnocchi目前提供了集中不同的存储引擎:File,Swift,S3,Ceph(首选)。
Storage的驱动程序基于一个名为Carbonara的中间库,由该中间库处理时间序列操作,因为这些存储技术本身都不能处理时间序列。
四个基于Carbonara的驱动程序运行良好,并且后端技术保证可扩展性。 Ceph和Swift本身就比文件驱动器更具可扩展性。
根据您的体系结构的大小,使用文件驱动程序并将数据存储在磁盘上可能就足够了。 如果需要使用文件驱动程序扩展服务器数量,则可以通过NFS在所有Gnocchi进程中导出和共享数据。在任何情况下,显然S3,Ceph和Swift驱动程序在很大程度上更具可伸缩性。Ceph还提供了更好的一致性,因此是推荐的驱动程序。
How to plan for Gnocchi’s storage,如何规划Gnocchi的存储
Gnocchi使用基于Carbonara库的自定义文件格式。在Gnocchi中,时间序列是点的集合,其中点是在时间序列的寿命中的给定测量或样本。使用各种技术压缩存储格式,因此可以基于其最坏情况情况使用以下公式来估计时间序列大小的计算: 点数×8字节=以字节为单位的大小
您要保留的点数通常由以下公式确定: 点数=时间跨度÷粒度
例如,如果您想保留一年的数据,一分钟的分辨率: 点数=(365天×24小时×60分钟)÷1分钟 = 525 600。然后:字节大小= 525 600字节×6 = 3 159 600字节= 3 085 KiB
这只是一个聚合时间序列。如果归档策略使用具有相同“一年,一分钟聚合”分辨率的6个默认聚合方法(mean,min,max,sum,std,count),则使用的空间将最多增加到6×4.1 MiB = 24.6 MiB。
How to set the archive policy and granularity,如何设置归档策略和计量粒度
在Gnocchi中,归档策略以点数表示。如果归档策略定义了10点的策略,粒度为1秒,则时间序列归档将保持长达10秒,每个代表1秒钟的聚合。这意味着时间序列将最多保留最近点和最旧点之间的10秒数据(有时多一点)。这并不意味着它将是10个连续的秒:如果数据被不规则地时间间隔送达,可能存在间隙。
相对于当前时间戳没有数据到期。此外,您不能删除旧的数据点(至少现在)。
因此,存档策略和粒度完全取决于您的用例。根据数据的使用情况,可以定义多个归档策略。典型的低粒度用例可能是:
3600点,粒度为1秒= 1小时
1440点,粒度为1分钟= 24小时
720点,粒度为1小时= 30天
365分,粒度为1天= 1年
这将表示每种聚集方法6125点×9 = 54 KiB。如果使用8标准聚合方法,您的指标将占用8×54 KiB = 432 KiB的磁盘空间。
Default archive policies,默认的归档策略
默认情况下,使用默认存档策略(在default_aggregation_methods中列出,即平均值,最小值,最大值,总和,标准值,计数)创建3个归档策略:
low(每个metric的最大估计大小:5 KiB)
5分钟粒度1小时;1小时粒度1天;1天粒度超过1个月
medium(每个metric的最大估计大小:139 KiB)
1分钟粒度1天;1小时粒度超过1周;1天的粒度超过1年
high(每个metric的最大估计大小:1 578 KiB)
1秒粒度;1分钟粒度1周;1小时粒度超过1年
OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念的更多相关文章
- sqler sql 转rest api 数据聚合操作
sqler 2.0 提供了一个新的指令aggregate,注意这个和sql 的聚合函数不是一个概念,这个只是为了 方便api数据的拼接 参考格式 databases { exec = &qu ...
- MongoDB中的聚合操作
根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.ma ...
- PIE SDK打开长时间序列数据
1. 功能简介 时间序列数据(time series data)是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于所描述现象随时间变化的情况.当前随着遥感卫星技术日新月异的发展,遥感卫星的 ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- 大数据项目2(Java8聚合操作)
前言:为很好的理解这些方法,你需要熟悉java8特性Lambda和方法引用的使用 一:简介 我们用集合的目的,往往不是简单的仅仅把数据保存哪里.而是要检索(遍历)或者去计算或统计....操作集合里面的 ...
- 使用 DML语句,对 “锦图网” 数据进行操作,聚合函数练习
查看本章节 查看作业目录 需求说明: 根据客户 ID 统计订单数.订单总金额.最高订单金额.最低订单金额和每份订单平均金额,并按订单总金额升序显示 根据客户统计订单总订购人次数> 5 的统计信息 ...
- 爬虫简介与excel表格操作
爬虫简介与excel表格操作 re模块简介 1.在python中使用正则表达式的话那么re模块就是选择之一 import re # 导入re模块 2.在re模块中使用findall找到所有我们给他的值 ...
- 数据聚合 & 分组:新一代系统监控的核心功能
遥想 2015 年 8 月 17 日,Cloud Insight 还在梳理功能原型,畅想 Cloud Insight 存在的意义:为什么阿里云用户需要使用 Cloud Insight 来加强管理. 而 ...
- pandas的聚合操作: groupyby与agg
pandas提供基于行和列的聚合操作,groupby可理解为是基于行的,agg则是基于列的 从实现上看,groupby返回的是一个DataFrameGroupBy结构,这个结构必须调用聚合函数(如su ...
随机推荐
- 4.mybatis属性和表的列名不相同时的处理方法
/** * 属性和表的列名不相同时的处理方法 * 1.sql中给列重新命名: * select tid id, tname name from teacher t where tid=#{id} * ...
- 问题处理:找不到Pch预编译文件?
提醒:Xcode6之后就不再自动创建Pch预编译文件 在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一 ...
- Python基础学习笔记(十二)文件I/O
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-files-io.html ▶ 键盘输入 注意raw_input函 ...
- jquery_dialog实现效果
jquery_dialog实现效果 jquery_dialog.js <!-- /******************************************************** ...
- caffe的data_reader.cpp分析一下干了点什么
首先说明:下面的内容不一定对 类body: 变量:LayerParameter param_ :它里面放的是:body传进来的layerparameter的参数: BlockingQueue<s ...
- 基础2 JVM
1. 内存模型以及分区,需要详细到每个区放什么. //运行时数据区域 方法区 Method Area 各个线程共享的内存区域 存储已被虚拟机加载的类信息 常量 静态变量 即时编译器编译后的代码 虚拟机 ...
- 三大平衡树(Treap + Splay + SBT)总结+模板[转]
Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...
- 如何在Mac OSX上安装xgboost
听说xgboost效果很不错,于是准备学习下,但是发现大多数资料都是在讲如何在windows或linux下安装xgboost,而且照着官方文档也没有正确的安装好多线程的xgboost.最后还是从the ...
- Android控件之MultiAutoCompleteTextView(自动匹配输入的内容)
一.功能 可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配,可用在发送短信,发邮件时选择联系人这种类型中 二.独特属性 android:comp ...
- HTML JSP Servlet 的 相对路径 绝对路径
HTML 相对路径 - 没有最前面的 /: 相对于当前文件,和OS一样 绝对路径 - 前面带 / : 相对于 http://<host>:port/ Servlet 相对路径 - 相对于 ...