本文档是在hbase0.96.0版本上部署opentsdb监控时遇到的问题及相应的解决办法.本文所有操作均在ubuntu10.04系统上进行,文中所列命令几乎都可以复制粘贴到命令行上执行,命令中涉及到文件路径的需要稍作修改。囿于作者水平有限,文章难免有错误之处,欢迎读者批评指正!
1. 准备工作
1.1. 环境准备
部署opentsdb的基本环境
1) 安装git工具(编译过程和获取源码都需要使用)
2) 确保网络畅通(安装过程中需要下载第三方依赖包)
3) 安装Gnuplot(这个是开源项目,是opentsdb依赖的画图工具,推荐安装4.4版本,官网http://www.gnuplot.info/ )
注意:gnuplot最好不要自己安装,我用的是ubuntu系统所以用apt-get install gnuplot,这样会自动安装好gnuplot的依赖包。
1.2. 源码准备
获取opentsdb源码
git clone git://github.com/OpenTSDB/opentsdb.git
2. 官网部署步骤
2.1. 编译安装opentsdb
在上述准备工作都做好后,进入opentsdb的源码目录,执行 ./build.sh 脚本进行编译,也可以手动运行以下三条命令:
$ ./bootstrap(该命令为首次获取源码后执行,只需执行一次)
$ ./configure
$ make
如果这些步骤执行过程中都没有报错,说明opentsdb编译成功,在启动opentsdb之前需要在hbase上建立opentsdb用到的两个表:tsdb和tsdb-uid(这两个表名是opentsdb的默认表名,如果想用其他名字也可以,只需在启动opentsdb时加上--table=tablename和--uidtable=uid-table-name即可)。建表命令(该脚本建立默认表名)如下:
env COMPRESSION=NONE HBASE_HOME=path/to/hbase-home ./src/create_table.sh
上面建表时没有启用hbase的压缩模式,在实际生产环节中强烈建议启用LZO压缩(因为数据量非常大)。
2.2. 启动opentsdb
成功编译后的opentsdb根目录(或根目录下的build目录)会生成一个tsdb的可执行文件,即可通过该文件启动opentsdb。
公共参数
--table=table-name//参考上一节编译安装opentsdb
--uidtable=uid-table-name//参考上一节编译安装opentsdb
--zkbasedir=PATH//指明hbase的注册路径,默认为:/hbase
--zkquorum=SPEC//指明zookeeper机器,默认为localhost
这些公共参数在执行opentsdb的所有命令时都是需要的,可以将这些公共参数写入./tsdb.local的文件中,启动opentsdb时会自动读取该文件!
简单的启动opentsdb命令为:
./tsdb tsd --port=4224 --table=tsdb --uidtable=tsdb-uid --staticroot=./staticroot --cachedir="$tsdtmp" --zkquorum=10.10.64.226,10.10.64.235,10.10.65.78 --auto-metric
tsd命令可指定的参数如下:
--async-io=true|false//使用async NIO(true,默认)或传统blocking io(false)
--auto-metric//自动添加metrics到tsdb,如不指定则添加数据前需要先创建对应metrics
--cachedir=PATH//缓存请求结果数据的目录,尽量指定读写高效的目录
--flush-interval=MSEC//一个新数据点被缓存的时间,默认是1000毫秒
--port=NUM//监听的端口
--staticroot=PATH//web 服务的根目录
--worker-threads=NUM//异步io的进程数,默认为cpu个数乘2
更多用法请参考http://opentsdb.net/cli.html
3. 对官网部署的修订
上述步骤对hbase0.94及其以前的版本是适合的,几乎不用做什么修改。但hbase0.96版本较之前版本有较大改动,因此直接按照上述步骤编译部署opentsdb会产生若干问题。现将我的时间结果记录并共享给大家,仅供参考。
Hbase0.96版本较之前的改动主要有:一,使用protobuf;二,去掉ROOT表。
根据上述0.96版本的改动,opentsdb的编译过程需要做如下改动:
3.1. 安装新版本的protobuf
最好安装2.5.0版本的protobuf,之前版本可能有问题。
3.2. 替换第三方库asynchbase
可以到https://github.com/tsuna/asynchbase这里下载asynchbase源码自己编译,也可以到http://tsunanet.net/~tsuna/asynchbase/asynchbase-1.5.0-rc2.jar这里下载编译好的jar包,放入opentsdb根目录里的third_party/hbase/下,并生成新jar包的相应md5文件。注意:如果不生成新的md5文件则新jar包替换不成功,而且还会被删除。
3.3. 改动opentsdb配置
① 在Makefile.am文件中“$(NETTY)\”这一行后面添加一行“$(PROTOBUF)\”。
② 在third_party/include.mk文件中“include third_party/powermock/include.mk”这一行后面添加一行“include third-party/protobuf/include.mk”。
③ 在third-party/protobuf/include.mk中添加如下内容:
PROTOBUF_VERSION := 2.5.0
PROTOBUF := third_party/protobuf/protobuf-java-$(PROTOBUF_VERSION).jar
PROTOBUF_BASE_URL := http://search.maven.org/remotecontent?filepath=com/google/protobuf/protobuf-java/$(PROTOBUF_VERSION)
$(PROTOBUF): $(PROTOBUF).md5
set dummy "$(PROTOBUF_BASE_URL)" "$(PROTOBUF)"; shift; $(FETCH_DEPENDENCY) #注意黄色部分应该为制表符(tab键)
THIRD_PARTY += $(PROTOBUF)
④ 增加third_party/protobuf/protobuf-java-2.5.0.jar.md5文件,内容为“a44473b98947e2a54c54e0db1387d137”
经过上面步骤的修改后重新编译opentsdb,此时应该编译成功了!尽情享受构建在hbase0.96版本上的喜悦吧!
参考资料
[1]. http://opentsdb.net/getting-started.html
[3]. https://groups.google.com/forum/#!topic/asynchbase/HFiG3-e4M_0
[4]. https://groups.google.com/forum/#!msg/opentsdb/Kv-QrliSExU/7-VJKrOoo2cJ