ITPub博客

首页 > 数据库 > > OpenTSDB查询和写入毫秒级数据

OpenTSDB查询和写入毫秒级数据

作者:飘絮絮絮丶 时间:2022-02-15 11:05:38 0 删除 编辑

由于OpenTSDB没有支持Java的SDK进行调用,所以基于Java开发OpenTSDB的调用将要依靠HTTP请求的方式进行。

1.毫秒级数据写入

/api/put:通过POST方式插入JSON格式数据,将毫秒级的时间戳赋值给timestamp参数即可,JSON格式:


{
    "metric":"self.test", 
    "timestamp":1567675709879, 
    "value":20, 
    "tags":{
        "host":"web1"
    }
}

Java中毫秒级时间戳获取方式:


// 获取当前时间的Unix时间戳
long millisecond = System.currentTimeMillis();
long millisecond2 = DateTimeUtil.stringLongToMillisecond("2019/09/05 17:28:29:879");

// 日期时间格式字符串转换为(Unix时间戳)长整型类型
public static long stringLongToMillisecond(String string) throws Exception {
    return stringLongToDate(string).getTime();
}

// 日期时间格式字符串转换为Date类型
public static Date stringLongToDate(String string) throws Exception {
    return sdfLong.parse(string);
}

private static SimpleDateFormat sdfLong = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS");

2.毫秒级数据查询

主要是设置msResolution这个参数,如果该字段为false,则同一秒内的点将按照 aggregator 指定的方式聚合得到该秒的最终值

(在查询时默认返回秒级数据(按照查询中指定的聚合方式对 1秒内的时序数据进行采样聚合,形成最终结果))

/api/query:可以选择 Get 或者 Post 两种方式,推荐使用 Post 方式,请求JSON 格式:


{
    "start": 1456123705,        // 该查询的起始时间
    "end": 1456124985,          // 该查询的结束时间
    "globalAnnotation": false,  // 查询结果中是否返回 global annotation
    "noAnnotations": false,     // 查询结果中是否返回 annotation
    "msResolution": true,       // 返回的点的精度是否为毫秒级,如果该字段为false,
                                // 则同一秒内的点将按照 aggregator 指定的方式聚合得到该秒的最终值
    "showTSUIDs": true,         // 查询结果中是否携带 tsuid
    "showQuery": true,          // 查询结果中是否返回对应的子查询
    "showSummary": false,       // 查询结果中是否携带此次查询时间的一些摘要信息
    "showStats": false,         // 查询结果中是否携带此次查询时间的一些详细信息
    "delete": false,            // 注意:如果该值设为true,则所有符合此次查询条件的点都会被删除
    "queries": [
       // 子查询,为一个数组,可以指定多条相互独立的子查询
    ]
}

子查询格式:


{
    "metric": "JVM_Heap_Memory_Usage_MB",    // 查询使用的 metric
    "aggregator": "sum",                     // 使用的聚合函数
    "downsample": "1ms",                     // 采样时间间隔和采样函数
    "tags": {                                // tag组合,在OpenTSDB 2.0 中已经标记为废弃
                                             // 推荐使用下面的 filters 字段
        "host": "server01"
    },
    "filters": [],                            // TagFilter,下面将详细介绍 Filter 相关的内容
    "explicitTags": false,                    // 查询结果是否只包含 filter 中出现的 tag
    "rate": false,                            // 是否将查询结果转换成 rate
    "rateOption": {}                          // 记录了 rate 相关的参数,具体参数后面会进行介绍
}

3.测试结果

向OpenTSDB中插入两条时间相差1ms的数据

分别采用秒级和毫秒级对该时间段进行查询,结果:

秒级查询结果:[{"metric":"metric1","tags":{"tag1":"test","tag2":"mort"},"aggregateTags":[],"dps":{"1567675709":43.0}}]
毫秒级查询结果:[{"metric":"metric1","tags":{"tag1":"test","tag2":"mort"},"aggregateTags":[],"dps":{"1567675709879":21.0,"1567675709880":22.0}}]

秒级查询返回一条数据(将两条进行聚合,代码中zimsum方式,返回21+22)

毫秒级查询直接返回所有数据,无聚合、降采

效果图:

 

参考:

https://github.com/shifeng258/opentsdb-client

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3155618/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Finch DB 简介
请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42249