OWL--监控系统实战四认识OpenTSDB
本篇博客主要简单介绍一下OpenTSDB
,看完后应该可以了解到以下内容
OpenTSDB
到底是个什么东西,还有那些类似的数据库OpenTSDB
里面的一些结构,对应HBase来看一下- 通过Java API调用OpenTSDB
OpenTSDB介绍
简单介绍一下
OpenTSDB
:一个开源的基于HBase的分布式,可扩展的时间序列数据库。- 第一开源JAVA写的,
- 第二是基于HBase的,作者想和HBase社区保持一致性,作为HBase生态的一种补充
- 第三分布式可扩展的,当然就有集群了
- 第四它是一个时间序列数据库。
时间序列数据库
:主要用来存储时间序列数据(数据格式里包含timestamp字段的数据),常常用来做监控预警数据的存储。特点
:- 写多于读:95%-99%的操作都是写操作
- 顺序写:实时数据写入,多以追加的方式
- 很少更新:基本上不更新
- 区块删除:删除总是会删除一段时间的数据
参考:http://liubin.org/blog/2016/02/18/tsdb-intro/
还有那些TSDB
InfluxDB
- 现在名气比较大的,使用Golang写的,目前在TSDB排名第一
- 而且支持类SQL查询语言
- 数据类型丰富
- 事件数据全量存储
- 只是目前只有单节点了,集群要付费了
Graphite
- 创立于2006年,Python写的
- 提供了大量函数,画图强大
- Google、GitHub、豆瓣、Instagram、Evernote和Uber都在用
Beringei
- Facebook今年开源的TSDB
来看一下最新db-engines.com排行统计:
- 了解更多时序数据库:
http://www.uml.org.cn/sjjm/2016032210.asp?artid=17785
http://liubin.org/blog/2016/02/25/tsdb-list-part-1/
OpenTSDB的一些结构设计
OpenTSDB里面的结构和概念
- Metric:监控项,owl里面的一些监控指标,比如磁盘剩余量disk.free。
- Tags:标签,由tagk和tagv组成,用来描述Metric,比如某台机器的磁盘剩余量tags定义hostname=主机名。
- Value:metric的值,比如磁盘剩余量等于100GB。
- Timestamp:时间戳,描述Value是什么时候的,比如是上午10点剩余磁盘容量为10GB。
- Data Point:某个Metric在某个时间点的数值(Metric、Tags、Value、Timestamp),即OpenTSDB保存的就是无数个Data Point。
- 示例:
1
2
3
4
5
6
7
8{
"metric": "disk.free",
"value": 10737418240.00,
"tags": {
"hostname": "xiaoxiaomo",
"uuid": "da361bb0e20a45ee"
}
}
在hbase中现在有四张表
看一看具体的数据
- tsdb-uid:其实就是保存的一些metric,tagk,tagv的一些映射关系
- tsdb:保存具体的数据,看看该表的设计
看一看具体的设计(自己看图吧,画的挺好的,我就不再这儿浪费时间了)
API操作OpenTSDB
- 基于https://github.com/shifeng258/opentsdb-client
写入数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27public boolean putData(String metric, long timestamp, Long value, Map<String, String> tagMap) throws Exception {
MetricBuilder builder = MetricBuilder.getInstance();
builder.
addMetric(metric).
setDataPoint(timestamp, value).
addTags(tagMap);
try {
Response response = httpClient.pushMetrics(builder, ExpectResponse.SUMMARY);
return response.isSuccess();
} catch (Exception e) {
log.error("put data to opentsdb error: ", e);
throw e;
}
}
public void testPutData() {
OpentsdbClient client = new OpentsdbClient(ConfigLoader.getProperty("opentsdb.url"));
try {
Map<String, String> tags = new HashMap<>();
tags.put("hostname","xiaoxiaomo");
client.putData("disk.free", System.currentTimeMillis(), 10737418240L,tags);
} catch (Exception e) {
e.printStackTrace();
}
}API下面的内容就省略了,请参考:https://my.oschina.net/HuQingmiao/blog/701145