【OpenTSDB介绍】

OpenTSDB ,可以认为是一个时系列数据(库),它基于HBase存储数据,充分发挥了HBase的分布式列存储特性,支持数百万每秒的读写。

开源监控系统OpenTSDB,用hbase存储所有的时序(无须 采样)来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集所有metrics,支持永久存储,可以做容量规划,并很容易的接入到现有的报警系 统里。OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的metrics并进行存储、索引以及服务,从而使得 这些数据更容易让人理解,如web化,图形化等。

How does OpenTSDB work?

OpenTSDB consists of a Time Series Daemon (TSD) as well as set of command line utilities. Interaction with OpenTSDB is primarily achieved by running one or more of the TSDs. Each TSD is independent. There is no master, no shared state so you can run as many TSDs as required to handle any load you throw at it. Each TSD uses the open source database HBase to store and retrieve time-series data. The HBase schema is highly optimized for fast aggregations of similar time series to minimize storage space. Users of the TSD never need to access HBase directly. You can communicate with the TSD via a simple telnet-style protocol, an HTTP API or a simple built-in GUI. All communications happen on the same port (the TSD figures out the protocol of the client by looking at the first few bytes it receives).



 In OpenTSDB, a time series data point consists of:

A metric name.

A UNIX timestamp (seconds or millisecinds since Epoch).

A value (64 bit integer or single-precision floating point value).

A set of tags (key-value pairs) that describe the time series the point belongs to.

扫描二维码关注公众号,回复: 275614 查看本文章

opentsdb支持几种写入方式,telnet,http,或者tcollector(采集器),各有特点,Telnet更适合测试用,tcollector是拉的模型,http的接口可能更通用一些,在写数据之前,我们要好好想想,我们要存的数据的特点。

通常,我们设计一个系统的时候,都要设计一个metrics系统,给metrics命名的时候,我们总是系统起一个见名知义的很长的名字,然后就是value。比如webserver01.sys.cpu.0.user么代表的是webserver01这台服务器的0号cpu用户态的cpu使用率,但是我们直接把这个metric作为key存储的话,后面查询方便吗?

实际上任务存储,都是为了有一天要取出来,或者根据一定条件取出来,你只存储而不取出,那叫删除!因此,opentsdb也是如此,我们要考虑存储后查询是否方便。

还是前面的例子,如果我们把webserver01.sys.cpu.0.user作为key,那么可能要存储很多这样的key,比如机器有64核,你要存64条记录,我现在要算机器cpu avg,那么你要扫描全部的记录,然后聚合求均值,试想,如果你有很多机房,很多机器呢?当你的统计需求涉及大量的记录的时候,这些记录在底层存储的时候特别分散,那么无疑,你聚合的性能会很差,时序数据的metrics 之所以要搞成metrics加tag的方式,实际上跟hbase表的设计有关,rowkey开始的字段是metrics然后加时间戳加tag

kv,如果不这么设计,你聚合查询涉及的记录可能并不紧凑,或者跨多个region,想一下,性能能快吗?

opentsdb使用标签tag辅助涉及,即你存储的时候,key还是有的,但是要尽量精简,你需要多维度描述这个metric的时候,其余维度我都通过打标签的形式给你记录下来。这有什么区别,或者说有什么好处,为什么这么设计?

opentsdb要求你必须至少有一个tag,可以有多个,数量不限,同时使用一个精简的metric作为key,这个metric其实是可以共用的。还是举前面那个例子,webserver01.sys.cpu.0.user被改造成sys.cpu.user{host=webserver01,cpu=42}即带2个tag kv对,metric变成sys.cpu.user

这样不管你什么机房,什么机器,凡是cpu使用率的数据都紧凑地存储在一起,相应查询聚合性能会好一些。

猜你喜欢

转载自gaojingsong.iteye.com/blog/2363932