转载自:http://blog.csdn.net/u012842205/article/details/72817966
一、简介
OpenTSDB是基于HBase存储时间序列数据的一个开源数据库,但只是一个HBase的应用而已。也即是在HBase之上加了一层外壳,用于更好的处理时序数据库,真实的数据存储还是在HBase。
时序数据是基于时间的一系列的数据。在有时间的坐标中将这些数据点连成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。时序数据库就是存放时序数据的数据库,并且需要支持时序数据的快速写入、持久化、多纬度的聚合查询等基本功能。
OpenTSDB实现的时间序列Schema主要有两个表:tsdb-uid和tsdb. 前者描述指标(metrics)相关的元数据,后者存储时间序列数据。首先我们来了解一下“指标”(metrics)的概念,简单讲一个指标就是一个需要收集的数据项,但是只有指标是不能全面地描述出一条数据产生的相关背景信息的,比如:如果我们要统计cpu的使用率,我们可以建立一下名为proc.stat.cpu的metrics,如果我们从不同的机器和用户下收集了大量的cpu信息,如果没有对一条信息进行一定地标识,我们是无法区分出哪些数据来自哪台机器的哪个用户,所以我们还需要建立一些“标签”(Tag)来标识一条数据。严格地说,指标和标签之间并没有必然的从属关系,就像两个不同的指标的数据可能都有指示其来自哪台主机的host标签一样,但是有一点是确定的,即:对于一条数据来说,应该至少含有一个指标和一个标签,这样的数据才是有意义的,因此,在OpenTSDB的表设计上,就把“指标”(metrics)和“标签”(Tag)统一放在了tsdb-uid表中存储,格式为:RowKey(自增ID,3字节数组):name:metrics,name:tagk,name:tagv,同时对它们之间的反向关联关系也作了展开存储。
二、安装
1、安装环境
操作系统:CentOS Linux release 7.2.1511 (Core)
OpenTSDB版本:2.3.0
JDK版本:1.8.1_101
Apache HBase版本:1.2.2
以上组件的安装步骤本文不再赘述。
2、安装
OpenTSDB属于HBase上层应用,其底层是与HBase交互,而Schema的逻辑都是OpenTSDB控制。这里需要提一点,OpenTSDB一般不用集群安装,但可以有集群部署的方案,这些方案大多使用第三方组件完成。具体参看官方文档。本文只记录单节点安装部署。下面的操作都针对安装节点完成。
除了上面提到的依赖组件,Opentsdb还依赖Gnuplot,它是一个命令行的交互式绘图工具,一般使用Linux发行版的源即可安装:
yum install gnuplot
注意:OpenTSDB依赖Gnu Make。
安装OpenTSDB,进入OpenTSDB官网,下载到tar.gz。并解压:
tar -xzvf /home/opentsdb/opentsdb-2.3.0.tar.gz -C /home/opentsdb/
注意:这里我已经在服务器上创建了一个opentsdb系统用户,用于运行opentsdb服务。
我们下载到的是github托管的源码,这里需要编译出jar。切换到解压后的目录,运行脚本文件configuration。这个脚本文件检查安装环境的组件依赖,调整一些参数,并最后生成Makefile。运行命令`make`进行编译。
当编译正常结束后,将在当前目录产生tsdb-2.3.0.jar文件。这个jar依赖的所有jar文件都在当前目录的./third_party下。这时候还会有一个tsdb的脚本,这个脚本将用于启动OpenTSDB服务。这个脚本也是运行其他tools的入口调用脚本,非常简单。
如此安装完成。接下来是配置。
三、配置
安装完成后,第一步是创建schema所需要的表:
env COMPRESSION=NONE HBASE_HOME=/home/hadoop/hbase ./src/create_table.sh
这条命令同样在根目录下运行。
其他配置
使用配置文件opentsdb.conf,在部署根目录创建配置文件即可,可以从./src得到这个文件,复制过来。更改如下配置项:
-
# 接受请求的端口
-
tsd.network.port = 4399
-
# 接受请求的网卡
-
tsd.network.bind = 0.0.0.0
-
# HTTP客户端的GUI静态页面,这个使用默认值即可。
-
tsd.http.staticroot = ./staticroot
-
# cache 路径,最好提前创建好,保证读写权限。
-
tsd.http.cachedir = /home/opentsdb/tsdb_cache
-
# 是否能自动创建统计指标
-
tsd.core.auto_create_metrics = true
-
# HBase表名称
-
tsd.storage.hbase.data_table = tsdb
-
# HBase访问相关
-
tsd.storage.hbase.zk_basedir = /hbase
-
tsd.storage.hbase.zk_quorum = master1,master2,slave1,slave2
-
tsd.storage.fix_duplicates = true
四、运行使用
1、上面有提到,运行OpenTSDB的服务使用tsdb这个脚本完成,这里我编写了一个脚本,专用于启动服务:
-
#!/bin/bash
-
# Author: ez
-
# Date: 2017/3/13
-
# Discription: Start Opentsdb server.
-
ROOT=`dirname $0`
-
LOG_DIR=$ROOT/logs
-
OUT_FILE=server.log
-
nohup $ROOT/tsdb tsd >> $LOG_DIR/server.log 2>&1 &
逻辑很简单,只是配置了一个log目录,用于接收打印到stdout的日志。并用nohup将session终端与进程分离,挂到init上。
测试时也可以直接使用如下命令:
./tsdb tsd
2、简单使用
启动起来后,可以使用浏览器查看GUI,配置的端口为4399。由于OpenTSDB使用的都是HTTP请求,所以这里我们同样使用HTTP请求来测试读写数据。我们使用curl工具做请求。
写入统计指标mytest.cpu,host=master1
curl -i -X POST -d '{"metric":"mytest.cpu","timestamp":1496219345,"value":1.3,"tags":{"host":"master1"}}' http://master1:4399/api/put?details
接下来通过浏览器访问GUI,输入指标(matrix)mytest.cpu,host为master1则可以得到曲线图。