时间序列数据库武斗大会之 KairosDB 篇

【编者按】
刘斌,OneAPM后端研发工程师,拥有10多年编程经验,参与过大型金融、通信以及Android手机操作系的开发,熟悉Linux及后台开发技术。曾参与翻译过《第一本Docker书》、《GitHub入门与实践》、《Web应用安全权威指南》、《WEB+DB PRESS》、《Software Design》等书籍,也是Docker入门与实践课程主讲人。本文所阐述的「时间序列数据库」,系笔者所负责产品 Cloud Insight 对性能指标进行聚合、分组、过滤过程中的梳理和总结。

今天我们来介绍一下 KairosDB.

按照官方的说明,KairosDB 是一个 “Fast Time Series Database on Cassandra”,即基于 Cassandra 的高速时序列数据库。

特点

数据采集

数据可以通过多种协议写入 KairosDB,比如 Telnet 的按行写入,HTTP API,Graphite 以及批处理导入。此外,还可以使用或者自己编写插件。

存储

KairosDB 采用了 Cassandra 作为数据存储方式,Cassandra 也是一个比较流行的NoSQL数据库,很多开源软件基于此数据库。

Rest API

KairosDB 提供了 REST API,已完成对 metric 名称,tag 等的查询,当然,也少不了存储和查询数据点(data points)。

自定义数据类型(Custom Data)

KairosDB 支持存储和聚合自定义数据类型。默认情况下 KairosDB 支持 long、double 和字符串的 value,这比 OpenTSDB 要丰富一些。

分组和聚合

作为数据分析系统,分组和聚合则是必不可少的功能。 KairosDB的聚合(也就是down samples)功能,支持的标准函数有 min、max、sum、count、mean、histogram、gaps 等,而且都非常实用。

比如 percentile,可以计算一个指标值大概的百分比位置,非常适合存储类似“你打败了xx%的人”这种需求场景。

支持工具

KairosDB 提供了进行数据导入导出的命令行工具。根据官方文档的说明,在一台分配了 2Gig 内存的 SSD Cassandra 上,1 秒钟能导入 13 万条数据。

插件机制

KairosDB 也提供多种基于 Guice 的插件机制来进行扩展(data point 监听器,数据存储,协议处理等。)

KairosDB 是从 OpenTSDB fork 过来的,因此最初它是支持 HBase 的,不过现在 HBase 已经不能完全支持 KairosDB 所需的特性,将来会取消对 HBase 的支持。

入门 KairosDB

安装 KairosDB

这里我们以当前最新的1.1.1版本为例进行说明。

首先,需要确保你的JAVA_HOME已经设置好了,且Java版本高于1.6。

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

然后需要到 GitHub 上去下载安装包。我用的是 OS X 系统,因此我选择了kairosdb-1.1.1-1.tar.gz (注意:点击这个链接即可下载)

解压后可以看看它的配置文件conf/kairosdb.properties,有一些东西适合 OpenTSDB 一样的,比如 4242 端口。

KairosDB 集成了 jetty,你可以通过 jetty 访问 WEB UI,而且还支持添加 SSL 支持,这样安全性上比 OpenTSDB 高了一个层级。

配置文件中还能对 Cassandra 进行设置,比如服务器地址、keyspace 等。不过默认的话 KairosDB 使用 H2 作为数据存储,这样在开发环境下我们就不必配置Cassandra 了。这里我们也以 H2 为例来初步认识一下 KairosDB,这也是 KairosDB 的默认配置。

所以在这个例子里,我们不必修改配置文件,直接启动 KairosDB 即可:

$ bin/kairosdb.sh run
# 或者
$ bin/kairosdb.sh start

其中run参数会以前台运行的方式启动 KairosDB,而start则以后台进程的方式启动 KairosDB。

停止 KairosDB 只需要运行bin/kairosdb.sh stop就可以了。

写入数据

和 OpenTSDB 一样,KairosDB 也支持基于 telnet 和 HTTP API 的方式写入数据。

Telnet

Telnet 的方式数据格式很简单:

put <metric_name> <time-stamp> <value> <tag> <tag>... \n

这里我们就不做演示了。

HTTP API

只需要发送 JSON 数据到 http://localhost:8080/api/v1/datapoints 就可以了。

这是我们写入测试数据的方法:
$ curl -v -H "Content-type: application/json" -X POST  http://localhost:8080/api/v1/datapoints -d '
[{
    "name": "cpu.load.1",
    "timestamp": 1453109876000,
    "typ
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值