基于阿里云HBase搭建OpenTSDB

简介: OpenTSDB是一个基于HBase的分布式、可伸缩的开源时序数据库。OpenTSDB由TSD(Time Series Daemon)和一系列命令行工具组成。TSD用于接收用户请求并将时序数据存储在HBase中。

OpenTSDB是一个基于HBase的分布式、可伸缩的开源时序数据库。OpenTSDB由TSD(Time Series Daemon)和一系列命令行工具组成。TSD用于接收用户请求并将时序数据存储在HBase中。TSD之间是相互独立的,没有master,也没有共享状态,因此可以根据系统的负载情况任意进行扩展。下图是一个基于OpenTSDB的监控系统架构图(来自官方文档):
tsdb | center | 499x319

本文介绍如何在阿里云HBase之上搭建OpenTSDB。

准备HBase和ECS实例

要在阿里云上部署OpenTSDB,我们需要:

  • 一个HBase实例,用来存储数据。HBase的规格可参考HBase文档
  • 一个ECS实例,用来安装、运行OpenTSDB。可参考文档

需要注意的是:
(1)ECS需要和HBase在相同的region内。如果是专有网络,需要ECS和HBase在同一个vpc下。
(2)建议选择linux操作系统(例如CentOS)。本文描述的安装步骤均在CentOS上执行成功,请注意其他操作系统可能部分命令会有不同。
(3)需要把ECS的IP加入到HBase的白名单中。

安装OpenTSDB

安装

要运行OpenTSDB,需要安装如下组件:

  • 安装HBase客户端
  • 安装GnuPlot
  • 安装OpenTSDB

1 安装HBase客户端

HBase客户端的作用主要是执行建表脚本在HBase中创建出OpenTSDB需要的表。HBase客户端的安装、配置过程可以参考这个文档

2 安装GnuPlot

GnuPlot是一个命令行的交互式绘图工具,OpenTSDB使用GnuPlot绘图。GnuPlot可以简单通过yum安装:

yum install -y gnuplot

3 安装OpenTSDB

可以在github上选择需要的版本,下载安装包安装或是下载源码tar包进行编译。以rpm包为例:

wget https://github.com/OpenTSDB/opentsdb/releases/download/v2.3.0/opentsdb-2.3.0.rpm
yum localinstall opentsdb-2.3.0.rpm

运行tsdb version看到如下输出

net.opentsdb.tools 2.2.0 built at revision 07d0464 (MINT)
Built on 2016/02/15 22:56:59 +0000 by hobbes@clhbase:/home/hobbes/opentsdb_OFFICIAL/build

表明已经安装完成了。

配置

1 在HBase中创建OpenTSDB需要的表

OpenTSDB提供了一个脚本来执行建表的动作。命令如下:

env COMPRESSION=SNAPPY HBASE_HOME=/path/to/hbase /usr/share/opentsdb/tools/create_table.sh

执行之后,会在HBase中创建出tsdb、tsdb-uid、tsdb-tree和tsdb-meta四个表。
在执行建表的脚本时需要设置这两个环境变量:

  • COMPRESSION表示OpenTSDB的表所使用的压缩方式。脚本中的默认值是lzo,但是阿里云HBase不支持这种压缩方式,我们把这个参数设置为SNAPPY。SNAPPY是阿里云HBase推荐的压缩方式,参见云HBase文档
  • HBASE_HOME配置为HBase客户端的安装目录。

2 修改OpenTSDB的配置文件

配置文件的路径在/etc/opentsdb/opentsdb.conf。我们需要把其中的tsd.storage.hbase.zk_quorum这个参数修改为HBase的ZK连接地址(可在HBase控制台查看)。
配置完成后,运行如下命令启动OpenTSDB:

tsdb tsd

执行

curl http://localhost:4242/api/config

看到如下输出

{"tsd.core.auto_create_metrics":"false","tsd.core.auto_create_tagks":"true","tsd.core.auto_create_tagvs":"true","tsd.core.meta.enable_realtime_ts":"false","tsd.core.meta.enable_realtime_uid":"false","tsd.core.meta.enable_tsuid_incrementing":"false","tsd.core.meta.enable_tsuid_tracking":"false","tsd.core.plugin_path":"/usr/share/opentsdb/plugins","tsd.core.preload_uid_cache":"false","tsd.core.preload_uid_cache.max_entries":"300000","tsd.core.socket.timeout":"0","tsd.core.storage_exception_handler.enable":"false","tsd.core.tree.enable_processing":"false","tsd.core.uid.random_metrics":"false","tsd.http.cachedir":"/tmp/opentsdb","tsd.http.query.allow_delete":"false","tsd.http.request.cors_domains":"","tsd.http.request.cors_headers":"Authorization, Content-Type, Accept, Origin, User-Agent, DNT, Cache-Control, X-Mx-ReqToken, Keep-Alive, X-Requested-With, If-Modified-Since","tsd.http.request.enable_chunked":"false","tsd.http.request.max_chunk":"4096","tsd.http.show_stack_trace":"true","tsd.http.staticroot":"/usr/share/opentsdb/static/","tsd.mode":"rw","tsd.network.async_io":"true","tsd.network.bind":"0.0.0.0","tsd.network.keep_alive":"true","tsd.network.port":"4242","tsd.network.reuse_address":"true","tsd.network.tcp_no_delay":"true","tsd.network.worker_threads":"","tsd.no_diediedie":"false","tsd.query.allow_simultaneous_duplicates":"true","tsd.query.filter.expansion_limit":"4096","tsd.query.skip_unresolved_tagvs":"false","tsd.query.timeout":"0","tsd.rtpublisher.enable":"false","tsd.rtpublisher.plugin":"","tsd.search.enable":"false","tsd.search.plugin":"","tsd.stats.canonical":"false","tsd.storage.compaction.flush_interval":"10","tsd.storage.compaction.flush_speed":"2","tsd.storage.compaction.max_concurrent_flushes":"10000","tsd.storage.compaction.min_flush_threshold":"100","tsd.storage.enable_appends":"false","tsd.storage.enable_compaction":"true","tsd.storage.fix_duplicates":"false","tsd.storage.flush_interval":"1000","tsd.storage.hbase.data_table":"tsdb","tsd.storage.hbase.meta_table":"tsdb-meta","tsd.storage.hbase.prefetch_meta":"false","tsd.storage.hbase.tree_table":"tsdb-tree","tsd.storage.hbase.uid_table":"tsdb-uid","tsd.storage.hbase.zk_basedir":"/hbase","tsd.storage.hbase.zk_quorum":"hb-wz9sn9wc5li4zbg04-001.hbase.rds.aliyuncs.com:2181,hb-wz9sn9wc5li4zbg04-002.hbase.rds.aliyuncs.com:2181,hb-wz9sn9wc5li4zbg04-003.hbase.rds.aliyuncs.com:2181","tsd.storage.repair_appends":"false"}

这表明,tsdb已经启动起来了。

使用OpenTSDB

OpenTSDB中,一条时序数据包含如下内容:

  • metric名称
  • UNIX时间戳
  • metric的值
  • tags:是一系列的k-v值,用来描述metric数据的属性。在查询数据时可以按照某一个属性做过滤和聚合。

我们以官方文档上所举的例子来描述OpenTSDB的写入和读取:采集cpu用户态使用率。我们将metric命名为sys.cpu.user,用两个tag来描述其属性:host和cpu表示数据描述的是哪个服务器的哪个cpu。

创建metric

使用如下命令

tsdb mkmetric sys.cpu.user

写入数据

作为测试,我们可以使用telnet接口写入两条数据:

# telnet localhost 4242
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
put sys.cpu.user 1356998400 42.5 host=webserver01 cpu=0
put sys.cpu.user 1356999400 42.7 host=webserver01 cpu=0

读取数据

可以使用命令行读取刚才写入的两条数据:

# tsdb query 1356998400 1356999400 sum sys.cpu.user
sys.cpu.user 1356998400000 42.500000 {host=webserver01, cpu=0}
sys.cpu.user 1356999400000 42.700001 {host=webserver01, cpu=0}

也可以使用http接口查询:

# curl 'http://localhost:4242/api/query?start=1356998400&m=sum:sys.cpu.user'
[{"metric":"sys.cpu.user","tags":{"host":"webserver01","cpu":"0"},"aggregateTags":[],"dps":{"1356998400":42.5,"1356999400":42.70000076293945}}]

在web页面查询数据

OpenTSDB提供了一个web页面供查询数据。通过以下步骤可以开放这个页面。

1 ECS绑定公网IP

如果ECS已经有一个公网IP则可以忽略这一步。否则,需要绑定一个弹性公网IP用来从公网访问ECS。具体操作步骤参见EIP文档

2 修改安全组规则

ECS默认的安全组规则没有开放OpenTSDB的端口。我们需要开放这个端口。
登陆ECS控制台,点击OpenTSDB所在的ECS"管理"进入详情页面。
ecs| center | 830x149

选择左侧的"本实例安全组",然后点击"配置规则"。
secure_group | center | 830x170

之后点击"添加安全组规则",在弹出的页面配置安全组的规则。协议类型选择"自定义TCP",端口范围输入OpenTSDB的端口。
rule | center | 830x915

这两步完成之后,在浏览器输入 ECS的公网IP:OpenTSDB端口,即可使用web页面查询数据。见下图:
web| center | 830x345

其他

本文仅简单介绍了OpenTSDB在阿里云上的部署和使用。关于OpenTSDB使用的更多细节可以参考官方文档,也可以在HBase技术社区的OpenTSDB话题下进行讨论。关于阿里云HBase的更多细节可以参考产品文档

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
分布式数据库 Hbase
《阿里云HBase产品体系架构及特性解析》电子版地址
阿里云HBase产品体系架构及特性解析
122 0
《阿里云HBase产品体系架构及特性解析》电子版地址
|
分布式数据库 数据库 NoSQL
大数据开发者必看,阿里云七天深入HBase生态实训营免费报名中!
个人学习HBase不免遇到架构了解不清晰、查询设计效率低、业务搭建不科学等等问题。5月31日,阿里云联合中国HBase技术社区联合推出《七天深入HBase大数据生态实训营》,由Apache HBase社区PMC领衔授课,通过原理讲解、实战教学,带你走进分布式存储的广阔世界!
721 0
|
存储 分布式计算 Cloud Native
HBase的入门与应用|阿里云产品内容精选(二十三)
本文内容选自阿里云数据库版块,助力开发者了解数据库发展最新状况及实践解析。
|
分布式计算 安全 Shell
Maxcompute Spark 访问 阿里云 Hbase
引子 本来这个东西是没啥好写的,但是在帮客户解决问题的时候,发现链路太长,不能怪客户弄不出来,记录一下 需求列表 MaxCompute Spark包 (写文章时刻为版本 0.32.1, 请自行更新,本文不是文档) Spark 配置 spark.
Maxcompute Spark 访问 阿里云 Hbase
|
分布式计算 DataWorks Java
如何使用MaxCompute Spark读写阿里云Hbase
通过Spark on MaxCompute来访问阿里云的Hbase,需要设置网络安全组、Hbase的白名单和配置Spark的参数
2278 0
如何使用MaxCompute Spark读写阿里云Hbase
|
存储 分布式数据库 数据安全/隐私保护
阿里云HBase数据安全实践
受近期“微盟员工删库事件”的影响,大量客户咨询云HBase在备份恢复方面的能力。数据是客户的核心资产,数据安全是生命线,本文总结了云HBase在数据安全方面的使用实践,希望可以帮助用户建立更完善的数据安全保护。
1451 0
阿里云HBase数据安全实践
|
SQL 运维 Java
数据查询的玄铁剑:阿里云HBase二级索引功能解析
HBase原生提供了主键索引,用户可以根据rowkey进行高效的单行读、前缀匹配、范围查询操作。但若需要使用属性列进行查询时,则只能使用filter在查询范围内进行逐行过滤。在扫描范围较大时,会浪费大量的IO,请求RT也无法保证。为此,HBase增强版推出了原生二级索引来解决非rowkey查询的性能问题。
2265 0
数据查询的玄铁剑:阿里云HBase二级索引功能解析
|
存储 运维 安全
备份!备份!备份! 看阿里云HBase的企业级备份恢复如何设计
数据安全是生命线,一线人员辛苦一年的努力可能因为一时疏忽而废,升职加薪无望;一个公司或者团队辛苦几年的打拼可能一夜回到解放前。所以面对重要的事情要说三遍:备份!备份!备份!
1221 0
备份!备份!备份! 看阿里云HBase的企业级备份恢复如何设计
|
存储 监控 物联网
解密 云HBase时序引擎OpenTSDB 优化技术
逝者如斯夫,不舍昼夜。                                                       —— 孔子 时间如流水,一去不复返。自古不乏对时间流逝的感慨,而现代已经有很多技术记录流逝的过去。
2455 0
解密 云HBase时序引擎OpenTSDB 优化技术