zoukankan      html  css  js  c++  java
  • OpenTSDB查询和写入毫秒级数据

    由于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://blog.csdn.net/zx711166/article/details/80913861

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

  • 相关阅读:
    条款33:避免遮掩继承而来的名称
    LeetCode OJ:Combinations (排列组合)
    LeetCode OJ:Delete Node in a Linked List(链表节点删除)
    LeetCode OJ:Contains Duplicate III(是否包含重复)
    LeetCode OJ:Contains DuplicateII(是否包含重复II)
    luogu 1004 方格取数
    平衡树之伸展树(Splay Tree)题目整理
    P2472 [SCOI2007]蜥蜴(网络最大流)
    P1349 广义斐波那契数列(矩阵加速)
    P4113 [HEOI2012]采花 (莫队TLE)
  • 原文地址:https://www.cnblogs.com/MWCloud/p/11468826.html
Copyright © 2011-2022 走看看