OpenTSDB之HTTP请求接口

308 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

HTTP API

由于OpenTSDB没有支持Java的SDK进行调用,所以基于Java开发OpenTSDB的调用将要依靠HTTP请求的方式进行。下面就先介绍下部分HTTP API的特性:

数据写入

写入特性

  • 为了节省传输带宽,提高传输效率,该接口可以实现批量写入多个属于不同时序的点
  • 写入请求处理时 ,毫无关系的点分开单独处理,即使其中一个点存储失败,也不会影响其他点的保存;
  • 一次请求的点过多,响应请求的速度会变慢。当HTTP请求体的大小超过一定限制,可以进行分块传输(Chunked Transfer),OpenTSDB可以通过对 tsd.http.request.enable_chunked 的配置设置为true(默认为false),即可使OpenTSDB 支持 HTTP 的 Chunked Transfer Encoding。
  • tsd.mode 的配置对写入操作有影响,配置 ro 表示只读状态,配置 rw 表示读写状态,当写入操作一直失败时,可以确认此配置项。

写入请求可选参数

  • /api/put:根据 url 参数的不同,可以选择是否获取详细的信息。
    • 通过POST方式插入数据,JSON格式,例如
    {
        "metric":"self.test", 
        "timestamp":1456123787, 
        "value":20, 
        "tags":{
            "host":"web1"
        }
    }
    
  • /api/put?summary:返回写入操作的概述信息(包括失败和成功的个数)
    {
        "failed": 0,
        "success": 1
    }
    
  • /api/put?details:返回写入操作的详细信息
    {
        "errors": [],
        "failed": 0,
        "success": 1
    }
    
  • /api/put?sync:写入操作为同步写入,即所有点写入完成(成功或失败)才向客户端返回响应,默认为异步写入。
  • /api/put?sync_timeout:同步写入的超时时间。

查询数据

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

    • 请求JSON 格式
    {
        "start": 1456123705,        // 该查询的起始时间
        "end": 1456124985,          // 该查询的结束时间
        "globalAnnotation": false,  // 查询结果中是否返回 global annotation
        "noAnnotations": false,     // 查询结果中是否返回 annotation
        "msResolution": false,      // 返回的点的精度是否为毫秒级,如果该字段为false,
        						    // 则同一秒内的点将按照 aggregator 指定的方式聚合得到该秒的最终值
        "showTSUIDs": true,         // 查询结果中是否携带 tsuid
        "showQuery": true,          // 查询结果中是否返回对应的子查询
        "showSummary": false,       // 查询结果中是否携带此次查询时间的一些摘要信息
        "showStats": false,         // 查询结果中是否携带此次查询时间的一些详细信息
        "delete": false,            // 注意:如果该值设为true,则所有符合此次查询条件的点都会被删除
        "queries": [
           // 子查询,为一个数组,可以指定多条相互独立的子查询
        ]
    }
    
    • Metric Query 类型子查询:指定完整的 metric、tag 及聚合信息。
      • metric 和 tags 是用于过滤的查询条件。
    {
    	"metric": "JVM_Heap_Memory_Usage_MB",	// 查询使用的 metric
    	"aggregator": "sum",					// 使用的聚合函数
    	"downsample": "30s-avg",				// 采样时间间隔和采样函数
    	"tags": {								// tag组合,在OpenTSDB 2.0 中已经标记为废弃
    											// 推荐使用下面的 filters 字段
    		"host": "server01"
    	},
    	"filters": [],							// TagFilter,下面将详细介绍 Filter 相关的内容
    	"explicitTags": false,					// 查询结果是否只包含 filter 中出现的 tag
    	"rate": false,							// 是否将查询结果转换成 rate
    	"rateOption": {}						// 记录了 rate 相关的参数,具体参数后面会进行介绍
    	
    }
    
    • TSUIDS Query 类型子查询(可看做 Metric Query 的优化):指定一条或多条 tsuid,不再指定 metric、tag 等。
    {
    	"aggregator": "sum", 	// 使用的聚合函数
    	"tsuids": [				// 查询的 tsuids 集合,这里的 tsuids 可理解为
    							// 时序数据库的 id
    		"123",
    		"456"
    	]
    }
    
    • 返回字符串也为json格式
    [
        {
            "metric": "self.test",
            "tags": {},
            "aggregateTags": [
                "host"
            ],
            "dps": {
                "1456123785": 10,
                "1456123786": 10
            }
        },
        {
            "metric": "self.test",
            "tags": {
                "host": "web1"
            },
            "aggregateTags": [],
            "dps": {
                "1456123784": 10,
                "1456123786": 15
            }
        }
    ]