OpenTSDB是基于HBase的开源监控系统,能够支持上万规模集群监控和上亿数据点採集。

当中TSDB代表Time Series Database,OpenTSDB在时间序列数据的存储和查询上都做了相当多的优化工作。

架构Overview

概念上OpenTSDB由三部分组成:tcollector数据採集、tsd数据服务和HBase数据存储。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaWRvbnR3YW50b2Jl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

数据採集流程

如上图。tcollector后台进程执行在每台被监控的server上,管理数据收集脚本,定期执行,失败时重新启动,确保全部的监控数据发送给OpenTSDB。Tcollector将数据写入到tsd,和HBase解耦保持client的轻量级。Tsd通过类似telnet的协议收集数据。所以少量的tsd实例可以支持大量的tcollector写入进程。

数据查询流程

图中tsd负责和HBase进行数据交互,给前端提供HTTP查询接口。全部的tsd进程都是无状态的。这样查询模块能做到负载均衡、线性可伸缩和高可用。

HBase Schema设计

OpenTSDB存储的是时间序列metrics,来自于不同的server。数据有不同的种类,每一个点都包括时间戳和測量值。

并且终于来讲,数据对用户可用,OpenTSDB还必须支持在线数据可视化。这些因素都影响着HBase Schema设计。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaWRvbnR3YW50b2Jl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

OpenTSDB包含两张表。tsdb表存储时间序列数据。tsdb-uid表存储ID相应关系。管理数据tags等。

Tsdb-uid表

Tsdb-uid包含id和name两个列族

前两行UID-to-name行的UID用于和tsdb表外键关联;后两行name-to-UID行用于支持tag名称的自己主动补齐(通过扫描rowkey高效实现)。

注意Column qualifier中的metrics代表数据种类,典型的值还包含tag name和tag value。

比方来自ubuntuserver的mysql.bytes_sent数据。当中mysql.bytes_sent为metrics,host为tag name,ubuntu为tag value。OpenTSDB通过metrics、tag name、tag value组合标记同一监控数据。

Tsdb表

Tsdb表的设计重点考虑支持日期范围查找、tag过滤。Tsdb表仅仅有t一个列族。

首先看rowkey设计:一開始是Metric UID。接着是四个字节的部分时间戳。仅仅到小时粒度,能保证同一指标依照时间顺序存储在一起,又能显著降低行数。

最后是全部的tag name和tag value UID,满足查询过滤需求。

接着看column qualifier:首先是时间戳剩余秒部分,后面通过四位掩码做一些额外标记。比方首位标记单元值是整数还是浮点数。

读书笔记-HBase in Action-第三部分应用-(1)OpenTSDB的更多相关文章

  1. HBase in Action前三章笔记

    近期接触HBase,看了HBase In Action的英文版.開始认为还行,做了些笔记.可是兴许看下去,越来越感觉到实战这本书比較偏使用上的细节,对于HBase的具体设计涉及得很少.把前三章的一些笔 ...

  2. 读书笔记-HBase in Action-第一部分 HBase fundamentals

    新项目准备上HBase.HBase眼下由组里某牛负责.本着学会使用HBase的目标,先阅读下HBase in Action,一共十章组织成三部分,须要学习的内容包含HBase基本实现原理,用法,Sch ...

  3. 读书笔记-HBase in Action-第三部分应用-(2)GIS系统

    本章介绍用HBase存储.高效查询地理位置信息. Geohash空间索引 考虑LBS应用中常见的两个问题:1)查找离某地近期的k个地点.2)查找某区域内地点. 假设要用HBase实现高效查找,首先要考 ...

  4. 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor

    Coprocessor是HBase 0.92.0引入的特性.使用Coprocessor.能够将一些计算逻辑下推到HBase节点,HBase由一个单纯的存储系统升级为分布式数据处理平台. Coproce ...

  5. Getting Started With Hazelcast 读书笔记(第二章、第三章)

    第二章 起步 本章就相当简单粗暴了,用一个个例子说明hazelcast怎么用. 1.map,set,list这些集合类都是开箱即用的,只要从Hazelcast的实例中获取一份就行. 2.增加了Mult ...

  6. 【读书笔记】.Net并行编程(三)---并行集合

    为了让共享的数组,集合能够被多线程更新,我们现在(.net4.0之后)可以使用并发集合来实现这个功能.而System.Collections和System.Collections.Generic命名空 ...

  7. 【读书笔记】iOS-开发技巧-三种收起键盘的方法

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  8. 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design

    本章以山寨版Twitter为例介绍HBase Schema设计模式.广义的HBase Schema设计不仅仅包含创建表时指定项,还应该综合考虑Column families/Column qualif ...

  9. unix-环境高级编程-读书笔记与习题解答-第三篇

    第一章 第五节 进程与控制 该小节比较粗略的阐述了unix操作系统中用于进程控制的三个函数,分别为 : fork , exec, waitpid, 其中 exec 有五种变体, 这些变体实现的功能全部 ...

随机推荐

  1. Linux下安装Eclipse的PHP插件(PHPEclipse)

    下载: Eclipse: http://www.eclipse.org/downloads/       (本人用的Ubuntu,直接在SoftWare Center中下载的) (选择适合你系统的相应 ...

  2. 矩阵压缩写法 scipy spark.ml.linalg里都有,CRS,CCS

    CRS 表示:Compressed Row Storage CCS 表示:Compressed Column Storage CRS的表示参考: https://blog.csdn.net/buptf ...

  3. My97DatePicker控件显示时分秒

    方式一: if (!WebCalendar.timeShow) WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/; else ...

  4. 获取本机IP,用户代理

    1.获取本机IP:http://httpbin.org/ip 2.获取用户代理 https://httpbin.org/user-agent https://httpbin.org/ httpbin( ...

  5. netty handle处理流程

    server handlerAdded server channelRegistered server channelActive server read server channelInactive ...

  6. Linux Barrier I/O 实现分析与barrier内存屏蔽 总结

    一直以来.I/O顺序问题一直困扰着我.事实上这个问题是一个比較综合的问题,它涉及的层次比較多,从VFS page cache到I/O调度算法,从i/o子系统到存储外设.而Linux I/O barri ...

  7. 质量平台建设之Mock平台

    转载:http://blog.csdn.net/spark2008/article/details/51372913 基于目前系统越来越多,在项目开发过程中,减少各模块之间的开发依赖,另保证各个系统模 ...

  8. JAVA Eclipse如何重命名包

    选中某个包之后按F2即可   注意,重命名包不能有大写,而且必须有至少两级(xxx.xxx就是两级)   重命名包之后,你要修改manifest.xml文件  

  9. [脚本编程] 过云盾、D盾各种盾shell

    作者: dean <?php //过云盾.D盾各种盾shell $id = $_GET['id']; //debug echo $catid = isset($_GET['catid'])?ba ...

  10. 网络编程readn、writen和readline函数的编写

    readn   在Linux中,read的声明为: ssize_t read(int fd, void *buf, size_t count); 它的返回值有以下情形: 1.大于0,代表成功读取的字节 ...