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 ...
随机推荐
- VS2008中开发智能设备程序的一些总结
原文链接:http://blog.csdn.net/citybug_nj/article/details/2598705 程序中包括四个部分: 系统配置 这个部分用来配置系统中的相关参数,参数包括数据 ...
- C语言程序设计现代方法_数组(第八章)
C语言不要求检查下标的范围.当下标超出范围时,程序可能会执行不可预知的行为. 看下这个程序: #include <stdio.h> #define N 10 // int main() { ...
- More Effective C++ (2)
接下来的是more effective c++ 11至20条款: 11.禁止异常信息(exceptions)传递到析构函数外.析构函数的调用情况可能有两种:(1)对象正常销毁 (2)异常传播过程中的栈 ...
- 原生js如何获取当前所加载网页的文件路径和名称
结合使用string对象中的substr()和lastIndexOf()方法. 当前页面路径:file:///C:/Users/Administrator/Desktop/test.html < ...
- mysql概要(十)触发器
1触发器可监视增删改,并触发增删改操作. 针对一些逻辑关联密切的操作,而不必手动多次操作. 2.要素: 3.语法: 补充:mysql可以设置结束符,不必是“:”来结束标志,可使用 3.1简单的例子: ...
- web设计经验<五>国外设计师总结的7个找灵感实用方法
每个设计师不时会有创意灵感缺失.大脑一片空白的状态.盯着一个空白的屏幕,发愁着“好吧,我现在该做什么呢?该怎么做呢?”有些人喜欢静待,但这不是唯一的一个方法.焦虑的客户或者是你自己的不耐烦,都会让你无 ...
- Python学习(18)面向对象
目录 Python 面向对象 创建实例对象 Python内置类属性 Pyyhon对象销毁(垃圾回收) 类属性与方法 Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此 ...
- linux 命令 第一波
man 命令名字 查看命令详细解释 q退出cd 切换目录cd .. 回到上级目录su 切换用户pwd 当前目录mkdir cmy 创建cmy文件夹[目录]rm cmy 删除cmy文件夹[如果cmy里面 ...
- 转:一个Sqrt函数引发的血案
转自:http://www.cnblogs.com/pkuoliver/archive/2010/10/06/1844725.html 源码下载地址:http://diducoder.com/sotr ...
- [借鉴] Android简便通用的SimpleBaseAdapter
public abstract class SimpleBaseAdapter<T> extends BaseAdapter { protected Context context; pr ...