OWL--监控系统实战四认识OpenTSDB

  本篇博客主要简单介绍一下OpenTSDB,看完后应该可以了解到以下内容

  1. OpenTSDB到底是个什么东西,还有那些类似的数据库
  2. OpenTSDB里面的一些结构,对应HBase来看一下
  3. 通过Java API调用OpenTSDB

OpenTSDB介绍

简单介绍一下

  • OpenTSDB:一个开源的基于HBase的分布式,可扩展的时间序列数据库。
    • 第一开源JAVA写的,
    • 第二是基于HBase的,作者想和HBase社区保持一致性,作为HBase生态的一种补充
    • 第三分布式可扩展的,当然就有集群了
    • 第四它是一个时间序列数据库。
  • 时间序列数据库:主要用来存储时间序列数据(数据格式里包含timestamp字段的数据),常常用来做监控预警数据的存储。
  • 特点
    1. 写多于读:95%-99%的操作都是写操作
    2. 顺序写:实时数据写入,多以追加的方式
    3. 很少更新:基本上不更新
    4. 区块删除:删除总是会删除一段时间的数据

参考: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排行统计:

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
    27
    public 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;
    }
    }

    @Test
    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

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器