文档章节

whisper数据库

摩云菜
 摩云菜
发布于 2016/06/30 11:29
字数 1838
阅读 213
收藏 0
点赞 1
评论 0

简介

Whisper是一个固定大小的数据库,在设计上类似于RRD(round-robin-database)。它可以为随时间不断变化的数值型数据提供快速,可靠的存储。Whisper还可以把高精度的指标数据转换成低精度的指标数据以满足存储长期的历史数据的需求。比如说把按秒采集的指标转换成按分钟采集的指标,以减少数据量,进行长期存储。

数据点

Whisper使用大端双精度浮点类型来存储数据。每个数据点包含一个时间戳和一个值。

采集和存储策略

每个whisper数据库可以包含一个或者多个针对不同数据的采集和存储策略的定义。这些定义保存在graphite安装路径下的conf/ storage-schemas.conf配置文件里面,如下图所示:

上图就定义了四个数据采集和存储的策略,策略的定义语法如下:

[name]

pattern = regex

retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...

name策略名称,可随意指定

pattern用来匹配具体指标名的正则表达式。如果配置文件里面定义了多个策略,那么收到一个指标数据的时候,会从上到下使用每个策略里面的pattern对指标名称进行正则表达式匹配,最先匹配到的策略将会被使用。

retentions定义了数据采集精度和存储时长。timePerPoint就是多长时间采集一个数据点,timeToStore就是采集的数据最长存储多长时间。每个retentions后面可以定义多个timePerPoint:timeToStore对。每个timePerPoint:timeToStore对按高精度短时长到低精度长时长进行排序。比如:

retentions = 15s:7d,1m:21d,15m:5y

上面的retentions包含了三个timePerPoint:timeToStore对,分别是15秒采集一个数据点,保存7天的数据,1分钟采集一个数据点,保存21天的数据和15分钟采集一个数据点,保存5年的数据。

为了能准确地从高精度数据转换到低精度数据,两个相邻的timePerPoint:timeToStore对定义必须满足低精度定义能被高精度定义整除这个条件。比如上面的1m:21d就能被15s:7d整除,因为1分钟能被15秒整除,而21天可以被7天整除。相反,每180秒采集一次数据的定义就不能被每300秒采集一次数据的定义整除,因为300不能被180整除。

Whisper数据库的最长存储时间由最长的时长定义来决定。比如上面的例子,数据库的最长存储时长就是5年。

数据聚合

当retentions里面包含多个timePerPoint:timeToStore对的时候,那么whisper必须使用一个策略来进行高精度数据到低精度数据的聚合操作。默认的策略是取平均值。可以使用的策略有一下几种:

1:average 取平均值

2:sum    求和

3:last     取最后一个值

4:max    取最大值

5:min     取最小值

数据聚合的规则定义在graphite的安装目录下的conf/ storage-aggregation.conf配置文件里面,如下图所示:

上图就定义了四个数据聚合规则,聚合规则定义的语法如下:

[name]

pattern = <regex>

xFilesFactor = <float between 0 and 1>

aggregationMethod = <average|sum|last|max|min>

name规则的名称,可随意指定,但在这个配置文件里面必须唯一

pattern用来匹配具体指标名的正则表达式。如果配置文件里面定义了多个聚合规则,那么收到一个指标数据的时候,会从上到下使用每个规则里面的pattern对指标名称进行正则表达式匹配,最先匹配到的规则将会被使用。

aggregationMethod数据聚合策略(方法)

xFilesFactor必须是一个0到1之间的浮点型数值。这个值规定了要把高精度的数据转换成一个低精度的数据,高精度的数据必须有几个。

以15s:7d,1m:21d这个定义为例子,高精度的定义是15秒采集一个数据,而低精度的定义是1分钟采集一个数据。那么在高低精度数据转换的时候,正常情况下就是把4个数据点转换成一个数据点。

但是实际可能存在这样的情况,就是1分钟内的数据点没有4个,只有一个,两个,或者三个,就是有的时间点他没有采集到数据。那么xFilesFactor的意思就是在这种数据缺少的情况下,数据点数必须满足多少百分比,才能做数据聚合操作。如果定义成0.5,那么就是说,至少要有2个点才能做数据聚合操作,如果定义成0.1,那就是说只要有1个点就可以做数据聚合操作。

这个值定义成多少,还跟具体的数据聚合策略有关系。如果数据聚合策略是sum(求和),这种策略下就算没有数据点,也是可以做求和操作的,那么xFilesFactor就可以定义成0。如果数据聚合策略是min(求最小值),这种策略下,没有数据点肯定就没法取最小值,那么xFilesFactor就可以定义成0.1,就是说至少要有一个数据点,才能做聚合操作,等等。

存储和检索行为

   以retentions = 15s:7d,1m:21d,15m:5y这个多精度定义为例子,当数据写入这个数据库时,数据会被同时写多份。数据会首先被写入到最高精度的数据点中,然后当满足数据聚合条件后,再把多个高精度的数据聚合,写到低精度的数据点中。

   获取数据的时候,会使用最符合当前时间段的精度的数据。

硬盘空间效率

在磁盘使用率上,whiper可以说是低效率的。表现在以下几个方面:

1:每个数据点不仅存储了值,还存储了时间戳

2:数据库文件生成时,就把所有的数据点都创建出来了。比如说1m:1d这个定义,在收到第一个数据点的时候,这个数据库文件就被创建了,数据库文件里面总共1440个数据点。不管这些数据点有没有收集到值,数据点都会提前创建好,如果没有值,就是None。

但是这样的数据文件是很小的,比如1m:1d这个定义生成的数据文件大小,才17K,如下所示:

可以使用whisper-info.py +数据库文件名,查看这个文件的一些信息,如下所示:

还可以使用whisper-dump.py + 数据库文件名查看里面的数据点,如下所示:

表现

对于很多应用来说,whiper已经够快了。它比RRD慢的主要原因是whisper是用python写的,而RRD是用C写的。但随着对whisper的不断地优化,实际上他们两者之间的速度差别已经很小了。

-----------------------------------------------------

欢迎关注我的微信公众号 ^_^

© 著作权归作者所有

共有 人打赏支持
摩云菜
粉丝 27
博文 34
码字总数 42147
作品 0
闵行
高级程序员
使用graphite和grafana进行应用程序监控

graphite+grafana 介绍 grafana,按照官方的说法是 。grafana 负责数据的展示,可以配置各种不同的数据源,其中包括 graphite。 graphite 包含多个模块,这里我们使用的模块包括: Whisper:...

ChanningBJ ⋅ 2016/11/21 ⋅ 0

日志信息管理工具--Whisper

Whisper 是控制异常邮件变成垃圾邮件的一个工具。Whisper 作为一个过滤的 appender 来代替默认的 SMTP 邮件 appender。当消息的频率超过配置的阈值的时候,Whisper 就会开始压制。当启动压制...

叶秀兰 ⋅ 2014/10/10 ⋅ 0

json-whisper: 最简单的去中心的 json数据驱动的微博

https://gist.github.com/a-boy/6182058/raw/dccfdae600a9ac3a3f81a09ea2875bedbef2617e/a-boy.whisper.json {"JSON Whisper":"JSON Whisper is yet another twitter service driven by json......

a_boy ⋅ 2013/08/08 ⋅ 0

Twitter开放Android安全应用TextSecure源码

北京时间12月21日消息,据国外媒体报道, TextSecure是一个对文本短信进行加密的Android应用,在很多国家的活动家中十分盛行。Twitter现在开放了这个应用的源码。 Twitter上个月收购了TextS...

红薯 ⋅ 2011/12/21 ⋅ 0

#研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

监控、dashboard、PHP、graphite、statsd、whisper、carbon、grafana、influxdb、Python 本文档适用人员:研发和运维员工 提纲: 监控平台要做到什么程度?为什么要自己做? 几个通用技术问题...

郭恩洲_OSC博客 ⋅ 2015/02/26 ⋅ 0

#研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

郑昀 基于李丹和刘奎的文档 创建于2014/12/5 监控、dashboard、PHP、graphite、statsd、whisper、carbon、grafana、influxdb、Python 本文档适用人员:研发和运维员工 提纲: 监控平台要做到...

旁观者-郑昀 ⋅ 2015/01/27 ⋅ 0

Graphite 简介

一、 Graphite 项目简介 Graphite是一个企业级的监控工具,可以在廉价机硬件上运行。最初由Chris Davis在 Orbitz 工作时,作为一个辅助项目在2006年使用Python语言编写,最终成一个基本的监控...

龙鸟 ⋅ 2012/10/25 ⋅ 0

Twitter 开源 TextSecure 增强手机通讯安全

刚刚被Twitter收购的Whisper Systems宣布在GPLv3许可证下开源TextSecure,源代码公布在Github上。 TextSecure是Android下的加密信息客户端,旨在增强用户和企业通信的安全性。发布一年半以来...

红薯 ⋅ 2011/12/22 ⋅ 1

graphite-web只能展示最新6个小时的数据

业务需求描述:kafka的监控在grfana的展示 监控方案:kafkaoffsetmonitor + graphite + grafana kafka信息描述: kafka的0.9.x版本位移offset信息不在保存在zookeeper上面了,所有kafkaoffset...

liuhuang9496 ⋅ 2017/04/06 ⋅ 0

graphite 安装使用

简介: Graphite 是一款开源的监控绘图工具。 Graphite 可以实时收集、存储、显示时间序列类型的数据(time series data)。它主要有三个部分构成: carbon —— 基于 Twisted 的进程,用来接...

mickelfeng ⋅ 2012/11/30 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 6分钟前 ⋅ 0

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部