OpenTSDB是一个基于HBase上的实时监控信息收集和展示平台。它支持秒级数据采集metrics,使用HBase进行永久存储,可以做容量规划,并很容易的接入到现有的监控系统里。OpenTSDB可以从大规模的设备中获取相应的metrics并进行存储、索引以及服务,从而使得这些数据更容易让人理解,如web化,图形化等。
1. 安装
Opentsdb依赖Gnuplot,它 是一个命令行的交互式绘图工具。用户通过输入命令,可以逐步设置或修改绘图环境,并以图形描述数据或函数,使我们可以借由图形做更进一步的分析。
1 |
yum install -y gnuplot |
Opentsdb目前有现成的rpm、deb打包,非常方便。下载链接:https://github.com/OpenTSDB/opentsdb/releases .下面我们安装rpm。
1 |
yum localinstall opentsdb-2.0.1.noarch.rpm |
配置
1 2 3 4 5 6 7 |
vim /etc/opentsdb/opentsdb.conf #TSDB通讯的端口 tsd.network.port = 4242 #数据保存到保存到HBase表下 tsd.storage.hbase.data_table = tsdb #ZooKeeper Quorum tsd.storage.hbase.zk_quorum = hadoop01:2181,hadoop02:2181,hadoop03:2181 |
配置完成后,我们通过下面命令在HBase中建立opentsdb所需的表。默认情况下opentsdb建立的HBase表启用了lzo压缩。需要开启Hadoop中的lzo压缩支持, 这里我们直接在下面脚本中把COMPRESSION的支持关闭:
1 2 |
vim /usr/share/opentsdb/tools/create_table.sh COMPRESSION=NONE |
然后在HBase用户下执行下面脚本,在HBase中create所需的几张表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/usr/share/opentsdb/tools/create_table.sh Hbase::Table - tsdb-uid create 'tsdb', {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'} 0 row(s) in 0.4220 seconds Hbase::Table - tsdb create 'tsdb-tree', {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'} 0 row(s) in 0.4140 seconds Hbase::Table - tsdb-tree create 'tsdb-meta', {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'} 0 row(s) in 0.4200 seconds Hbase::Table - tsdb-meta |
启动tsd(Time Series Daemon)服务,该命令有一些常用参数,会覆盖/etc/opentsdb/opentsdb.conf中的配置。参数列表如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Usage: tsd --port=PORT --staticroot=PATH --cachedir=PATH Starts the TSD, the Time Series Daemon --async-io=true|false Use async NIO (default true) or traditionalblocking io --auto-metric Automatically add metrics to tsdb as they are inserted. Warning:this may cause unexpected metrics to be tracked --cachedir=PATH Directory underwhich to cache result of requests. --flush-interval=MSEC Maximum time for which a new data point canbe buffered (default: 1000). --port=NUM TCPport to listen on. --staticroot=PATH Web root from which toserve static files (/s URLs). --table=TABLE Nameof the HBase table where to store the time series (default: tsdb). --uidtable=TABLE Name of theHBase table to use for Unique IDs (default: tsdb-uid). --worker-threads=NUM Number for async io workers(default: cpu * 2). --zkbasedir=PATH Path underwhich is the znode for the -ROOT- region (default: /hbase). --zkquorum=SPEC Specificationof the ZooKeeper quorum to use (default: localhost). |
那么我们通过14242端口启动TSD。
1 2 3 |
sudo -u hbase tsdb tsd --port 14242 …… 2015-03-12 17:04:52,253 INFO [main] TSDMain: Ready to serve on /0.0.0.0:14242 |
OK!下面我们打开URL:http://debugo01:14242/
Opentsdb已经安装成功!
2. OpenTSDB设计探索
在OpenTSDB中,有下面一个基本的概念:
Metric:一个可测量的单位的标称。metric不包括一个数值或一个时间,其仅仅是一个标签,包含数值和时间的叫datapoints,metric是用逗号连接的不允许有空格,例如:proc.loadavg.5m
Timestamp:一个绝对时间戳值。
Tags:tag描述被测量的实体,Tags由tag key和tag value组成,前者表示一个分组,后者表示一个特定的项。
Data Point:可以被记录为某一个Timestamp的一个数值。
Time Series:一个metric的带有多个tag的data point集合。
UID:在OpenTSDB中,每一个metric、tagk或者tagv在创建的时候被分配一个唯一标识叫做UID,他们组合在一起可以创建一个序列的UID或者TSUID。在OpenTSDB的存储中,对于每一个metric、tagk或者tagv都存在从0开始的计数器,每来一个新的metric、tagk或者tagv,对应的计数器就会加1。
TSUID。当一个data point被写到OpenTSDB时,其row key格式为:
根据HBase rowkey有序的原则,rowkey为
对于指标proc.loadavg.5m的ID为:[0, 0, 1], 标签名称的ID为:[0, 0, 1] debugo01标签值的ID为:[0, 0, 1],他们组成rowkey:
1 2 3 4 5 |
[0, 0, 1, 77, 4, -99, 32, 0, 0, 1, 0, 0, 1] `-------' `------------' `-----' `------' metric ID base timestamp name ID value ID `---------------' first tag |
由此可见,对于metric + tags相同的数据都会连续存放,且metic相同的数据也会连续存放,这样对于scan以及做aggregation都非常有帮助。
Opentsdb使用一个单独的较小的表叫做tsdb-uid用来存储UID映射,包括正向的和反向的。存在两列簇,一个列簇叫做name用来将一个UID映射到一个字符串,另一个列族叫做id,用来将字符串映射到UID。列簇的每一行都至少有以下三列中的一个:
metrics 将metric的名称映射到UID
tagk 将tag名称映射到UID
tagv 将tag的值映射到UID
3. 使用OpenTSDB
首先创建metrics,命令会输出它的UID。
1 2 |
# sudo -u hbase tsdb mkmetric proc.loadavg.1m metrics proc.loadavg.1mproc.loadavg.1m: [0, 0, 1] |
编写数据加载脚本,脚本来自http://scm.zoomquiet.io/data/20131204123732/index.html
1 2 3 4 5 6 7 8 9 10 11 |
cat >loadavg-collector.sh <<\EOF #!/bin/bash set -e while true; do awk -v now=`date +%s` -v host=`hostname` \ '{ print "put proc.loadavg.1m " now " " $1" host=" host;}' /proc/loadavg sleep 15 done | nc -w 30 debugo01 14242 EOF chmod +x loadavg-collector.sh nohup ./loadavg-collector.sh & |
每隔15秒会输出如下信息到tsd
1 2 |
put proc.loadavg.1m 1288946927 0.36 host=debugo01 … |
通过Scan UID表可以找到它们对应的UID。
1 2 3 |
\x00\x00\x01 column=name:metrics, timestamp=1426212849709, value=proc.loadavg.1m \x00\x00\x01 column=name:tagk, timestamp=1426214303614, value=host \x00\x00\x01 column=name:tagv, timestamp=1426214303641, value=hadoop01 |
在Web页面中输入相应的metrics,可以得到数据的图展示:
^^
参考
http://scm.zoomquiet.io/data/20131204123732/index.html
http://www.cnblogs.com/gsblog/p/4029894.html
你好 我想问一下 那个配置文件中 vim /etc/opentsdb/opentsdb.conf 是自己新建的吗 还是安装时自己安装的
应该是安装时候就有。
您好 请问您文章中说的:每隔15秒会输出如下信息到tsd:put proc.loadavg.1m 1288946927 0.36 host=debugo01这个信息可以在哪里看到呢?vim nohop.out 看到的信息是put: illegal argument: invalid tag: host=
这个更刺j激,准备好手纸哦 A 片。。 http://T.CN/RcWeTaH
这个更刺j激,准备好手纸哦 A 片。。 http://T.CN/RcWeTaH
周公解梦[emote]wink[/emote]
2,很明显那个东西不是薯条好吧。应该是:
中国人民的老朋友
表示只有5、6、8做不到~~~~~手指长的好***~~~
好舒服 今晚就偷偷睡这了 卧槽